📄 i2c.a51
字号:
$LIST
SCLPin BIT P1.2 ;I2C serial clock line.
SDAPin BIT P1.3 ;I2C serial data line.
PUBLIC _IIC_SendByte
SoftwareIIC SEGMENT CODE
RSEG SoftwareIIC
_IIC_SendByte:
MOV A,R7
SendDataBit:
RLC A ;; Bit 7
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
RLC A ;; Bit 6
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
RLC A ;; Bit 5
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
RLC A ;; Bit 4
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
RLC A ;; Bit 3
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
RLC A ;; Bit 2
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
RLC A ;; Bit 1
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
RLC A ;; Bit 0
MOV SDAPin,C
SETB SCLPin
;; NOP
CLR SCLPin
NOP
NOP
;;NextDataBit:
;; DJNZ R6,SendDataBit
SETB SDAPin
;; NOP
NOP
NOP
SETB SCLPin
CLR A
MOV R6,A
WaitAck:
JNB SDAPin,ChkAckStatus
INC R6
CJNE R6,#040H,WaitAck
ChkAckStatus:
CJNE R6,#040H,AckOK
CLR SCLPin
;; NOP
CLR SDAPin
SETB C ;; fail, no Ack
RET
AckOK:
CLR SCLPin
;; NOP
CLR SDAPin
CLR C
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -