;RAM LOCATION USED IN THIS MODULE 70H
WTCMD EQU 10100000B ;24C04 WRITE COMMAND
RDCMD EQU 10100001B ;24C04 READ COMMAND
ADDRS EQU 70H
SCL EQU P3.6 ;SERIAL CLOCK PIN
SDA EQU P3.7 ;SERIAL DATA PIN
ORG 0000H
LJMP START
ORG 0030H
START:
MOV P1,#01H
MOV R1,#55H ;
MOV A,#00 ;WRITE THE DATA IN R1 REGISTER INTO
MOV ADDRS,A ;ADDRESS POINTED BY ADDRS INTO TEH 24C04
LCALL WRITE ;
LCALL L_DELAY
MOV A,#00 ;
MOV ADDRS,A ;READ THE DATA FROM 24C04 FROM THE MEMORY
LCALL READ ;LOCATION POINTED BY ADDRS AND STORE IN R2
MOV A,R2 ;
MOV P1,A ;MOVE THE RED BACK DATA ONTO P0
LCALL L_DELAY
LJMP START
;THIS IS USED TO WRITE INTO 24C04
;ARGUMENTS1 --> ADDRS => ADDRESS TO BE WRITTEN INTO,IN 24C04 MEMORY
;ARGUMENTS2 --> R1 ==> DATA TO BE WRITTEN
;RETURN --> NONE
WRITE:
MOV A,#WTCMD
CALL OUTS
MOV A,ADDRS
CALL OUT
MOV A,R1
CALL OUT
CALL STOP
RET
;THIS SUB ROUTINE IS USED TO READ DATA FROM THE 24C04
;ARGUMENTS --> ADDRS ==> ADDRESS IN 24C04,THE DATA SHOULD BE READ FROM.
;RETURN --> R2(DATA THAT WAS READ)
READ:
MOV A,#WTCMD
CALL OUTS
MOV A,ADDRS
LCALL OUT
MOV A,#RDCMD
LCALL OUTS
LCALL IN
MOV R2,A
LCALL STOP
RET
OUTS:
MOV B,#8
SETB SDA
SETB SCL
NOP
CLR SDA
NOP
CLR SCL
OSLOOP:
RLC A
MOV SDA,C
SETB SCL
NOP
CLR SCL
DJNZ B,OSLOOP
SETB SDA
NOP
SETB SCL
NOP
CLR SCL
RET
OUT:
MOV B,#8
OLOOP:
RLC A
MOV SDA,C
SETB SCL
NOP
CLR SCL
DJNZ B,OLOOP
SETB SDA
NOP
SETB SCL
NOP
CLR SCL
RET
IN:
MOV B,#8
SETB SDA
INLOOP: CLR SCL
NOP
SETB SCL
MOV C,SDA
RLC A
DJNZ B,INLOOP
CLR SCL
RET
STOP: CLR SDA
NOP
SETB SCL
NOP
SETB SDA
LCALL DLAYms
RET
DLAYms: MOV R6,#150
MOV B,#00
MS1: DJNZ B,$ ;((2*255)+(2*255)*150
DJNZ B,$ ;=153 MILLI SECONDS
DJNZ R6,MS1
RET
L_DELAY: MOV R7,#0AH ;153 MILLISECONDS * 10
LLL: LCALL DLAYms ;1.53 SECONDS
DJNZ R7,LLL
RET
END