基于单片机的供暖锅炉控制系统的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要
本设计是基于单片机的水暖锅炉控制,在设计中主要有水位检测、温度检测、压力检测、按键控制、水温控制、水位控制、循环控制、压力控制、显示部分、故障报警等几部分组成来实现供暖控制。

它主要用水位传感器检测水位,用数字温度传感器DS18B20来检测水温,用五个控制按键来实现按健控制,用三位LED 显示器来完成显示部分,用变频器来控制循环泵的转速,用压力传感器检测锅炉内部压力。

并且通过模数转换把这些信号送入单片机中。

把这些信号与单片机中内部设定的值相比,以判断单片机是否需要进行相应的操作,即是否需要打开鼓风机,是否需要开启补水泵,是否需要加快循环泵的转速等操作,从而实现单片机自动控制的目的。

本文用单片机控制易于实现锅炉供暖、而且有造价低、程序易于调试、一部分出现故障不会影响其他部分的工作、维修方便等优点。

关键词:单片机(AT89C51),传感器,水位,温度,循环,自动控制
BASED SCM DESIGN OF HEATING BOILER CONTROLLED
SYETEM
Abstract: The systemic design bases controller of SCM water heating of a boiler, it mostly makes up of measuring water level, measuring a water temperature, controllin- g a keys-press, controlling a water temperature, controlling water level, controlling ci- rculate, controlling pressure, showing a part, giving an alarm order to realize heating controller, the design adopts Single-Chip Microcomputer to control boiler heating .It mostly uses a temperature sensor DS18B20 to measure water temperature, uses water level sensor to measure water level , uses a transducer to contr ol cycle pump’s rotate speed ,uses five keys-press to control key-press, uses three light-emitting diodes diap- lay to finish a display parts ,uses a transducer to control rotate speed of cycle pump , uses a press transducer to measure press in the boiler .It sends those signals to SCM through modulus ,and hold those signals to compare with enactment in the SCM to j- udge whether SCM need to carry through relevant operation namely ,whether it needs to open a fan ,whether it needs to turn on a water pump ,whether it needs to quicken rotate speed of a cycle pump and so on . Consequently, it finishes an aim of SCM au- to-controller. The design makes use of the SCM to control a boiler that is easy to rea- lize boiler heating, it is cheap to manufacture, it is easy to debug its procedure. When a part is in trouble, it does not infect others and it is convenience to mend, it is widely to use many of areas.
Keywords: Single-Chip Microcomputer, transducer, water level, water temperature, Auto-control
1 绪论
传统的控制方式不能进行远距离的集中控制,自动化程度低,调节精度差等缺点,并且单靠人工操作已不能适应社会发展的需要,控制系统改造的必要性随着科学技术的发展不断进步。

由于被控对象越来越复杂,人们对控制精度的要求不断提高以及被控对象和过程的非线性、时变性、多参数间的强耦合、随机干扰等因素,使得建立被控对象的精确数学模型变得很困难。

使用单片机实现供暖锅炉温度控制,具有较高的实用价值和优越性等特点。

采用低功耗数字温度传感器进行温度测控,可大大简化设计方案,系统性能也更稳定;采用光电测控水位,可有效保证水位的自动控制,保证水质无污染,能更好地对锅炉进行自动化控制。

单片机不仅有体积小,安装方便,功能较齐全等优点,而且有很高的性价比,应用前景广,同时有助于发现可能存在的故障,通过微机实现燃烧与给水系统的自动控制与调节,将保证锅炉正常供气供暖,维持稳定系统,保证安全经济运行。

2 系统总体方案
2.1 系统框图
本系统主要有水位检测、温度检测、按键控制、水温控制、水位控制、循环控制、显示部分、故障报警等几部分组成来实现供暖控制,系统框图如图1所示。

2.2 系统具体实现方案
本系统采用单片机模块化来完成程序设计使程序易于编写、调试和修改;便于分工,从而可同时调试多个程序;程序可读性好;程序可进行局部修改,其他部分保持不变。

这里采用51系列单片机AT89C51控制锅炉供暖,系统采用手动和自动两种。

主要是单片机自动控制,设置有手动/自动切换。

包括温度控制、
补水泵控制、循环泵控制、故障报警。

在温度控制部分,用数字温度传感器的值送入单片机与单片机内部设定值进行比较。

在当温度低于给定温度1时,蒸汽阀打开给水加热;当温度低于给定温度2时,系统报警。

在补水部分,用水位传感器来检测水位,当锅炉汽包水位低于规定的最低水位时系统发出报警,指示灯亮,继电器线圈得电,电磁阀打开,水泵开始注水;炉内的水位到达或超过规定的最高水位时系统发出报警,指示灯亮,线圈失电,电磁阀闭合,停止注水。

在循环控制部分当水温值在设定的范围内,则开启循环泵。

当循环泵1出现故障时,报警系统报警,单片机接收到信号,备用的循环泵2开始代替循环泵1工作。

在故障报警部分,当温度控制部分、补水泵部分、循环泵部分出现故障时,报警系统报警。

而且报警系统设置的是声光报警,使维修人员容易区分哪部分出现了问题,以便及时维修。

3 系统硬件设计
本系统从经济性,电路结构,系统性能等多方面考虑。

选用如下元器件,数字温度传感器DS18B20,单片机AT89C51,数码管显示,变频器,光敏三极管3DU。

3.1 单片机的配置
本系统选用ATMEL89C51系列单片机,由于它的模块化设计为适应具体的应用提供了极大的灵活性,便于扩展功能,有效的提高了系统的经济性。

AT89C51是一种低工耗、高性能的片内含有4KB快闪可编程/擦除只读存储器的八位CMOS 微控制器,使用高密度、非易失存储编程器对程序存储器重复编程[1]。

AT89C51具有以下特点:
*与MCS-51微控制器产品系列兼容。

*片内有4KB可在线重复编程的快闪擦写存储器。

*32条可编程I/O线。

*程序存储器具有三级加密保护。

*可编程全双工串行通道。

*空闲状态维持低功耗和掉电状态保存存储内容。

*而且与87C51系列的引脚也完全兼容。

3.2 温度传感器
本系统采用的是美国DALLAS半导体公司最新推出的一种改进型智能温度传
感器DS18B20,与传统的热敏电阻等测温元件相比,它能直接读出被测度数,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。

读出温度流程图如图2所示。

DS18B20的性能特点[2]: * 独特的单线接口仅需一个端口引脚进行通信。

* 多个DS18B20可以并联在唯一的三线上,实现多点组网功能。

*
无须外部器件。

* 可通过数据线供电,电压范围为 3.0-5.5V ,零待机功耗。

* 温度以9或12位数字量读出。

* 用户还可定义的非易失性温度报警设置。

* 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件。

* 负电压特性,电源极性接反时, 温度计不会因为发热而烧毁,但不能正常工作。

DSl8B20的引脚如图3所示。

此外DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度。

信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU 到DSl8B20仅需一条线(和地线)。

DSl8B20的电源可以由数据线本身提供而不需要外部电源。

因为每一个DSl8B20在出厂时已经给定了唯一的序号,因此任意多个DSl8B20可以存放在同一条单线总线上。

这允许在许多不同的地方放置温度敏感器件。

DSl8B20的测量范围从-55摄氏度到+125摄氏
度,增量值为0.5摄氏度,可在ls(典型值)内把温度变换成数字。

每一个DSl8B20包括一个唯一的64位长的序号,该序号值存放在DSl8B20内部的ROM(只读存贮器)中。

开始8位是产品类型编(DSl8B20编码均为10H)。

接着的48位是每个器
图3 DS18B20引脚图
件唯一的序号。

最后8位是前面56位的CRC(循环冗余校验)码。

DSl8B20中还有用于存储测得的温度值的两个8位存贮器RAM,编号为0号和1号。

1号存贮器存放温度值的符号,如果温度为负(摄氏度),则1号存贮器8位全为1,否则全为0。

0号存贮器用于存放温度值的补码,LSB(最低位)的1表示0.5摄氏度。

将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度值(-55摄氏度-125摄氏度)。

每只D518B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。

采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长,采取外部供电方式则多用一根导线,但测量速度较快。

3.3 显示部分
在单片机系统中,通常用LED数码显示模块来显示各种数字或符号。

由于它具有显示清晰、亮度高、使用电压低、光电转换效能高、寿命长的特点,因此使用非常广泛。

3.4 变频器
在本系统中我们选用ABB公司的ACS600变频器。

ACS600变频器具有很宽的功率范围(2.2—3000kw)可以满足本设计的要求75kw和3kw,优良的速度控制和转矩控制,并具有完整的保护功能以及灵活的编程能力[3]。

其重要特性如下:
* 无与伦比的电机速度及转矩控制,电机辨识运行及速度自我微调功能。

* 内置PID控制器,降低了您的投资成本。

* 工具软件对传动的全方位支持,ACS 600 Single Drive能在几毫秒内测出电机的实际转速和状态,所以在任何状态下都能立即起动,无起动延时。

* 零转速下,不需速度反馈就能提供电机满转矩。

* ACS 600 Single Drive能够提供可控且平稳的最大起动转矩,可达到200%的额定转矩。

* 不需特殊硬件的磁通制动模式可以提供最大的制动力矩。

* 在磁通优化模式下,电机磁通自动适应于不同的负载以提高效率同时降低电机的噪音,变频器和电机的总效率可提高 1%-10%。

* DTC直接转矩控制,从零速开始不使用电机轴上的脉冲码盘反馈就可以实现电机速度和转矩的精确控制。

* 开环转矩阶跃上升时间小于 5毫秒,而不带速度传感器的磁通矢量控制变频器的开环转矩阶跃上升时间却多于100毫秒。

3.5 水位传感器
用二极管和光敏三极管3DU来检测水位。

3.6 A/D转换器
采用常见的ADC0809。

ADC0809是带有8位A/D转换器、8路多路开关以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。

在A/D 转换器内部含有一个高阻抗斩波稳定比较器,一个带有模拟开关树组的256电阻分压器,以及一个逐次逼近型寄存器。

8路的模拟开关由地址锁存器和译码器控制,可以在8个通道中任意访问一个通道的模拟信号。

由于多路开关的地址输入部分能够进行锁存和译码,而且三态TTL输出也可以锁存,所以它易于与微型计算机接口直接相连。

4 系统的具体设计与实现
4.1 单片机控制系统的流程图
单片机控制系统模拟量处理子程序、温度控制部分子程序、循环系统控制子程序、补水泵选择子程序、故障诊断与报警处理,它的流程图如图4所示。

4.2系统的总体原理图
系统的总体原理图如图5所示。

图5 系统原理图
4.3 电源电路
系统工作电压为6V,电流1A。

采用原边交流220V,副边12V的变压器,经桥式整流,1000UF电容滤波,7805稳压,可使电源满足要求。

其原理图如图6
所示。

图6 电源原理图
4.4 温度控制系统
传感器是“能感受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置”,它通常由敏感元件和转换元件组成。

温度传感器DS18B20将检测到的温度数据由单片机的P1.8口送入。

由单片机AT89C51进行运算,换算出测量温度,即水温。

它与设定温度相比较,从而控制继电器的通断即(控制蒸汽电磁阀的通断)及报警系统的开闭。

当水温高于设定温度时蒸汽阀关,水温刚低于设定温度时,蒸汽阀并不会立即导通,只有当水温底于设定温度1时,蒸汽阀才会导通,给水加热。

若水温继续下降,低于设定温度2时,报警系统报警。

温度控制部分。

将检测到的温度送到P1.4、P1.5、P1.6、P1.7分别为室外温度、出水温度、回水温度。

它们与设定温度相比较,从而控制继电器的通断即(控制蒸汽电磁
阀的通断)及报警系统的开闭。

系统框图如7所示。

4.5 循环泵控制部分
本系统用两台循环,一台工作一台备用。

循环泵部分的子程序部分当出水温度和回水温度在规定范围之内,开启循环泵1,有变频器控制。

使锅炉内水循环
达到供暖。

当循环泵1出现故障时,用备用的循环泵2。

循环泵1出现故障即是出水温度与回水温度的差值非常大即设定的最大温差时,循环泵故障报警,改用循环泵2来替代循环泵1工作。

被替代的泵在循环顺序中可以自动跳过,顺沿循环。

在循环泵投入或切除的转换过程中需要PLC 对变频器的运行参数进行控制,同时为了增加系统的稳定性,避免频繁投切循环泵,在转换过程中要有一段时间间隙。

温差为给定停止循环泵。

循环框图如图8所示[4]。

4.6 水位控制系统
水位检测是通过四对高亮二极管和光敏三极管分别安装在四个不同的位置,由上至下四个输出端口分别接单片机的P1.0、P1.1、P1.2、P1.3口,实时对锅炉里的水位进行检测。

当水位到达某一光敏三极管的位置时,其输出端口就向单片机输出高电平;当水位低于此光敏三极管的位置时,其输出端口就向单片机输出低电
平。

由上至下的 第一个位置为水位 图9 3DU 实用电路图 上限报警线,即当水位高于此位置时,开水房控制系统就会自动报警,提醒工作人员注意,补水泵有可能出故障;第二个位置是自动停止加水线,即当水位高于此位置时,控制系统会自动关闭不水泵,停止加水;第三个位置是自动加水线,即当水位低于此位置时,控制系统会自动接通加水电磁阀,开水加水;第四个位置是水位下限报警线,即当水位低于此位置时,开水房控制系统就会自动报警,
提醒工作人员注意,补水泵可能出故障。

当一台补水泵出现故障时,系统报警,另一台备用的补水泵开始工作。

3DU实用电路图如图9所示。

水位控制流程框图如图10所示[5]。

4.7 压力控制系统
当压力传感器检测到的压力值比单片机内部设定的压力值大时,停止补水系统和关闭鼓风机。

4.8 键盘部分
它由3个常开按键构成,直接与单片机I/O口相连,另一端与地相接。

当按键闭合时,单片机与之相连的端口变为低电平。

6个按键从左到右分别与单片机
AT89C51的P0.0、P0.1、P0.2、P0.3相连。

下面分别介绍这3个键的功能。

P0.0为功能键,第一次按下P0.0键时,取消报警,同时允许温度上限调节;第二次按下P0.0键时,为确定。

当P0.0键第一次按下,此时,每按动一次P0.1键,温度值加一,温度最大上限值为99摄氏度;每按动一次P0.2键,温度值减一,温度最小上限值为80摄氏度。

当P0.0键再次按下时,P0.1、P0.2调温功能被关闭。

此时,按P0.2键,启动报警功能。

4.9 驱动部分电路
继电器的驱动用8550PNP型三极管。

因AT89C51上电复位时,P0,P1,P2,P3口为高电平,此时PNP型三极管基极接高电平,三极管截止,继电器处于断开状态,可使单片机正常复位。

在PNP型三极管发射极接二级管4007,可防止三极管断开瞬间,继电器电流不能突变,使三极管造成损坏。

4.10 显示部分电路
由单片机AT89C51控制,移位寄存器74LS164和共阳7段LED组成。

如图11所示。

图11 显示原理图
4.11 自动报警电路
锅炉上限极限水位报警,炉内的水位到达上限极限水位时系统发出报警,指示灯亮。

锅炉下限极限水位报警,炉内的水位到达下限极限水位时系统发出报警,指示灯亮。

锅炉内压力过高报警,压力传感器检测到锅炉内压力高与设定值时,报警系统报警。

循环泵故障报警,当循环泵开启后,出水与回水温度的差值很大,认为循环泵故障,报警系统报警。

此部分采用声光报警以便很容易区分哪部分出现问题,便于维修人员及时进行维修。

根据报警铃和灯的不同确定哪部分出现问题。

4.12 单片机标志及按键功能
20H.0为水温故障标志,1时有效报警。

20H.1为水位故障标志,1时有效报警。

20H.2为水位故障标志,1时有效报警。

20H.3为报警取消标志,1时有效取消报警。

按P3.2键,20H.3置1。

设置温度确定后,按P3.4键,20H.4清0。

水位高出上限20H.1置1,水位低于下限20H.1置1。

水位检测系统故障20H.2置1,单片机程序见附录。

5 结束语
本系统介绍了单片机在水暖锅炉中的应用,采用数字温度传感器、光敏三极管、压力传感器使硬件系统大为简化。

系统精度高,具有良好的人机交互功能。

并设有超温、超水位、循环泵失灵等故障报警,有问题立即就能发现。

通过自动调节控制温度并实现锅炉内温度和水位的自动控制。

保护温度控制在设定值范围内正常运行不需要人工干预,操作人员劳动强度小。

谢辞
本系统从开始设计到完成,可以说走了一条并不平坦的道路,但是总算走完了全程。

在本系统开发过程中,要特别感谢我们的指导老师刘法治老师在设计时耐心的指导并在系统整体设计方面给予的很多宝贵的意见和建议,同时也要感谢本组成员以及其他老师和同学在设计过程中的热心帮助。

由于时间仓促以及本人水平,时间有限以及经验不足,本系统还存在许多不足之处,如果各位在了解和使用过程中发现问题,敬请谅解。

参考文献
[1] 李光飞,楼然苗.单片机课程设计实例指导[M].北京航空航天大学出版社,
2004
[2] 金伟正.单线数字温度传感器的原理及用[M].电子工业出版社,2000
[3] 袁希光等.传感器技术手册[M].北京国防工业出版社,1986
[4] 刘星平.基于PLC及其网络的智能炉温控制系统[J].电气应用,2006,3
[5] 王永平,陈建华.基于S7—200PLC的高性能电热锅炉控制系统[J].仪表技术
与传感器,2002,7(3)
[6] 谈振藩.自动控制专业英语[M].哈尔滨工程大学出版社,1999
[7] 杨智,明丽萍.21世纪燃气锅炉在中国的发展前景[J].锅炉制造,2001,7
(6)
[8] 杨国志,王立峰,杨东光,王辉林等.实用电子制作实例[M].福建科学技术
出版社,2000
[9] 张洪润,张亚凡.传感技术与应用教程[M].清华大学出版社,2005
[10] 松井邦彦[日]著,梁瑞林[译].传感器实用电路设计-制作[M].科学出版社,
2005
[11] 谢自美.电子线路设计〃实验〃测试[J].华中科技大学出版社,2003,2
[12] 潘新民,王艳芳.微型计算机控制技术[M].高等教育出版社,2002
[13] 吴春旺,陈霞.锅炉汽包水位调节控制系统设计[J].电工技术,2006,3
[14] 刘星平.基于PLC及其网络的智能炉温控制系统[J].电气应用,2006,3
[15] 李明,徐向东.用容错技术提高锅炉控制系统的可靠性[J].清华大学学
报,1999,10(7)
附录
单片机源程序
ORG 0000H
AJMP MAIN
ORG 0003h
AJMP MAIN
ORG 000bh
AJMP MAIN
ORG 0013h
AJMP MAIN
ORG 001bh
AJMP MAIN
ORG 0023H
AJMP MAIN
ORG 0030H
MAIN: CLR p3.6
MOV p0,#0ffh
ACALL QL;
MOV 3BH ,#95
;温度转换子程序
MAIN1:MOV 3bh,#95
ACALL WENDU
ACALL DISP
ACALL WENCPM
;温度比较子程序
ACALL SHUICPM
;水位检测子程序
ACALL BAOJING
;报警子程序
ACALL DELAY2
AJMP MAIN1;
WENCPM:MOV A,37H
;温度比较子程序
CLR C
SUBB A,3BH
JC BBB1
SETB P2.1
;关蒸气阀
CLR 20H.0
ACALL ok2
BBB1:MOV A,37H
ADD A,#10
CLR C
SUBB A,3BH
JNC OK2;
CLR P2.1
;低与设定温度10度开蒸汽阀 MOV A,37H
ADD A,#20
CLR C
SUBB A,3BH
JNC OK2
CLR P2.1
;低与设定温度20度开蒸汽阀 SETB 20H.0
RET
ok2:CLR 20H.0
RET
;水位检测子程序SHUICPM:MOV A,P1
ANL A,#0FH
MOV 30H,#0FH
CJNE A,30H
SETB P2.0
SETB 20H.1
;setb水位状态标志位
AJMP OUT2
AAA1: MOV 30H,#0EH ;
CJNE A,30H,AAA2
SETB P2.0
CLR 20H.1
AJMP OUT2
AAA2: MOV 30H,#0CH
CJNE A,30H,AAA3
CLR 20H.1
CLR p2.0
AJMP OUT2
AAA3: MOV 30H,#08H
CJNE A,30H,AAA4
CLR P2.0
CLR 20H.1
AJMP OUT2;70
AAA4: MOV 30H,#00H
CJNE A,30H,AAA5
setb P2.0
SETB 20H.1
AJMP OUT2
AAA5: SETB 20H.2
RET
OUT2: CLR 20H.2
RET
BAOJING:JB 20H.3,OUT6
MOV A,20H
MOV 30H,#00H
CJNE A,30H,OUT5
AJMP OUT6
OUT5: SETB P3.6
JB 20H.4,OUT9
SETB P0.1
OUT10: JB 20H.2,OUT11 SETB P0.2
OUT12: JB 20H.1,
OUT13SETB P0.3
OUT14: JB 20H.0,OUT15
SETB P0.4
OUT16: RET
OUT6: CLR P3.6
RET
OUT9: CLR P0.1
AJMP OUT10
OUT11: CLR P0.2
AJMP OUT12
OUT13: CLR P0.3
AJMP OUT14
OUT15: CLR P0.4
AJMP OUT16
;总温度子程序
WENDU: ACALL INIT_1820 ACALL RE_CONFIG ACALL GET_TEMPER ACALL TEMPER_COV RET
; DS18B20初始化程序
INIT_1820:
SETB P1.7
NOP
CLR P1.7
MOV R0,#06BH
MOV R1,#03H
TSR1:
DJNZ R0,TSR1 ; 延时
MOV R0,#6BH
DJNZ R1,TSR1
SETB P1.7
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P1.7,TSR3
DJNZ R0,TSR2
LJMP TSR4
; 延时
TSR3: CLR 20H.4
; 清标志,表示DSS18B20存在
LJMP TSR5
TSR4: setb 20H.4
; setb标志位,表示DSS18B20不存在
LJMP TSR7
TSR5: MOV R0,#06BH
MOV R1,#03H
TSR6: DJNZ R0,TSR6
; 延时
MOV R0,#6BH
DJNZ R1,TSR6
TSR7: SETB P1.7
RET
; 重新写DS18B20暂存存储器设定值RE_CONFIG:
JNB 20H.4,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1
RET
RE_CONFIG1:
MOV A,#0CCH
; 发SKIP ROM命令
LCALL WRITE_1820
MOV A,#4EH
; 发写暂存存储器命令
LCALL WRITE_1820
MOV A,#00H
;TH(报警上限)中写入00H
LCALL WRITE_1820
MOV A,#00H
; TL(报警下限)中写入00H
LCALL WRITE_1820
MOV A,#1FH
; 选择9位温度分辨率
LCALL WRITE_1820
RET
; 读出转换后的温度值
GET_TEMPER:
SETB P1.7
; 定时入口
LCALL INIT_1820
JNB 20H.4,TSS2
RET
; 若DS18B20不存在则返回TSS2:
MOV A,#0CCH
; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H
; 发出温度转换命令
LCALL WRITE_1820
LCALL INIT_1820
MOV A,#0CCH
; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH
; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200
MOV 37H,A
; 将读出的温度数据保存
MOV A,#0ECH
CALL WRITE_1820
RET
; 读DS18B20的程序,从DS18B20中读出一个字节的数据
READ_1820:
MOV R2,#8
RE1:
CLR C
SETB P1.7
NOP
NOP
CLR P1.7
NOP
NOP
NOP
SETB P1.7
NOP
MOV C,P1.7
NOP
NOP
NOP
NOP
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE1
RET
; 写DS18B20的程序
WRITE_1820:
MOV R2,#8
CLR C
WR1:
CLR P1.7
NOP
NOP NOP
NOP
RRC A
MOV P1.7,C
MOV R3,#35
DJNZ R3,$
SETB P1.7
NOP
DJNZ R2,WR1
SETB P1.7
RET
; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:MOV R4,#2
;将温度高位和低位从DS18B20中读出
MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入
35H(TEMPER_H)
RE00:MOV R2,#8
RE01: CLR C
SETB P1.7
NOP
NOP
CLR P1.7
NOP
NOP
NOP
SETB P1.7
NOP
NOP
MOV C,P1.7
MOV R3,#35
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
; 将从DS18B20中读出的温度数据进行转换
TEMPER_COV:
MOV A,#0F0H
ANL A,36H
; 舍去温度低位中小数点后的四位温度数值
SWAP A
MOV 37H,A
MOV A,36H
JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值
INC 37H
TEMPER_COV1:
MOV A,35H
ANL A,#07H
SWAP A
ADD,37H
MOV 37H,A
; 保存变换后的温度数据
LCALL BIN_BCD
RET
; 将16进制37H的温度数据转换成压缩 BCD码放入37H,38H,39H中BIN_BCD:
MOV A,37H
MOV B,#10
DIV AB
MOV 38H,B
MOV B,#10
DIV AB
MOV 39H,B
MOV 3AH,A
RET
DISPS: MOV SCON,#00H ;设定温度显示子程序
MOV DPTR,#TAB
MOV A,3BH
MOV B,#10
DIV AB
XCH A,B
ACALL SS
MOV A,B
ACALL SS
MOV A,#0FH
ACALL SS
RET
DISP: MOV SCON,#00H ;正常温度显示子程序
MOV DPTR,#TAB
MOV A,38H
ACALL SS
MOV A,39H
ACALL SS
MOV A,3AH
MOV 40H,#00H
CJNE A,40H,QQ
MOV DPTR,#TAB1 ACALL SS
RET
QQ: ACALL SS
RET
DELAY2:MOV R6,#0fFH DL4: MOV R5,#0FAH
DJNZ R5,$
DJNZ R6,DL4
NOP
RET
QL: MOV A,#00H
MOV 20H,A
;20H为状态标志单元
MOV 30H,A ;30H为数据缓存标
MOV 35H,A ;35h--39h单元为温度数据单元 MOV 36H,A
MOV 37H,A
MOV 38H,A
MOV 39H,A
MOV 3AH,A
RET SS: MOVC A,@A+DPTR ;送数子程序
MOV SBUF,A
JNB TI,$
CLR TI
RET
TAB: DB
88h,0ebh,4ch,49h,2bh,19h,18h,0c bh,08h,09h
DB
80h,13h,44h,41h,23h,11h,10h,0c3 h,00h,01h
RET
TAB1: DB 0FFH
RET
END。

相关文档
最新文档