3 软件设计
按照硬件电路,采用汇编语言编程,在KeilA51 V8.50环境下调试通过,并成功应用在单片机称重系统中。软件按功能模块,主要由LCD显示控制、ADslllO模数转化、超负荷报警检测、采集数据处理、键盘中断等子程序构成。此处侧重介绍ADSlll0模数转换程序。程序代码如下:
;定义P3.O脚为时钟SCI,P3.1脚为数据SDA
SDA BIT P3.1 ;定义数据
SCL BIT P3.O ;定义时钟
;配置寄存器子程序
SEND:ACALL START;主机发送开始条件
MOV A,#10010000B ;发送ADSlll0地址(末位为O表示写)
ACALL S_BIT
ACALL G_ASK
JC STOP1 ;如果应答失败,结束通信
MOV A,#l0011100B;工作在单周期模式
ACALL S_BIT
ACALL G_ASK
STOP1: ACALL STOP
RET
;接收一次转换值(3字节)子程序
READ:ACALL START;主机发送开始条件
MOV A,#10010001B;发送ADSlllO地址(末位为1表示读)
ACALL S_BIT
ACALL G_ASK
JC STOP2 ;如果应答失败,结束通信
ACALL READBYTE
MOV R7,A ;高字节存在R7中
CLR SDA ;发送应答脉冲
NOP
NOP
SETB SCL
NOP
NOP
CLR SCL
ACALL READBYTE
MOV R6,A ;低字节存在R6中
CLR SDA ;发送应答脉冲
NOP
NOP
SETB SCL
NOP
NOP
CLR SCL
ACALL READBYTE
MOV R5,A ;配置寄存器数据存在R5中
CLR SDA ;发送应答脉冲
NOP
NOP
SETB SCL
NOP
NOP
CLR SCL
STOP2: ACALL STOP
RET
;I2C开始子程序
START:SETB SDA
SETB SCL
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
NOP
NOP
RET
;I2C停止子程序
STOP:CLR SDA
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
CLR SCL
NOP
NOP
RET
;I2C检测应答子程序