NXP MCU 技术论坛
直播中

马舒滟

7年用户 209经验值
私信 关注
[问答]

基于DS18D20的ME300B单片机开发系统

本文介绍如何在ME300B单片机开发系统(参考本报2005年第24期《编程、食盐、仿真、ISP四合一单片机学习开发系统ME300B》一文)上使用温度传感器DS18B20,实现实时温度显示、超温报警、欠温加热控制等功能。 一、温度控制系统硬件设计





回帖(4)

訾存贵

2019-7-25 14:33:37
1.采用数码管显示ME300B采用8位数码管动态显示,AT89S51的P0口控制数码管的段选,P2口控制位选。用数码管显示信息时,要将JP2的②、③端短接。用四位数码管显示温度值,第五位数码管以闪动方式显示状态符号"H"、"L"和"O"。"H"表示实际温度大于报警温度TH,超温; "L"表示实际温度小于报警温度TL,欠温?"O"表示实际温度小于TH大于TL,加热。
举报

赵文平

2019-7-25 14:33:40
2.采用液晶显示ME300B使用16×2点阵字符型液晶时要将JP2的①、②端短接。TS1620-1主要引脚的功能:

(1)RS寄存器选择控制线.RS=0写入指令寄存器;RS=1写入数据寄存器。(2)R/W读写控制线R/W=0,LCD执行写入的动作;R/W=1,LCD执行读取的动作。 (3)EN启用控制线EN=1,LCD启用有效。 (4)DO~D7双向数据总线 采用8位数据读写方式,用AT89S51的P0口传送。

液晶的第一行显示DS18B20的在线状态"DS18B20 OK"或"DS18B20ERROR"。第二行显示温度值和闪动显示状态符号">H"、"H"表示超温; "
3.蜂鸣器、继电器控制电路 ME300B使用交流峰鸣器,采用脉冲方式触发,在使用前要将JP4的P13短接。
举报

张娟

2019-7-25 14:33:49
二、DS18B20的控制命令

1.SKIP ROM[OCCH] 允许总线控制器不提供64位ROM编码就可使用存
储器操作命令。

2.CONVERT TEMP[44H] 启动一次温度变换。

3.WRITE SCRATCHPAD [4EH]向DSl8B20的暂存器TH和TL写数据。

4.READ SCRATCHPAD [OBEH]读取DSl8B20的暂存器的内容。

5. COPY SCRATCHPAD [48H]把DSl8B20暂存器的内容拷贝到DS18B20的EEPROM存储器里,即把温度报警触发字节存入非易失性存储器。

6.RECALL EEPROM [0B8H] 把DS18B20的EEPROM存储器里温度报警值拷贝回DS18B20的暂存器,该操作在上电时自动执行。
举报

h1654155275.5684

2019-7-25 14:33:53
三、软件设计

控制程序包括主程序、DS18B20复位与检测子程序、读温度子程序、温度数据处理子程序、温度显示子程序、扫描键子程序、报警值设定子程序、温度比较子程序、中断服务程序等。

1.主程序 主程序检测DS18B20是否存在、然后发出温度转换命令和读温度命令,再调用相应的子程序。

2.DS18B20复位与检测子程序 上电后,检测有无DS18B20。若有DS18B20,将标志位FLAG1置"1",数码管显示实时温度值。若无,则将FLAG1置"0",关数码管,蜂鸣器响。

3.读温度子程序 程序只读出DS18B20高速缓存RAM前4个字节:温度LSB、温度MSB、温度报警值TH和TL,并将它们存入26H~29H单元。

4.温度数据处理子程序 首先判断MSB的符号位,当符号位S=O时,表示温度值为正,可以直接将二进制转换为十进制;当符号位S=l时,表示温度值为负,要先将补码变成原码,再计算十进制值。

5.温度显示子程序 从DS18B20读出的温度值,经过数据处理后,送温度显示子程序显示实时温。

6.扫描键子程序 K1为查看温度报警值。K3为设定温度报警值。设定完毕,将温度报警值存入DS18B20的EEPROM中。每次开机自动从DS18B20的EEPROM读出温度报警值。

7.温度比较子程序 当实时温度大于TH时.继电器断开,停止加热;当实时温度小于TH大于TL时,继电器吸合,开始加热;当实时温度小于TL时,表示加热部分出现故障。

8.中断服务子程序 每间隔200ms对闪动标记FLAG2取反一次。当FLAG2=1时,给相应的数码管送熄灭符;当FLAG2=0时,给相应的数码管送实时值,形成闪动效果。

编程的具体细节请参阅ME300B光盘中的温度控制演示程序。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分