📄 iic.asm
字号:
;***********************************************************************************************************
;IIC AT24C02 读写代码
;使用说明:
;AT24C02_WRITE 写程序 参数:地址R2 数据R3
;AT24C02_READ 读程序 参数: 地址R4 数据A
;备注:检错从发的功能未实现
; 2008.4.13
;***********************************************************************************************************
SCL BIT P1.0
SDA BIT P1.1
IIC_ACK BIT 00H
;***********************************************************************************************************
;测试程序
;************************************************************************************************************
ORG 0000H
JMP START
ORG 0030H
START: MOV R2,#00H
MOV R3,#77H
CALL AT24C02_WRITE
CALL DELAY
CALL AT24C02_READ
CLR P1.3
MOV P0,A
SJMP $
;***********************************************************************************************************
;写字节程序
;参数: 地址R2 数据R3
;***********************************************************************************************************
AT24C02_WRITE: CALL IIC_START
MOV A,#10100000B
CALL WRITE_CONFIRM
MOV A,R2
CALL WRITE_CONFIRM
MOV A,R3
CALL WRITE_CONFIRM
CALL IIC_STOP
RET
AT24C02_READ: CALL IIC_START
MOV A,#10100000B
CALL WRITE_CONFIRM
MOV A,R4
CALL WRITE_CONFIRM
CALL IIC_START
MOV A,#10100001B
CALL WRITE_CONFIRM
CALL READ_BYTE
CALL SEND_NACK
CALL IIC_STOP
RET
;***********************************************************************************************************
;读字节程序
;参数: 地址R4 数据A
;***********************************************************************************************************
READ_BYTE: MOV R7,#8
READ_BIT: SETB SDA
SETB SCL
MOV C,SDA
RLC A
CLR SCL
DJNZ R7,READ_BIT
RET
;**********************************************************************************************************
;IIC启动程序
;**********************************************************************************************************
IIC_START: SETB SDA
SETB SCL
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
CLR SCL
RET
;********************************************************************************************************
;IIC停止程序
;********************************************************************************************************
IIC_STOP: CLR SDA
SETB SCL
NOP
NOP
NOP
SETB SDA
RET
;********************************************************************************************************
;写位程序
;********************************************************************************************************
WRITE_BYTE: MOV R7,#8
CLR C
NEXT_BIT: RLC A
MOV SDA,C
SETB SCL
NOP
NOP
NOP
CLR SCL
DJNZ R7,NEXT_BIT
RET
;*******************************************************************************************************
;应答程序
;*******************************************************************************************************
WRITE_CONFIRM: CALL WRITE_BYTE
CALL SEND_ACK
; CALL TEST_ACK
; JNB IIC_ACK,WRITE_CONFIRM
RET
;*******************************************************************************************************
;测试应答信号
;备注:现未使用
;*******************************************************************************************************
TEST_ACK: SETB SDA
SETB SCL
JB SDA,NOT_ACK
SETB IIC_ACK
RET
;******************************************************************************************************
;非应答程序
;备注:现未使用
;******************************************************************************************************
NOT_ACK: CLR IIC_ACK
RET
;*******************************************************************************************************
;发送应答信号
;*******************************************************************************************************
SEND_ACK: ;IIC应答函数
CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
CLR SCL
RET
;*******************************************************************************************************
;发送非应答信号
;*******************************************************************************************************
SEND_NACK:
SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
CLR SCL
RET
DELAY: MOV R7,#0FFH
DEL1: MOV R6,#0FFH
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -