;发送一次配置参数(配置寄存器)子程序
SEND_ONE: ACALL I2C_START ;主机发送开始条件
MOV A, #10010000B ;发送ads1110地址(末位为0表示写)
ACALL SENDBYTE
ACALL I2C_CHECK
JC STOP1 ;如果应答失败,结束通讯
MOV A, #10011100B ;工作在单周期模式
ACALL SENDBYTE
ACALL I2C_CHECK
STOP1: ACALL I2C_STOP
RET
;接收一次温度值(三个字节)子程序
READ_ONE: ACALL I2C_START ;主机发送开始条件
MOV A, #10010001B ;发送ads1110地址(末位为1表示读)
ACALL SENDBYTE
ACALL I2C_CHECK
JC STOP2 ;如果应答失败,结束通讯
ACALL READBYTE
MOV R5, A ;高字节存在R5中
CLR SDA2 ;发送应答脉冲
NOP
NOP
SETB SCL2
NOP
NOP
CLR SCL2
ACALL READBYTE
MOV R4, A ;低字节存在R4中
CLR SDA2 ;发送应答脉冲
NOP
NOP
SETB SCL2
NOP
NOP
CLR SCL2
ACALL READBYTE ;配置寄存器数据存在A中
; MOV R3, A
CLR SDA2 ;发送应答脉冲
NOP
NOP
SETB SCL2
NOP
NOP
CLR SCL2
STOP2: ACALL I2C_STOP
RET
;I2C开始子程序
I2C_START: SETB SDA2
SETB SCL2
NOP
NOP
CLR SDA2
NOP
NOP
CLR SCL2
NOP
NOP
RET
;I2C停止子程序
I2C_STOP: CLR SDA2
SETB SCL2
NOP
NOP
SETB SDA2
NOP
NOP
CLR SCL2
NOP
NOP
RET
;I2C检测应答子程序
I2C_CHECK: SETB SDA2
SETB SCL2
NOP
NOP
MOV C, SDA2
NOP
NOP
CLR SCL2
RET
;接收一个字节数据子程序
READBYTE: SETB SDA2 ;释放总线
MOV 6EH, #8H
READ_LOOP: SETB SCL2 ;读取数据
NOP
NOP
MOV C, SDA2
NOP
NOP
CLR SCL2
RLC A
DJNZ 6EH, READ_LOOP
RET
;发送一个字节数据子程序
SENDBYTE: CLR C
CLR SCL2
MOV 6EH, #8H
SEND_LOOP1: RLC A
MOV SDA2, C
SETB SCL2
NOP
NOP
CLR SCL2
NOP
DJNZ 6EH, SEND_LOOP1
RET