基于单片机的粉尘检测仪控制程序设计 9
如图 2-2所示系统所设计的程序分为以下四个部分。
(1) 信号采集的程序:该程序设计主要是将模数转换得来的数字信号输入到单片机内部。
(2) LED 的显示程序:本程序设计主要完成粉尘浓度的数字显示。
(3) 看门狗的复位程序:该程序设计主要完成程序飞跑或死机时系统的复位。 (4) 键盘输入部分:该部分主要完成浓度参考值的设定和显示切换。 2.4.2 粉尘检测仪程序主流程图设计
根据硬件系统结构图所设计的程序主流程图如图2-3所示。
陕西科技大学毕业论文(设计说明书)
10
开始系统初始化键盘设定浓度最大限显示浓度最大限采集当前浓度A/D转换报警、显示N当前浓度<浓度最大限Y采取相应措施切换显示显示当前浓度5s定时
图2-3程序主流程图
基于单片机的粉尘检测仪控制程序设计 11
3 粉尘测试仪的程序设计
3.1 编程语言的选择
C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性,移植性也好。
在程序设计过程中,要充分利用C51 语言的预处理命令。对于一些常用的常数,如TRUE,FALSE,PI 以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义\#define\或集中起来放在一个头文件中进行定义,再采用文件包含命令\#include\将其加入到程序中去。这样当需要修改某个参量时,只须修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都作修改,从而有利于文件的维护和更新。 3.1.1 C语言的优点
根据C语言的功能可以归结出C语言具有以下优点。
(1) C语言是编译型语言,具有高级语言的特点,也具备汇编语言简洁、可以控制硬件的功能。
(2) 表达能力强,易于编程,可读性好。
(3) 可移植性好,C语言本身不依赖系统硬件,可以很容易移植到不同类型的单片机上。编译时要选择芯片,将同一条语句变成该芯片对应的指令。 (4) 有丰富的库函数可以调用。
(5) 寄存器的分配,由编译器完成,编程者可将精力集中到软件整体设计,有利于提高软件质量。(而汇编语言编程者必须记住这些分配)
(6) 可以多人编写一个大程序,将各模块之间接口确定即可。
(7) 有实时多任务操作系统(RTOS),可以合理的分配CPU的时间及单片机的资源。 (8) 开发周期短,适合工程技术人员的开发应用软件。 3.1.2 单片机C语言与一般C语言的异同
由单片机C语言和一般C语言编译条件和环境的不同可以归结出以下几个相同点和不同点。
陕西科技大学毕业论文(设计说明书)
12
相同点:语法结构基本相同,也是采用函数结构;大部分函数相同。 不同点: (1) 输入、输出不同
(2) 数据类型不同--单片机增加了bit,sbit,sfr,sfr16等数据类型。 (3) 单片机C语言增加了存储类型。
(4) 不隐含支持递归调用,要递归调用前必须说明。
(5) 库函数不同--如在CX51中没有fputs等库函数。在ANSIC中没有_NOP_,_crol_()应用是查相关资料。
(6) 单片机C有自动覆盖技术—单片机的RAM和计算机相比少的可怜,所以在编译时会自动分析判断,将不再被用的变量占用的空间重新使用。 (7) 单片机C有优化技术,可以最大限度减少代码长度。
(8) 由于单片机C语言编程的目的是要将程序最后固化到单片机或者EPROM中,所以最后要产生[后缀.HEX的文件,该文件可以固化到单片机中。 注:用单片机C语言编程是要注意以下两个方面。 (1) 应用单片机的C更要注重对系统资源的理解。 (2) 对于程序上应用的各种算法要精简。
3.2 控制器内部存储空间分布
本设计是以AT89S52为核心控件,完成数据的采集,处理,显示等功能。所以单片机AT89S52作为主控制器要控制A/D转换的模数转换工作和数据采集的工作,还要完成键盘的扫描工作,同时当现场浓度值大于设定值时还要驱动蜂鸣器报警。数据采集时还要设定采集的间隔时间,所以还要用到定时器。若要完成以上各部分工作就要熟悉单片机的内部存储空间分布情况,以便在程序设计过程中如何给各部分分配空间地址从而完成整个系统程序的设计。
AT89S52内部存储空间分布如下所述。
(1) 数据存储器空间(低128 单元)
数据存储器空间(低128 单元)按功能划分为以下几部分。 (a) 通用寄存器区
00H~1FH 的32个单元是4个通用工作寄存器区,每个区有8个8 位寄存器,其编号为R0~R7。在任一刻,CPU 只能使用其中的一组寄存器,并且把正在使用的那组寄存器称之为当前寄存器区。到底选择哪一个工作组为当前工作区,取决于专用寄存器PSW(程序状态字)中的RS1 和RS0 位的状态。RS1 和RS0 的状态可通过指令来改变。用户可以通过设置RS1 和RS0 位的状态来选择/切换当前工作寄存器区,这给用户保护寄存器中的内容提供了极大的方便。
(b) 寻址区
相关推荐: