my project is to find the average min and max of a list of several values and then convert it into bcd and display it on the LED of the pickit3, it will build and debug on the simulator however when i connect it to the pickit i receive no output please help here is my code:
list p=18f45k20
#include p18f45k20.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HI_SUM EQU 0X01 ;USED TO FIND AVERAGE
LO_SUM EQU 0X02 ;USED TO FIND AVERAGE
CPFLAG EQU 0X00 ;BIT 0 IN STATUS REGISTER
COUNTER EQU 0X03 ;SET REGISTER 3 AS A COUNTER
AVERAGE EQU 0X04 ;AVERAGE VALUE WILL BE STORED HERE
MAX EQU 0X05 ;MAX WILL BE STORED HERE
MAX1 EQU 0X12
MIN EQU 0X06 ;MIN WILL BE STORED HERE
MIN1 EQU 0X13
BUFF0 EQU 0X07 ;BCD ;BCD0
BUFF1 EQU 0X08 ;BCD ;BCD1
NUMS EQU 0X09 ;TEMPORARY STORE NUMBERS
BUFFER EQU 0X10 ;BEGGINING OF VALUE ADDRESSES IN DATA MEM
REG0 EQU 0X30 ;DELAY REG
REG1 EQU 0X31 ;DELAY REG
REG2 EQU 0X32 ;DELAY REG
REG3 EQU 0X33
REG4 EQU 0X34
INNER_LOOP EQU D'110'
OUTTER_LOOP EQU D'220'
ORG 0X400 ;WHERE VALUES WILL BE STORED IN PROGRAM MEM
NUMBERS DB 0X01, 0X08, 0X07, 0X1A, 0X0C, 0X04, 0XFF
ORG 0X20 ; PROGRAM WILL BE ASSEMBLED AT REG 20
GOTO MAIN
;TRANSFERING DATA FROM PM TO DM
DATACOPY
LFSR FSR0, BUFFER
MOVLW UPPER NUMBERS
MOVWF TBLPTRU
MOVLW HIGH NUMBERS
MOVWF TBLPTRH
MOVLW LOW NUMBERS
MOVWF TBLPTRL
LOOP: TBLRD*+
MOVFF TABLAT, WREG
MOVWF POSTINC0
CPFSEQ 0XFF
BRA LOOP
RETURN
;FIND AVERAGE
AVG: MOVLW D'6' ; NUMBER OF VALUES
MOVWF COUNTER
LFSR FSR0, BUFFER ;Set up FSR0 as pointer for data registers
CLRF WREG,0
CLRF LO_SUM
CLRF HI_SUM
SUM: ADDWF POSTINC0,0,0 ;Get data byte in WREG
BTFSC STATUS,C
INCF HI_SUM ;Is byte = 0? If yes, data string is finished
DECF COUNTER,1,0
BNZ SUM
MOVWF LO_SUM
AVG2: CLRF AVERAGE
DIVIDE: MOVLW D'6'
INCF AVERAGE
SUBWF LO_SUM
BTFSC STATUS, 0
GOTO DIVIDE
DECF HI_SUM
BTFSC STATUS, 0
GOTO DIVIDE
DECF AVERAGE
RETURN
;FIND MAX
MAXIMUM: MOVLW D'6'
MOVWF COUNTER
MOVFF BUFFER, MAX
LFSR FSR0, MAX1
NEXT: MOVWF POSTINC0, 0
BZ FINISH
BTFSC WREG, 6
BRA NEXT
CPFSLT MAX, 0
BRA NEXT
MOVWF MAX
FINISH: RETURN
;FIND MIN:
MINIMUM: MOVLW D'6'
MOVWF COUNTER
MOVFF BUFFER, MIN
LFSR FSR0, MIN1
NEXT1: MOVWF POSTINC0, 0
BZ FINISH1
BTFSC WREG, 6
BRA NEXT1
CPFSLT MIN, 0
BRA NEXT
MOVWF MIN
FINISH1: RETURN
;CONVERT TO BCD:
BCD
BINBCD: CLRF BUFF0
CLRF BUFF1
MOVWF NUMS
LFSR FSR0, BUFF1
MOVLW D'10'
RCALL DIVISION
LFSR FSR0, BUFF0
MOVFF NUMS, BUFF0
DIVISION:
INCF INDF0
SUBWF NUMS
BTFSC STATUS, C
GOTO DIVISION
ADDWF NUMS, 1
DECF INDF0
RETURN
;DELAY CODE:
DELAY
DELAY50MS: MOVLW D'166'
MOVWF REG3
LOOP1: DECF REG3
BNZ LOOP1
DECF REG4, 1
BNZ DELAY50MS
RETURN
;CODE FOR BLINKING:
BLINKING
START1: MOVLW B'10101100' ;load binary value
MOVWF TRISD ; define Port D as output
MOVWF REG0
ONOFF: MOVFF REG0, PORTD ;set clock speed
MOVLW INNER_LOOP ;first loop = 110
MOVWF REG1 ;load reg2 with 110
MOVLW OUTTER_LOOP ;second loop = 220
MOVWF REG2 ;load loop 2 value into reg 3
LOOP3: DECF REG1, 1 ;decrease reg2 by 1
BNZ LOOP3 ; check reg2 = 0
DECF REG2, 1 ;decrease reg3 by 1
BNZ LOOP3 ;check reg 3 = 0
COMF REG0 ,1 ; compliment reg1
BRA ONOFF ; branch if command ment
SLEEP
;MAIN ASSEMBLY CODE:
MAIN
MOVLW 0X00
MOVWF TRISD ; PORT D AS OUTPUT
CALL BLINKING
CLRF PORTD
CALL DELAY
CALL DATACOPY
CALL AVERAGE
MOVFF AVERAGE, WREG
CALL BCD
CALL DELAY
CALL MINIMUM
MOVFF MIN, WREG
CALL BCD
CALL DELAY
CALL MAXIMUM
CALL BCD
CALL DELAY
CALL BLINKING
CLRF PORTD
SLEEP
END