I2C總線在單片機(jī)上的實(shí)現(xiàn)
MOV A,#0A1H ;SEND THE CNOTROL BYTE
LCALL SENDBYTE
LCALL ACK
LCALL READBYTE
LCALL BSTOP
POP 0EH
RET
送字節(jié)程序:
SENDBYTE:PUSH 0EH
PUSH 00H
MOV R0,#08H
LOOP1:CLR P1.3
NOP
NOP
RLC A
MOV P1.2,C
CPL P1.3 ;P1.3=1
NOP
NOP
DJNZ R0,LOOP1
POP 00H
POP 0EH
RET
讀字節(jié)子程序:
READBYTE:PUSH 0EH
PUSH 00H
MOV R0,#08H;READ THE CONTENT
CLR A
LOOP4:CLR P1.3
NOP
NOP
NOP
SETB P1.3 ;P1.3=1
MOV C,P1.2
RLC A
DJNZ R0,LOOP4
MOV R2,A
POP 00H
POP 0EH
RET
c.寫數(shù)據(jù)程序:
WRITE:PUSH 0EH
CLR P1.4
LCALL BSTART
MOV A,#0A0H
CLALL SENDBYTE ;SEND THE CONTROL BYTE
LCALL ACK
MOV A,R1 ;SEND THE ADDRESS
LCALL SENDBYTE
LCALL ACK
MOV A,R2 ;WRITE THE CONTENT
LCALL SENDBYTE
LCALL ACK
LCALL BSTOP
POP 0EH
RET
連續(xù)寫的兩個字節(jié)之間最好是有10ms的延時。當(dāng)然,也可以進(jìn)行頁寫(PAGE WRITE),即一次性連續(xù)寫8個字節(jié),但采用頁寫方式時每個字節(jié)后要有一個應(yīng)答信號。
d.停止位程序:
BSTOP:CLR P1.3
NOP
NOP
CLR P1.2
NOP
NOP
NOP
SETB P1.3
NOP
NOP
NOP
SETB P1.2
RET
評論