基于单片机的多温度检测系统的设计与protues仿真
第四章 软件设计
4.1软件开发工具的选择
要使单片机系统按照人的意图办事,需设法让人与计算机对话,并听从人的指挥。程序设计语言是实现人机交换信息的最基本工具,可分为机器语言、汇编语言和高级语言。
机器语言用二进制编码表示每一条指令,是计算机能直接识别和执行的语言。用机器语言编写的程序成为机器语言程序或者指令程序(机器码程序)。因为机器只能识别和执行这种机器码程序,所以又称它为目标程序。用机器语言编写程序不易记忆、不易查错、不易修改。
为了克服机器语言的上述缺点,可采用有一定含义的符号,即指令助记符来表示,一般都采用某些有关的英文单词的缩写。这样就出现了另一种程序语言—汇编语言。
汇编语言是用助记符、符号和数字等来表示指令的程序语言,容易理解和记忆,它与机器语言指令是一一对应的。汇编语言不像高级语言(如BASIC)那样通用型强,而是属于某种计算机所独有,与计算机的内部硬件结构密切相关。用汇编语言编写的程序称为汇编语言程序。
以上两种语言都是低级语言。尽管汇编语言有不少优点,但它仍存在着机器语言的某些缺陷:与CPU的硬件结构密切相关,不同的CPU其汇编语言是不同的。这使得汇编语言程序不能移植,使用不便;其次,要使用汇编语言进行程序设计必须了解所使用CPU硬件的结构与性能,对程序设计人员有较高的要求。为此,又出现了对单片机进行编程的高级语言,如PL\\M,C等。
KEIL C51是美国KEIL Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。
KEIL C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KEIL C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容
易理解。在开发大型软件时更能体现高级语言的优势。
经以上分析综合得知,本课题采用C语言进行编程。
4.2系统软件设计的一般原则
在单片机应用开发中代码使用效率、单片机的抗干扰性以及软件可靠性是实际工程设计的重点。
单片机应用软件系统设计包括功能模块划分、程序流程确立、模块接口设计以及程序代码编写。我们依据系统的功能要求,将整体软件系统分割成若干个独立的程序模块。这些程序模块可以是几条语句的集合、功能函数或程序文件。随后,根据个程序模块的实现功能写出流程,一般需要写出具体的实现功能描述。程序代码通常采用汇编语言或高级语言(C语言)编写。 本课题采用C语言编程,在此必须注意以下问题: (1)提高程序代码效率
必须熟悉当前使用的C语言编译器,试验每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道代码效率。 (2)减少程序错误
我们在编写程序时,要注重考虑如下方面。
[1]物理参数 [2]资源参数 [3]应用参数 [4]过程参数 (3)单片机的抗干扰性
防止干扰最有效的方法是去除干扰源、隔离干扰路径。单片机干扰最常见的现象就是复位,导致程序运行异常。设计系统是一般需要添加一个“看门狗”监控模块,在系统出现不可逆转的干扰时,监控模块将重启系统,并从断点处继续执行。
(4)系统的可靠性
[1]要测试单片机软件功能的完善性。 [2]上电、掉电测试。 [3]系统耗损测试。
基于单片机的多温度检测系统的设计与protues仿真
4.3系统软件设计的一般步骤
系统进行软件设计时,先要对本课题硬件有一个熟练的掌握,知道系统的组成,数据的传输,信号是如何被控制的,以及信号的显示。然后进行软件设计时,先搞清楚各个部分的子程序及他们的流程图,然后进行C语言编程,最后将它们系统的编程
4.4软件实现
系统软件设计主要包括系统程序和流程图,根据整个系统的要求,完成温度的测量与控制必须经过以下几个步骤:单片机接受传感器的温度信号,并通过LCD液晶显示器显示出来,单片机扫描按键,接受控制信号,并将温度上下限设定值显示出来,若温度不在范围内则发出报警。 4.4.1系统主程序流程图
首先要对系统的各个模块初始化,先执行测温子程序,获取外界的温度值送
单片机进行处理,调用相应的显示子程序,对获取的温度显示。然后单片机对按键所连接的引脚进行巡回检测,若果为低电平,说明有键被按下,执行相应的按键功能,对温度上下限的设定值进行调整并显示在LCD液晶显示器。若检测到返回键为低电平,则回到原来的测温状态,此时的报警上下限的设定值已经修改,系统根据此设定值和主程序,判断是否需要调用报警子程序和蜂鸣器响起子程序。
开始 系统初始化 测温子程序 温度显示子程序 显示调整温度 是 温度上下限设定键是否按下? 是 显示温度上下限温度上下限调整键是否按下? 否 返回键? 是 否 报警子程序 蜂鸣器响起子程序
图4.1 系统主程序流程图
4.4.2传感器程序设计 (1)DSl8B20编程简介
每一片单总线芯片内部都有一个全球惟一的64 位编码,在多路测温时就是通过匹配每个芯片的ROM编码(ID),来搜寻该路的温度。DS18B20有9个可擦写的内部寄存器,称为便笺式RAM。所有的串行通讯,读写每一个bit位数据都必须严
基于单片机的多温度检测系统的设计与protues仿真
格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的DS18B20芯片来说,访问每个器件都要遵守下列命令序列:
首先是初始化;其次执行ROM 命令;最后就是执行功能命令(R0M命令和功能命令后面以表格形式给出)。
如果出现序列混乱,则单总线器件不会响应主机。当然,搜索ROM 命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。
基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备,且准备就绪。
每次访问任何单总线器件,必须严格遵守这个命令序列;如果出现序列混乱,则单总线器件不会响应主机。但是这个准则对于搜索ROM命令和报警搜索命令例外,在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回至第一步。在 主 机 发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18 B20支持的某个功能命令。这些命令允许主机写人或读出DS18 B20暂存器,启动温度转换以及判断从机的供电方式。 (2)软件实现
前面提及单总线器件的ROM命令,在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64位ROM代码相关。允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。这些命令还允许主机能够检测到总线上有多少个从机设备,以及其设备类型或者有没有设备处于报警状态。从机设备可能支持5种ROM命令(实际情况与具体型号有关),每种命令长度为8位。主机在发出功能命令之前,必须发送合适的ROM命令。 ① 搜索ROM[F0h]
当系统初始上电时,主机必须找出总线上所有从机设备的ROM代码,这样主机就能够判断出从机的数目和类型。主机通过重复执行搜索ROM循环(搜索ROM命令跟随着位数据交换)以找出总线上所有的从机设备。如果总线只有一个从机设备,则可以采用读ROM命令来替代搜索ROM命令。在每次执行完搜索ROM循环后,主机必须返回至命令序列的第一步(初始化)。 ② 读ROM[33h](仅适合于单节点)