Iam not able to read & write internal eeprom Of 16f876A.
My code is...
DG1 VAR BYTE
DG2 VAR BYTE
DG3 VAR BYTE
DIGIT VAR BYTE
DG VAR BYTE
COUNTT VAR BYTE
CX VAR WORD
NUMB VAR WORD
N VAR WORD
B1 VAR BYTE
WORDVariable var WORD
MemoryA DATA @0,0
MemoryB DATA @0
ADCON1=%00000111
TRISA=0
TRISB=%00111000
TRISC=0
PAUSE 2000
NUMB=0
N=NUMB
GOSUB DIGITCALC 'SEGMENTS TO LIGHTUP FOR THE 3 DIGITS ARE FOUND
'-------------------------------------------------------------------------
MAIN:
GOSUB DISPLAY
'SCAN PUSHBUTTONS
IF PORTB.3=1 THEN UP
iF PORTB.5=1 THEN PromptLoop
IF PORTB.4=1 THEN WRITC
GOTO MAIN
'-------------------------------------------------------------------------
WRITC:
WORDVariable=nUMB
WRITE MemoryA,WORDVariable.HighByte
WRITE MemoryB,WORDVariable.LowByte
PAUSE 1000
PromptLoop:
READ MemoryA,WORDVariable.HighByte
READ MemoryB,WORDVariable.LowByte
GOSUB DIGITCALC
'
GOTO MAIN
'_____________________________________
UP:
IF NUMB=999 THEN MAIN 'MAX LIMIT
NUMB=NUMB+1
N=NUMB
GOSUB DIGITCALC 'GET NEW DATA FOR SEGMENTS
GOTO MAIN
'_____________________________________
'_____________________________________
DOWN:
IF NUMB=0 THEN MAIN 'MIN LIMIT
NUMB=NUMB-1
N=NUMB
GOSUB DIGITCALC
GOTO MAIN
'_____________________________________
'_________________________________________________ _______________
DISPLAY:
'DATA FOR DG1,DG2,DG3 IS PUT ON PORTC AND THE CORRESPONDING
'PINS ON PORTB TOGGLED
'THIS IS DONE 100 TIMES
FOR COUNTT=0 TO 99
PORTC=DG1
PORTB.2=1
PAUSE 1
PORTB.2=0
PORTC=DG2
PORTB.1=1
PAUSE 1
PORTB.1=0
PORTC=DG3
PORTB.0=1
PAUSE 1
PORTB.0=0
NEXT COUNTT
RETURN
'_________________________________________________ _______________
'_________________________________________________ _________________________
DIGITCALC:
'THIS ROUTINE BREAKS UP THE NUMBER INTO 3 DISTINCT PARTS - DG1,DG2,DG3
'NOTICE THAT ANOTHER SUBROUTINE IS CALLED EACH TIME
DIGIT=0
LP1:
IF N<100 THEN DS1
N=N-100
DIGIT=DIGIT+1
GOTO LP1
DS1:
GOSUB FND
DG1=DG
DIGIT=0
LP2:
IF N<10 THEN DS2
N=N-10
DIGIT=DIGIT+1
GOTO LP2
DS2:
GOSUB FND
DG2=DG
DIGIT=N
GOSUB FND
DG3=DG
RETURN
'_________________________________________________ _________________________
'_________________________________________________ _________________________
FND:
'THIS ROUTINE IDENTIFIES THE SEGMENTS TO LIGHT UP
'7 SEGMENTS WIRED UP AS FOLLOWS
'A -PORTC.2
'B -PORTC.3
'C -PORTC.6
'D -PORTC.5
'E -PORTC.4
'F -PORTC.1
'G -PORTC.0
FND0:
IF DIGIT>0 THEN FND1
DG=$7E '%0111 1110
GOTO FNDEND
FND1:
IF DIGIT>1 THEN FND2
DG=$48 '%0100 1000
GOTO FNDEND
FND2:
IF DIGIT>2 THEN FND3
DG=$3D '%0011 1101
GOTO FNDEND
FND3:
IF DIGIT>3 THEN FND4
DG=$6D '%0110 1101
GOTO FNDEND
FND4:
IF DIGIT>4 THEN FND5
DG=$4B '%0100 0011
GOTO FNDEND
FND5:
IF DIGIT>5 THEN FND6
DG=$67 '%0110 0111
GOTO FNDEND
FND6:
IF DIGIT>6 THEN FND7
DG=$77 '%0111 0111
GOTO FNDEND
FND7:
IF DIGIT>7 THEN FND8
DG=$4C '%0100 1100
GOTO FNDEND
FND8:
IF DIGIT>8 THEN FND9
DG=$7F '%0111 1111
GOTO FNDEND
FND9:
DG=$6F '%0110 1111
FNDEND:
RETURN
'_________________________________________________ _________________________
My code is...
DG1 VAR BYTE
DG2 VAR BYTE
DG3 VAR BYTE
DIGIT VAR BYTE
DG VAR BYTE
COUNTT VAR BYTE
CX VAR WORD
NUMB VAR WORD
N VAR WORD
B1 VAR BYTE
WORDVariable var WORD
MemoryA DATA @0,0
MemoryB DATA @0
ADCON1=%00000111
TRISA=0
TRISB=%00111000
TRISC=0
PAUSE 2000
NUMB=0
N=NUMB
GOSUB DIGITCALC 'SEGMENTS TO LIGHTUP FOR THE 3 DIGITS ARE FOUND
'-------------------------------------------------------------------------
MAIN:
GOSUB DISPLAY
'SCAN PUSHBUTTONS
IF PORTB.3=1 THEN UP
iF PORTB.5=1 THEN PromptLoop
IF PORTB.4=1 THEN WRITC
GOTO MAIN
'-------------------------------------------------------------------------
WRITC:
WORDVariable=nUMB
WRITE MemoryA,WORDVariable.HighByte
WRITE MemoryB,WORDVariable.LowByte
PAUSE 1000
PromptLoop:
READ MemoryA,WORDVariable.HighByte
READ MemoryB,WORDVariable.LowByte
GOSUB DIGITCALC
'
GOTO MAIN
'_____________________________________
UP:
IF NUMB=999 THEN MAIN 'MAX LIMIT
NUMB=NUMB+1
N=NUMB
GOSUB DIGITCALC 'GET NEW DATA FOR SEGMENTS
GOTO MAIN
'_____________________________________
'_____________________________________
DOWN:
IF NUMB=0 THEN MAIN 'MIN LIMIT
NUMB=NUMB-1
N=NUMB
GOSUB DIGITCALC
GOTO MAIN
'_____________________________________
'_________________________________________________ _______________
DISPLAY:
'DATA FOR DG1,DG2,DG3 IS PUT ON PORTC AND THE CORRESPONDING
'PINS ON PORTB TOGGLED
'THIS IS DONE 100 TIMES
FOR COUNTT=0 TO 99
PORTC=DG1
PORTB.2=1
PAUSE 1
PORTB.2=0
PORTC=DG2
PORTB.1=1
PAUSE 1
PORTB.1=0
PORTC=DG3
PORTB.0=1
PAUSE 1
PORTB.0=0
NEXT COUNTT
RETURN
'_________________________________________________ _______________
'_________________________________________________ _________________________
DIGITCALC:
'THIS ROUTINE BREAKS UP THE NUMBER INTO 3 DISTINCT PARTS - DG1,DG2,DG3
'NOTICE THAT ANOTHER SUBROUTINE IS CALLED EACH TIME
DIGIT=0
LP1:
IF N<100 THEN DS1
N=N-100
DIGIT=DIGIT+1
GOTO LP1
DS1:
GOSUB FND
DG1=DG
DIGIT=0
LP2:
IF N<10 THEN DS2
N=N-10
DIGIT=DIGIT+1
GOTO LP2
DS2:
GOSUB FND
DG2=DG
DIGIT=N
GOSUB FND
DG3=DG
RETURN
'_________________________________________________ _________________________
'_________________________________________________ _________________________
FND:
'THIS ROUTINE IDENTIFIES THE SEGMENTS TO LIGHT UP
'7 SEGMENTS WIRED UP AS FOLLOWS
'A -PORTC.2
'B -PORTC.3
'C -PORTC.6
'D -PORTC.5
'E -PORTC.4
'F -PORTC.1
'G -PORTC.0
FND0:
IF DIGIT>0 THEN FND1
DG=$7E '%0111 1110
GOTO FNDEND
FND1:
IF DIGIT>1 THEN FND2
DG=$48 '%0100 1000
GOTO FNDEND
FND2:
IF DIGIT>2 THEN FND3
DG=$3D '%0011 1101
GOTO FNDEND
FND3:
IF DIGIT>3 THEN FND4
DG=$6D '%0110 1101
GOTO FNDEND
FND4:
IF DIGIT>4 THEN FND5
DG=$4B '%0100 0011
GOTO FNDEND
FND5:
IF DIGIT>5 THEN FND6
DG=$67 '%0110 0111
GOTO FNDEND
FND6:
IF DIGIT>6 THEN FND7
DG=$77 '%0111 0111
GOTO FNDEND
FND7:
IF DIGIT>7 THEN FND8
DG=$4C '%0100 1100
GOTO FNDEND
FND8:
IF DIGIT>8 THEN FND9
DG=$7F '%0111 1111
GOTO FNDEND
FND9:
DG=$6F '%0110 1111
FNDEND:
RETURN
'_________________________________________________ _________________________