定义,在后面的执行过程中就代表了固定的含义,不再改变,PC机、单片机、从机都靠识别这个协议来执行程序,发送一个字节的数据,接受几个字节的数据,所有的数据协议全都建立在这2个操作方法上。
本设计中自定义“a”为PC机与单片机主机间的数据协议,意思为要求主机发送一号从机的温度给PC机; 自定义“b”为PC机与单片机主机间的数据协议,意思为要求主机发送二号从机的温度给PC机; 自定义“c”为从机与主机间的数据协议,它代表从机向主机发送完四位当前采集的温度,这里一号从机和二号从机采集的温度,都定义为“c”; 自定义“d”为PC机与单片机主机之间的数据协议,意思为开始和完成命令的信号;
自定义“g”为一号从机和单片机主机之间的数据协议,意思为主机表示要采集一号从机的温度数据,一号从机要求单片机主机准备接收; 自定义“h”为二号从机和单片机主机之间的数据协议,意思为主机表示要采集二号从机的温度数据,二号从机要求单片机主机准备接收。
具体流程如下:
1、PC机向单片机主机发送“d”:这步是流程的开始,PC机向单片机主机发送数据协议,要求主机把接收的温度发送 给PC机显示;
2、单片机主机向一号从机发送“g”:
单片机主机在接收到PC机发送的“d”信号后,会立即向一号从机发送“g”,要求一号从机采集温度并且将温度发回单片机主机; 3、一号从机回发“g”:
一号从机接收到单片机主机的命令后,会立即向单片机主机回发信号,要求单片机主机做好接收准备;
4、向主机发送四位当前采集的温度,并回发发送完成标记“c”; 一号从机回发信号后,向主机发送四位采集的温度,这个温度在前文已提到标记为“c”;
5、主机发送“h”给2号从机:
主机在接收到一号从机发来的“c”命令后,会立刻发送“h”信号给二号从机,表示要采集二号从机的数据; 6、2号从机回发“h”:
二号从机接收到单片机主机的命令后,会立即向单片机主机回发信
号,要求单片机主机做好接收准备;
7、向主机发送四位当前采集的温度,并回发发送完成标记“c”: 二号从机向单片机主机回发完信号后,向主机发送四位当前采集的温度,这个温度标记为“c”; 8、主机发送“d”给PC机:
单片机主机在接收到二号从机发送来的信号后,立刻发送信号给PC机,表示完成PC机的前一指令; 9、PC发送“a”给主机:
PC机在接收到单片机主机发送的信号后,发送新一个指令给单片机主机,要求单片机主机发送一号从机采集的温度数据; 10、主机将一号从机温度数据发送给PC机:
单片机主机接收到PC机的命令后将一号从机发送过来的四位当前温度数据转换成ASCII码后,发送给PC机,因为PC机只能读取ASCII码;
11、PC机发送“b”给主机: PC机接收到单片机主机发送的即时温度后会立即发送另一指令给单片机主机,要求单片机主机发送二号从机采集的温度数据;
12、主机将二号从机温度数据发送给PC机,发送完成后,返回(1): 单片机主机接收到PC机的命令后将二号从机发送过来的四位当前温度数据同样也转换成ASCII码后,发送给PC机。此时一个完整过程结束,将返回(1)开始另一轮采集。 3.2 DS18B20
温度测量软件的设计 由于DS18B20 单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM 功能命令→发存储器操作命令→处理数据。主机控制DS18B20完成温度转换的程序必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。假设单片机系统所用的晶振频率为12MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE 为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始。主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s 进行一次,流程图如图3.1所示 。 读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC 校验,校验有错时
不进行温度数据的改写,其程序流程图如图3.2所示。 从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符的显示。因为DS18B20的转换精度为9~12 位可选,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。
3.3 多机通信软件的设计
ATMAGE16单片机有串行发送缓冲器/接收缓冲器(SBUF)、串行口控制寄存器(SCON)、特殊功能寄存器(PCON)。通过设置SCON可以有四种工作方式,其中工作方式2、3 适用于多机通信。在串行通信前,通过程序预先将各从机串行口设置为方式2或方式3,并使SM2和REN(允许串行接收控制位)为1,允许串行口中断。主机与从机通信时,将SM2置0,准备接收数据,否则维持SM2为1,这样在主机发送数据时(此时主机发送数据中第9 位为0),只有地址相符的从机可接收数据,图3.1 DS18B20温度主程序流程图
3.2 读出温度子程序流程图 其余从机对数据信息不予理睬,从而可以实现多机通信集散型控制系统将各控制单元分散到现场各控制点。从机主程序和串行口中断服务程序如图3.3所示。 PC 机与单片机的串口通信中,ATMAGE16单片机的Pl.3和Pl.4口分别模拟串行通信的发送和接收端,其接口程序主要由发送子程序和接收子程序组成。通信速率9600bps,帧格式为N.8.l。发送时,先发送一个起始位(低电平),接着 按低位在先的顺序发送8位数据,最后发送停止位。接收时,先判断P1.4接收端口是否有起始低电平出现,如有则按低位在先的顺序接收8位数,最后判断P1.4 口是否有停止高电平出现,如有则完成一个数据接收,否则继续等待。其中软件编写要严格按照异步通信的时序进行。图3.3 从机主程序和串行口中断服务程序 3.4 DS18B20工作时序问题 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序。 主机即单片机首先发480us---960us的低电平,进行复位,然后释放总线,之后总线被外部上拉电阻电阻抬高,大约等待15—60us之后,DS18B20发出60到240us的低电平信号,以示存在,至此初始化结束。 写“0“的时候,首先单片机发复位信号,然后发“0”于是低电平持续60us就完成了写“0”写“1”的时候首先单片机发
复位信号,持续时间大于1us小于15us然后发“1”持续50us以上即可。 读时序也是主机先发低电平,然后在15us内检测连接DS18B20的数据线的引脚,从而读得相应值。 4 电路的设计
本章分析了分布式温度采集系统的各主要功能模块的设计与实现,具体包括温度测量电路模块和串口通信电路模块。 4.1 温度测量电路的设计
温度测量采用DS18B20 数字式温度传感器。由DS18B20 构成的智能温度测量装置由三部分组成:DS18B20 温度传感器、ATMAGE16、显示模块。产品的主要技术指标:①测量范围:-55℃~+125℃,②测量精度:0.5℃,③反应时间≤500ms。为了达到更高的精度,则在对DSl8B20测温原理进行详细分析的基础上,采取直接读取DSl8B20内部暂存寄存器的方法,将DSl8B20 的测温分辨率提高到0.01℃~0.1℃,DSl8B20内部暂存寄存器的分布如表4-1所列,其中第7字节存放的是当温度寄存器停止增值时计数器l的计数剩余值,第8字节存放的是每度所对应的计数值。这样,就可以通过下面的方法获得高分辨率的温度测量结果。 表4-1 DS18B20内部暂存器 序号 寄存器名称 作用 序号 寄存器名称 0 温度低字节 以16位补码形式存放 4、5 保存字节1、2 1 温度高字节 6 计数器余值 2 TH/用户字节1 存放温度上限 7 计数器/℃ 3 HL/用户字节2 存放温度下限 8 CRC 基于DS18B20的温度测量装置电路图如图4.1所示:图4.1 温度测量电路 温度传感器DS18B20将被测环境温度转化成带符号的数字信号(以十六位补码形式,占两个字节),传感器可置于离装置150米以内的任何地方,输出脚I/O直接与单片机的P1.1 相连,R1为上拉电阻,传感器采用外部电源供电。ATMAGE16 是整个装置的控制核心,ATMAGE16内带1K字节的FlashROM,用户程序存放在这里。显示器模块由四位一体的共阳数码管和4个9012组成。系统程序分传感器控制程序和显示器程序两部分,传感器控制程序是按照DS18B20的通信协议编制。系统的工作是在程序控制下,完成对传感器的读写和对温度的显示。
4.2 串口通信电路的设计 为了增加单片机多机通信的距离,该部分电路采用RS232标准接口,通信距离可以达到15米;如果采用RS422 或是RS485 接口,通信距离会更远。多机通信接口原理图见图1 。在数据传输过程中采
相关推荐: