一,IIC串行總線系統基本結構如下圖:
備註:標準IIC普通模式下,數據的傳輸速率爲100kbps,高速模式下可達400kbps,總線擴展的器件數量是由電容負載確定,IIC總線上每一個節點器件的接口都有一定的等效電容,電容量越大,傳輸延遲越高。
二,IIC協議和24C02器件介紹
見此文:
IIC和24C02介紹
24C02實物圖:
51單片機最小系統:原理圖和實物圖
(實際使用時,須在P0口外接上拉電阻)
3,24C02程序源碼:
SDA BIT P2.4
SCL BIT P2.3
WORDADRR EQU 66H ;WORDADRR EQU 30H
DATEADDR EQU 66H
SLAVE_W EQU 0XA0
SLAVE_R EQU 0XA1
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#SLAVE_W
MOV R7,#08H
MOV R1,#WORDADRR
LOOP:
MOV @R1,A
INC A
INC R1
DJNZ R7,LOOP
;賦值用於測試
LCALL WRITEDATA
MOV 72H,#100
Q3:
MOV 71H,#100
Q1:
MOV 70H,#47
Q0:
DJNZ 70H,Q0
NOP
DJNZ 71H,Q1
MOV 70H,#46
Q2:
DJNZ 70H,Q2
NOP
DJNZ 72H,Q3
MOV 70H,#48
Q4:
DJNZ 70H,Q4
;delay
ACALL READ_8
LJMP RETURN
WRITEDATA:
ACALL IICSTART ;8字節發送
MOV A,#SLAVE_W
ACALL IICSEND
ACALL ACK
JNB ACC.4 ,D1
LJMP ERR
D1:
MOV A,#WORDADRR
ACALL IICSEND
ACALL ACK
JNB ACC.4,D2
LJMP ERR
D2:
MOV R0,#DATEADDR
MOV R6,#08H
D4:
MOV A,@R0
ACALL IICSEND
ACALL ACK
JNB ACC.4,D3
LJMP ERR
D3:
INC R0
DJNZ R6,D4
ACALL STOP
RET
READ_8:
ACALL IICSTART ;序列讀8字節
MOV A,#SLAVE_W ;從機地址+W
ACALL IICSEND
ACALL ACK
JNB ACC.4,D5
LJMP ERR
D5:
MOV A,#WORDADRR
ACALL IICSEND
ACALL ACK
JNB ACC.4,D6
LJMP ERR
D6:
ACALL IICSTART
MOV A,#SLAVE_R ;從機地址+R
ACALL IICSEND
ACALL ACK
JNB ACC.4,D7
LJMP ERR
D7:
MOV R0,#51H
MOV R6,#07H
D9:
ACALL RECIEVE
MOV @R0 ,A
ACALL DATA0ORACK
D8:
INC R0
DJNZ R6,D9
ACALL RECIEVE
MOV @R0,A
ACALL DAT1ORNACK
ACALL STOP
RET
IICSEND:
MOV R7,#08H
L0:
RLC A
JC L1
ACALL L0
AJMP L2
L1:
ACALL DAT1ORNACK
L2:
DJNZ R7,L0
RET
RECIEVE:
MOV R7,#08H
BACK1:
SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
DJNZ R7,BACK1
RET
IICSTART:
SETB SCL
SETB SDA
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
STOP:
CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
CLR SDA
RET
ACK:
SETB SCL
SETB SDA
NOP
NOP
NOP
NOP
NOP
MOV A,P2
JNB ACC.4,L4
AJMP ACK
L4:
CLR SCL
NOP
RET
DATA0ORACK:
CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
SETB SDA
RET
DAT1ORNACK:
SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
CLR SDA
RET
ERR:
AJMP RETURN
RETURN:
END