DS12C887与控制器通过总线连接,主控器采取读写外部存储器的方法读取时间信息和写入调时和定时信息.DS12C887的时标寄存器地址为0-13字节,具体分布如图所示.
图3.14 DS12C887存储器结构
其中10-13字节分别为寄存器A-D.其中寄存器C、D为只读. 寄存器A机构如图所示:
表3.5 DS12C887寄存器A结构
UIP为更新标志位,标志芯片是否即将进行更新.当UIP为1时,表明更新即将开始;为0时,表示在至少244μs内芯片不会进行更新,此时可以通过读写相应字节获取时间信息和设置信息.UIP位为只读位且不受复位信号影响,通过把B寄存器中的SET位置1将UIP位清零并禁止时间更新.DV0-DV2用来开关晶体振荡器和复位分频器,本课题中不需设置.RS0-RS3用于控制分频器输出,设置成不同的值可以在SQW引脚得到不同的分频输出或得到周期性的中断(通过控制寄存器B实现).由于本设计不涉及,具体设置值与对应频率请参考DS12C887技术文档,不在列举. 寄存器B结构如图所示.
表3.6 DS12C887寄存器B结构
当SET位为0时,时间正常更新;当SET位置1时,停止更新,此时,MUC可以对DS12C887进行初始化,该位不受复位信号影响.PIE位为周期性中断使能位,该位为1时,周期性中断使能;为0时禁止中断.本课题中此位置0.AIE位为闹钟中断使能位本课题中由于没有使用中断,该位置0.UIE为更新完成中断使能位,本设计中不考虑.SQWE为方波使能信号,本设计不予处理.DM位为数据格式选择位,置1时时间数据以二进制格式存放,清0后,数据以BCD码格式存放.24/12位为时间格式设置位,该位为1时,时间为24小时格式,为0时,时间为12小时格式,该位不受复位信号影响.DSE为夏令时使能位,本设计不予考虑
寄存器C结构如图所示.
表3.7 DS12C887寄存器C结构
其中4个有效位均为中断标志,本设计不予考虑,但当初始化完成并禁止中断时,应将该寄存器读取清0.
寄存器D结构如图所示
表3.8 DS12C887寄存器D结构
VRT位指示片内锂电池状态,当为0时,说明内部锂电池耗尽,不能保证内部RAM中数据和时间数据的正确性.该位只读. 3)DS18B20接口程序设计.
DS18B20设置寄存器结构如图3.9所示
表3.9 DS18B20设置寄存器结构
通过设置该寄存器中R1、R0的不同状态,可以得到不同的温度分辨率,分辨率越高,转换所需时间也越长(见图).为简便起见,本课题中采用系统复位后的默认值,即R1R0=11,分辨率为12位数据.其余位为传感器内部使用,不能进行操作.
表3.9 DS18B20控制寄存器R0、R1设置与分辨率对应关系 由于DS18B20数据传送采取单总线方式,所以对操作时序和操作步骤有着严格的要求,任何不符合步骤的操作,都可能造成DS18B20不响应.每次在对DS18B20进行操作时,都要进行初始化.初始化时序如图所示:
图3.15 DS18B20初始化时序图
首先,控制器将总线拉低并保持480μs,释放总线,等待15-60μs后,如果复位成功,DS18B20会将总线拉低,产生一个60-240μs的低脉冲,控制器通过检测低脉冲信号确定复位是否成功.复位成功后,在上拉电阻的作用下,DS18B20会恢复到高电平静止状态. 在静止状态,总线在内部上拉电阻作用下,保持高电平.当控制器进行读写操作时,先将总线拉低1μs以上,DS18B20回应一个高电平应答信号,控制器检测到应答信号后,即可对总线进行操作.
向DS18B20读写一位数据时序如图所示:
图3.16 DS18B20读写数据时序图
写”0”时,控制器将总线拉低30μs以上即可,写”1”时,控制器将总线拉低15μs,然后释放总线.读数据时,控制器将总线拉低15μs,然后释放总线并读取总线上的数据. 4)LCD显示驱动程序
a.基本操作时序:
读状态: 输入:RS=L,RW=H,E=H 输出:D0-D8=状态字 写指令: 输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲 输出:无
读数据: 输入:RS=H,RW=H,E=H 输出:D0-D7数据 写数据:输入:RS=H,RW=L,D0-D7=数据,E=高脉冲 输出: 无 b.状态字说明
STA7 D7 STA6 D6 STA5 D5 STA4 D4 STA3 D3 STA2 D2 STA1 D1 STA0 D0 表3.10 LCD状态字寄存器结构 STA0-STA6:当前数据地址指针的数值 STA7:读写操作使能 1:禁止,0:允许
由于LCD指令集比较简单,不再详细介绍,请参考1602字符型液晶屏资料. c.LCD复位流程如图所示:
图3.17 LCD初始化流程图
初始化完成后,即可对液晶显示器进行操作,具体程序:
汇编程序:
ORG 0000H AJMP START