📄 iic_a51.asm
字号:
;===============================================================
; 文件名称: IIC_A51.ASM
; 功能描述: IIC总线底层子程序, 时钟: 11.0592MHz
;===============================================================
SDA BIT P1.6
SCL BIT P1.7
ACK BIT 00H
SLA DATA 30H ; 地址
SUBA DATA 31H ; 子地址
; 总线启动函数
START_IIC:
SETB SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
; 停止总线函数
STOP_IIC:
CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
NOP
RET
; 初始化IIC总线
INIT_IIC:
CLR SCL
LCALL STOP_IIC
RET
; 字节发送函数
; 入口参数: R1
SENDBYTE:
PUSH ACC
MOV A, R1
MOV R2, #8
SBYTE1: RLC A
JC SBYTE2
CLR SDA
SJMP SBYTE3
SBYTE2: SETB SDA
SBYTE3: NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R2, SBYTE1
NOP
SETB SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
JB SDA, SBYTE4
SETB ACK
SJMP SBYTE5
SBYTE4: CLR ACK
SBYTE5: NOP
CLR SCL
NOP
NOP
POP ACC
RET
; 字节数据接收函数
; 出口参数: R1
RCVBYTE:
PUSH ACC
MOV A, #00H
CLR C
SETB SDA
MOV R2, #8
RBYTE1: NOP
CLR SCL
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
JB SDA, RBYTE2
CLR C
SJMP RBYTE3
RBYTE2: SETB C
RBYTE3: RLC A
NOP
NOP
CLR SCL
DJNZ R2, RBYTE1
MOV R1, A
POP ACC
RET
; 应答子函数
ACK_IIC:
CLR SDA
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
NOP
RET
; 非应答子函数
NACK_IIC:
SETB SDA
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
NOP
RET
; 向有子地址器件发送多字节数据函数
SEND_STR:
PUSH ACC
LCALL START_IIC
MOV R1, SLA
LCALL SENDBYTE
JNB ACK, SSTR2
MOV R1, SUBA
LCALL SENDBYTE
JNB ACK, SSTR2
MOV R2, #8 ; 一次发送8个字节
MOV R3, #00H
MOV DPTR, #DTAB
SSTR1: MOV A, R3
MOVC A, @A+DPTR
MOV R1, A
LCALL SENDBYTE
INC R3
JNB ACK, SSTR2
DJNZ R2, SSTR1
LCALL STOP_IIC
SSTR2: POP ACC
RET
; 从有子地址器件读取多字节数据函数
; 读出数据保存到40H, 8个字节
RCV_STR:
PUSH ACC
LCALL START_IIC
MOV R1, SLA
LCALL SENDBYTE
JNB ACK, RSTR2
MOV R1, SUBA
LCALL SENDBYTE
JNB ACK, RSTR2
LCALL START_IIC
INC SLA
MOV R1, SLA
LCALL START_IIC
JNB ACK, RSTR2
MOV R2, #8
MOV R0, #40H
RSTR1: LCALL RCVBYTE
MOV A, R1
MOV @R0, A
LCALL ACK_IIC
INC R0
DJNZ R2, RSTR1
LCALL RCVBYTE
MOV A, R1
MOV @R0, A
LCALL NACK_IIC
LCALL STOP_IIC
RSTR2: POP ACC
RET
DTAB: DB 11H,22H,33H,44H,55H,66H,77H,88H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -