;**************** X24C02 WRITING AND READING SUBROUTINE *************************************
COUNTER EQU 25H ;COUNTER UNIT USED TO SAVE THE CIRCLE_TIMES
BYTEADD EQU 24H ;WRITING&READ BYTE_ADDRESS OF 24C02
SENDDATA EQU R1
SDA BIT P3.4
SCL BIT P3.5
;===============================WRITE SUBROUTINE==========================================
;========= SEND WRITING_ADDRESS TO 24H UNIT AND SENDDATA TO R1 ==========
;=============================================================================================
WRITE: LCALL START
MOV A,#0A0H ;SENDING THE SLAVE ADDRESS AND WRITE SIGNAL TO 24C02(A0/A1/A2=0)
NOP
LCALL SENDBYTE
NOP
LCALL ACK ;SENDING ACK SIGNAL
NOP
MOV A, BYTEADD
LCALL SENDBYTE
NOP
LCALL ACK
MOV A,SENDDATA ;SENDING THE DATA WANTED TO BE WRITEN
LCALL SENDBYTE
LCALL ACK
NOP
LCALL STOP ;SROP THE OPREATION
NOP
RET
NOP
;==================================START PROCESS==========================================
;==SENDING A DOWN_EDGE DURING SCL HOLDING HIGH LEVEL,USE TO START A WRITE OR READ OPREATION===
;=============================================================================================
START: SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
NOP
NOP
STOP: CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
NOP
NOP
SENDBYTE: MOV COUNTER,#08H
CYCLE1: RLC A
MOV SDA, C
LCALL CLOCK
DJNZ COUNTER,CYCLE1
NOP
NOP
RET
NOP
NOP
CLOCK: NOP
SETB SCL
NOP
NOP
NOP
MOV C, SDA
CLR SCL
NOP
NOP
RET
NOP
NOP
ACK: SETB SDA
LCALL CLOCK
NOP
NOP
RET
NOP
NOP
;====================================READ SUBROUTINE=====================================
;====== SEND THE READ_ADDRESS TO THE 24H UNIT AND THE RETURN DATA IS LOCATED IN ACC ==========
;=============================================================================================
READ: SETB SDA ;Make SDA as an imput pin
LCALL START ;
MOV A,#0A0H ;SENDING THE SLAVE ADDRESS AND READ SIGNAL TO 24C02(A0/A1/A2=0)
NOP
LCALL SENDBYTE
NOP
LCALL ACK ;SENDING ACK SIGNAL
NOP
MOV A, BYTEADD
LCALL SENDBYTE
NOP
LCALL ACK
LCALL START
MOV A,#0A1H ;SENDING THE SLAVE ADDRESS AND READ SIGNAL TO 24C02(A0/A1/A2=0)
NOP
LCALL SENDBYTE
NOP
LCALL ACK ;SENDING ACK SIGNAL
NOP
MOV COUNTER,#08H
CYCLE2: LCALL CLOCK
RLC A
DJNZ COUNTER,CYCLE2
NOP
NOP
RET
END