当前位置:首页 > 基于AT89C51、DS18B20温度传感器的电锅炉温度控制系统设计
第四章 软件设计
本部分详细介绍了基于AT89C51单片机的多路温度采集控制系统的软件设计。根据系统功能,可以将系统设计分为若干个子程序进行设计,如温度采集子程序,数据处理子程序、显示子程序、执行子程序。采用Keil uVision3集成编译环境和汇编语言来进行系统软件的设计。本章从设计思路、软件系统框图出发,先介绍整体的思路后,再逐一分析各模块程序算法的实现,最终编写出满足任务需求的程序。 4.1设计思路、流程图
本系统要完成温度信号的采集与控制,需要实现温度信号的采集与A/D转换、数据处理、数据显示、数据传输等基本功能。从功能上可将其分为温度信号采集及A/D转换、数据处理、人机交互、执行四大部分进行设计,软件系统框图如图4.1所示:
数据处理子程序 控制执行 子程序 温度采集子程序 人机交互子 程序
图4.1 软件系统框图
温度信号采集子程序,主要完成温度信号采集与A/D功能,由于数字温度传感器DS18B20是采用单总线结构,所以软件设计需要根据单总线协议来完成温度数据采集、A/D转换和传输。温度信号采集子程序主要包括传感器初始化、单片机给传感器写命令、单片机给传感器写数据、单片机从传感器读数据等部分。 数据处理子程序,当单片机收到温度传感器发送的温度数据后,数据处理子程序对该数据进行处理,主要是把采集到的二进制的温度数据转换成十进制温度
- 21 -
数据。
人机交互子程序包括按键子程序、LCD显示子程序。按键子程序是完成按键识别功能,实现系统参数的设置。按键子程序又包括设置子程序、加一子程序、减一子程序等。LCD显示子程序的功能是,实现将数据处理后的十进制温度数据,使用LCD显示出来。而LCD显示子程序又包括LCD初始化子程序、写命令子程序、写数据子程序等。
执行子程序,该子程序所实现的功能,是把按键子程序设置的系统温度限定值与数据处理子程序处理后的当前温度值进行比较,根据比较的结果,执行单片机的I/O口输出的状态。I/O口的高低电平控制继电器闭合达到控制大功率设备的目的。主程序流程图如图4.2所示:
开始 初始化 显示子程序 设置键按下? Y 温度限值设置子程序 X=1 第X路温度采集子程序 返 回 数据处理子程序 执行子程序 N Y 采集下路? N X=X+1 图4-2 主程序流程图
4.2温度采集子程序
1-wire 单总线是Maxim 全资子公司Dallas 的一项专有技术,与目前多数
- 22 -
标准串行数据通信方式不同,它采用单根信号线,既传输时钟又传输数据。而且数据传输是双向的。它具有结构简单、节省I/O 口资源、成本低廉、便于总线扩展和维护等诸多优点,1-wire 单总线适用于单个主机系统,能够控制一个或多个从机设备,当只有一个从机位于总线上时,系统可按照单节点系统操作,而当多个从机位于总线上时,系统则按照多节点系统进行操作。而较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。软件系统可分为命令序列、信号方式、信号类型和时序。
4.2.1 命令序列
根据DS18B20的通信协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前,都要对DS18B20进行复位即初始化,复位成功后发送一条ROM指令即ROM操作,最后发送RAM指令即功能命令,这样才能对DS18B20进行预定的操作。
初始化:基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成,应答脉冲使主机知道总线上有从机设备且准备就绪。复位要求主机将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右后,发出60~240微秒的低脉冲,主机收到此信号表示复位成功。
ROM命令:主机检测到应答脉冲后,发出ROM 命令,这些命令与一个从机设备的唯一64 位ROM 代码相关,允许主机在单总线上连接多个从机设备,指定操作一个从机设备。这些命令还使主机能够检测到总线上有多少个从机设备以及类型和有没有设备处于报警状态。从机设备可以支持5 种ROM 命令。每种命令长度为8 位,主机在发出功能命令之前,必须送出合适的ROM 命令。DS18B20有5个ROM 操作命令,如表4.1所示:
表4.1 ROM 指令表 指令 读ROM 匹配ROM 代码 33H 55H 功能 读DS18温度传感器ROM中的编码 接着发出64位ROM编码,访问单总线上与该编码相对应DS18B20,使之做出响应 搜索ROM
0FCH 用于确定挂在同一总线上DS18B20的个数和识别64- 23 -
位ROM地址 跳过ROM 0CCH 忽略64位ROM地址,直接向DS18B20发温度转换命令,适用于单点测温 报警搜索命令 0ECH 执行后只有温度超过设定值上限值和下限值的温度传感器才做出响应
功能命令: 在主机发出ROM命令以访问某个指定的DS18B20后,接着就可以发DS18B20支持的某个功能命令,这些命令允许主机写入或读出DS18B20暂存器、启动温度转换以及判断从机的供电方式。DS18B20有6个存储器功能命令,如表4.2所示:
表4.2 RAM指令表 指令 温度变换 读暂存器 写暂存器 复制暂存器 代码 44H 0BEH 4EH 48H 功能 启动DS18B20进行温度转换 读内部RAM中的9字节内容 发出向内部RAM的3、4字节写上限、下限温度数据命令 将RAM中的第3、4字节的内容复制到EEPROM 将EEPROM的内容复制RAM中的第3、4字节 读DS18B20的供电方式 重调EEPROM 0B8H 读供电方式 0B4H
4.2.2信号方式
所有的单总线器件要求采用严格的单总线通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1 。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送的所有命令和数据都是字节的低位在前,这一点与多数串行通信格式不同。
初始化序列:包括复位和应答脉冲。单总线上的所有通信都是以初始化序列开始,包括主机发出的复位脉冲及从机的应答脉冲。如图4-3所示。当从机发出响应主机的应答脉冲时,即向主机表明它处于总线上,且工作准备就绪。在主机初始化过程,主机通过拉低单总线至少480微秒,以产生复位脉冲。接着主机释放总线,并进入接收模式,当总线被释放后,连接+5V电源的上拉电阻将单总线拉高,在单总线器件检测到上升沿后,延时15~60微秒,接着通过拉低总线
- 24 -
共分享92篇相关文档