中国农业大学学士论文 控制系统软件设计
4.2温度采集模块程序设计
温度的采集是数字温度计DS18B20通过单片机进行严格的时序控制来完成的,在空间不是很大的范围内,采用一片DS18B20进行单点测温即可实现对温度的较为精确的控制。 4.2.1 DS18B20的时序
DS18B20的时序可分为三个部分:初始化时序、写时序和读时序。只有遵守严格的时序,DS18B20才能进行温度的采集。 4.2.2.1 初始化时序
DS18B20的所有通信都是由复位脉冲组成的初始化序列开始。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。图4-2阐述了这一点,当发出应答复位脉冲的存在脉冲后,DS18B20通知主机它在总线上并且准备好操作了。在初始化步骤中,总线上的主机通过拉低单总线至少480μs来产生复位脉冲。然后总线主机释放总线并进入接收模式。当总线释放后,5kΩ的上拉电阻把单总线上的低电平拉回高电平。当DS18B20检测到上升沿后等待15到60μs,然后以拉低总线60-240μS的方式发出存在脉冲,主机将总线拉低最短480μS,之后释放总线。由于5kΩ上拉电阻的作用,总线恢复到高电平。至此,初始化和存在时序完毕。 4.2.2.2写时序
如图4-3所示,所有的写时隙必须至少有60μs的持续时间。相邻两个写时隙必须要有最少1μs的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。为产生写1时隙,在拉低总线后主机必须在15μs内释放总线(拉低的电平要持续至少1us)。由于上拉电阻的作用,总线电平恢复为高电平,直到完成写时隙。为产生写0时隙,在拉低总线后主机持续拉低总线即可,直到写时隙完成后释放总线(持续时间60-120μs)。写时隙产生后,DS18B20会在产生后的15到60μs的时间内采样总线,以此来确定写0还是写1。 4.2.2.3读时序
如图4-4所示,DS18B20只有在主机发出读时隙时才能发送数据到主机。因此,主机必须在BE(读存储器) 命令,B4(读电源)命令后立即产生读时隙以使DS18B20提供相应的数据。另外,在44(温度转换)命令,B8(recall)命令后也要产生读时隙。 所有的读时隙必须至少有60μs的持续时间。相邻两个读时隙必须要有最少1μs的恢复时间。所有的读时隙都由拉低总线,持续至少1μs后再释放总线(由于上拉电阻的作用,总线恢复为高电平)产生。DS18B20输出的数据在下降沿产生1后5μs内有效。因此,释放总线和主机采样总线等动作要在15μs内完成。
18
中国农业大学学士论文 控制系统软件设计
图4-2 DS18B20复位时序图
图4-3 DS18B20写时序图
图4-4 DS18B20读时序图
19
中国农业大学学士论文 控制系统软件设计
4.2.3 读温度子程序流程图
读温度子程序是在单片机的控制下,形成严格的时序,完成温度的转换并作数据的相应处理。温度转换命令子程序主要是发温度转换开始命令,本次毕业设计采用12位分辨率,转换所需的时间约为750ms。因为是单点测温,不需要CRC校验。
图4-5为读温度子程序流程图
初始化DS18B20发跳过ROM命令发温度转换命令等待转换完成初始化DS18B20发跳过ROM命令读取温度的低字节与高字节计算实际温度值并扩大10倍返回扩大10倍后的温度值
图4-5 读温度子程序流程图
20
中国农业大学学士论文 控制系统软件设计
4.3温度设定模块程序设计
温度设定模块是用来设定温度的,通过4X4键盘输入想要控制的温度值。本次毕业设计通过中断进行扫描。 4.3.1中断服务子程序
系统中中断采用的是外部中断0,外部中断0的初始化子程序在主程序开始时即被调用,当键盘上有键按下时,即产生一个外部中断0,执行中断子程序,获取输入的设定值,之后中断回。
图4-6为中断服务子程序的流程图
外部中断0入口键盘按键扫描计算设定的温度值N设定值大于125?Y设定值为原设定值
中断返回
图4-6 中断服务子程序流程图
4.3.2 键盘扫描子程序
键盘的扫描是中断扫描,若有键按下,则从第一行开始扫描,直到确定按键的行与列,确定键值,并返回键值。
图4-7为键盘扫描子程序流程图
21
中国农业大学学士论文 控制系统软件设计
扫描第一行N有键按下?Y延时去抖动N有键按下?Y确定第一行键值Y扫描第二行扫描第四行N有键按下?Y延时去抖动有键按下?Y延时去抖动N有键按下?Y确定第二行键值NN有键按下?Y确定第四行键值释放按键扫描第三行返回按键值N有键按下?Y延时去抖动结束扫描有键按下?NY确定第三行键值
图4-7 键盘扫描子程序流程图
22