51单片机对SAA7113初始化和控制的程序代码
NOP 本文引用地址:https://www.eepw.com.cn/article/172108.htm
SETB SCL
NOP
NOP
MOV C, SDA
MOV I2C_ERROR, C
CLR SCL
NOP
RET
;*******发送1字节数据,待送数据在A中******
I2C_SEND_1BYTE:
MOV R0, #8
SEND100: RLC A
MOV SDA, C
NOP
SETB SCL
NOP
NOP
CLR SCL
DJNZ R0, SEND100
RET
;*******接收1字节数据,接收数据放在A中*****
I2C_RECEIVE_1BYTE:
MOV R0, #8
RECV100: SETB SDA
NOP
SETB SCL
NOP
NOP
NOP
MOV C, SDA
CLR SCL
RLC A
DJNZ R0, RECV100
RET
;*******通过I2C总线向某一寄存器写入一个字节数据*********
I2C_WRITE: ACALL I2C_START ;发启动信号
MOV A, # DeviceaddressW ;调7113地址+写
ACALL I2C_SEND_1BYTE ;发送7113地址及“写”命令
ACALL CHECK_ACK ;检查7113的应答信号
JNB I2C_ERROR, WR200 ;应答正确,继续
WR100: ACALL I2C_STOP ;应答不对,返回
RET
WR200: MOV A, Subaddress ;调寄存器地址
ACALL I2C_SEND_1BYTE ;发送寄存器地址
ACALL CHECK_ACK ;检查7113的应答信号
JB I2C_ERROR, WR100 ;应答不对,返回
MOV A, DATA_I2C ;调准备写入的数据
ACALL I2C_SEND_1BYTE ;发送数据字节
ACALL CHECK_ACK
JB I2C_ERROR, WR100
ACALL I2C_STOP ;发停止信号
评论