单片机AT89C52(5)

2019-03-11 09:30

温度 +125℃ +85℃ +20.0625℃ +10.125℃ +0.5℃ 0℃ -0.5℃ -10.125℃ 25.0625℃ -55℃ 输出(2进制) 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0001 0000 0000 1010 0010 0000 0000 0000 1000 0000 0000 0000 0000 1111 1111 1111 1000 1111 1111 0101 1110 1110 1110 0110 1111 1111 1110 1001 0000 表3-2 温度/数据的关系

输出(16进制) 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FF5EH EE6FH FE90H

③ DS18B20的命令序列 ? 初始化

? ROM命令跟随着需要交换的数据; ? 功能命令跟随着需要交换的数据。

访问DS18B20必须严格遵守这一命令序列,如果丢失任何一步或序列混乱,DS18B20都不会响应主机(除了Search ROM 和Alarm Search这两个命令,在这两个命令后,主机都必须返回到第一步)。

a.初始化:

DS18B20所有的数据交换都由一个初始化序列开始。由主机发出的复位脉冲和跟在其后的由DS18B20发出的应答脉冲构成。当DS18B20发出响应主机的应答脉冲时,即向主机表明它已处在总线上并且准备工作。

b. ROM命令:

ROM命令通过每个器件64-bit的ROM码,使主机指定某一特定器件(如果有多个器件挂在总线上)与之进行通信。DS18B20的ROM如表4-3所示,每个ROM命令都是8 bit长。

指令 读ROM 符合ROM 协议 功能 发出此命令后,接着发出64位ROM编码,访问单总线上与33H 读DS18B20中的编码(即64位地址) 55H 该编码相对应的DS18B20,使之作出响应,为下一步对该 第 21 页

DS18B20的读写作准备 搜索ROM 跳过ROM 告警搜索命令 温度转换 读暂存器 写暂存器 复制暂存器 0F0H 用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址,为操作各器件作好准备 0CCH 忽略64位ROM地址,直接向DS18B20V 温度转换命令,适用于单个DS18B20工作 0ECH 执行后,只有温度超过庙宇值上限或下限的片子才做出响应 44H 启动DS18B20进行温度转换,转换时间最长为500ms(典型为200ms),结果丰入内部9字节RAM中 BEH 读内部RAM中9字节的内容 4EH 发出向内部RAM的第3、4字节写上、下温度数据命令,紧该温度命令之后,传达两字节的数据 48H 将RAM中第3、4字内容复制到EPROM中 2重调E2PROM 0B8H 将E2PROM中内容恢复到RAM中的第3、4字节 读供电方式 0B4H 读DS18B20的供电模式,寄生供电时DS18B20发送“0”,外部供电时DS18B20发送“1”

c. 功能命令:

主机通过功能命令对DS18B20进行读/写Scratchpad存储器,或者启动温度转换。

第 22 页

4软件设计

4.1软件设计原理及设计所用工具

本次设计主要利用C语言编写程序,根据功能的需要进行编程,其中软件设计所用的软件主要是Keil uVision3软件,PROTEUS ISIS软件。

热水器不论在什么样的天气里,都能够在设定的时间向用户提供设定温度的热水,从而给用户带来便利。当控制器在设定的时间使水温达到设定温度时,将通过声光报警提醒用户。

根据这一要求,控制器软件设计采用模块化结构,包括主程序、键盘中断子程序、DS12887更新周期结束中断子程序、LED显示子程序和提前加热时间计算子程序等。系统主程序主要完成温度和水位的检测以及进行辅助加热时间预算和一些初始化功能。在主程序中采用了查表方法进行辅助加热提前量预算。系统主程序流程图如图4所示。

图4-1 系统程序流程图

第 23 页

对于温度和时间设定, 每次设定结束后, 就将设定值存入DS12887 的非易失性RAM中,下次开机时进行读取。这样作至少有两个优点:一是系统在不进行设定时,就认定该设定值和先前一次一样,解决了每次开机总要从头设定的问题,另一个是若系统在运行中间停电而再次来电时,可以不用重新设定, 就能按原设定值对温度进行控制,增强了控制器适应外界变化的能力。对提前加热时间的计算,则是系统能否实现预定功能的重要一环。因为系统采用分段式水位检测,若采用能量守恒的方法对提前加热时间进行预算,也同样得不到精确的结果。为了避开繁琐的计算过程,本系统中采用了模糊控制思想,使用了如下一些控制语句: IF 水位高AND 温度差大THEN 加热时间长 IF 水位适中AND 温度差适中THEN 加热时间适中 IF 水位低AND 温度差低THEN 加热时间少

采用这种思想后,可以用实验方法获得各种情况下需要加热的时间, 编制成表格。使用时,只要查表获得提前加热时间就行了。显然,表格分得越细,控制就越准确。本控制器采用温差每等于5℃为一格, 就能满

足控制要求了。为了减小误差,试验表明,可以采用如图5 的方法。

图4-2 水位监测处理示意图

实验中,用水位达到B1时的结果代替水位达到A1时的结果,B2代替A2,B3 代替A3,B4代替A4。这样,CPU 读入的A1水位查表后得到的预加热时间是实验中水位在B1 处的时间。经过这种处理,会把由于分段检测而产生的计算误差减小一半,由原来的h变成了h/2(h为分段水位检测间隙)。如果水箱水深为40cm,分8段检测,此种处理方法的计算将使水位误差由原来的5cm变成了2.5cm。这种误差对于民用的热水器来说,已完全能够满足要求了。

第 24 页

4.2显示子程序

分析表明,移位寄存器74LS164仅有串入并出作用没有译码功能。因此,在编写显示驱动程序之前,首先需要计算列写出与本电路对应的LED段选码 ,然后由89C52的P3.0口送入74LS164的串行输入端,再并行输出到LED 的段选端。需要指出的是,上面显示电路采用TOS28106BHK型号的共阳极LED显示器,根据PCB印制线路板的连线方便,其LED的8个段选端与74LS164的并行输出口即8根段选线的连接没有遵照通常的规律,而是如图3-5所示的段排列为7、6、4、2、1、9、10、5,相应的段选码也要重新计算,如显示字符0的段选码为11H。电路中设计了4位LED显示器,其功能为:左首位为百位数或标志位,左二位为十位数,左三位为个位数,左四位为小数点后的十分位数。据此,给出如图4-3所示的显示子程序框图。

图4-3 显示子程序框图

第 25 页


单片机AT89C52(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014-2015学年重庆市巴蜀中学高一上学期期中数学试卷和解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: