工学]基于单片机的粉尘检测仪控制程序设计内容摘要:

逻辑操作,支持 2种软件可选择节电模式。 空闲模式下, CPU停止工作,允许 RAM、定时器 /计数器、串口、中断继续工作。 基于单片机的粉尘检测仪控制程序设计 7 掉电保护方式下, RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 (2) 部分引脚功能: XTAL1: 接外部晶振的一个引脚。 在 单片机内部,它是一反相 放大器输入端,这个放大器构成了片内振荡器。 它采用外部振荡器时,此 引脚应接地。 XTAL2: 接外部晶振的一个引脚。 在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。 当采用外部振荡器时,则此引脚接外部振荡信号的输入。 RST: 复位输入。 晶振工作时, RST脚持续 2个机器周期高电平将使单片机复位。 看门狗计时完成后, RST 脚输出 96个晶振周期的高电平。 特殊寄存器 AUXR(地址 8EH)上的DISRTO位可以使此功能无效。 DISRTO默认状态下,复位高电平有效。 ALE/PROG : ALE表示允许地址锁存允许信号。 当访问外部存储器时, ALE信号负跳变来触发外部的 8位锁存器 (如 74LS373),将端口 P0 的地址总线 (A0A7)锁存进入锁存器中。 在非访问外部存储器期间, ALE引脚的输出频率是系统工作频率的 1/16,因此可以用来驱动其他外围芯片的时钟输入。 PSEN : 访问外部程序存储器选通信号,低电平有效。 在访问外部程序存储器读取指令码 时, 每个机器周期产生二次 PSEN 信号。 在执 行片内程序存储器指令时,不产生 PSEN 信号,在访问外部数据时,亦不产生 PSEN 信号。 P0: P0口 (~ )是一个 8位漏极开路双向输入输出端口, 内部没有上拉电阻,所以端口要外接八个上拉电阻。 当访问外部数据时,它是地址总线(低 8位)和数据总线复用。 外部不扩展而单片应用时,则作一般双向 I/O口用。 P0口每一个引脚可以推动 8个 LSTTL负载。 P2: P2口 (~ )是具有内部提升电路的双向 I/0端口 (准双向并行 I/O口 ),当访问外部程序存储器时,它是 高 8位地址。 外部不扩展而单片应用时,则作一般双向 I/O口用。 每一个引脚可以推动 4个 LSTL负载。 P1: P1口 (~ )口是具有内部提升电路的双向 I/0端口 (准双向并行 I/O口 ),其输出可以推动 4个 LSTTL负载。 仅供用户作为输入输出用的端口。 P3: P3口 (~ )口是具有内部提升电路的双向 I/0端口 (准双向并行 I/O口 ),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。 其特殊功能引脚分配如下: RXD 串行通信输入 TXD 串行通信输出 T0 计数器 0 外部事件计数输入端 T1 计数器 1 外部事件计数输入端 0INT 外部中断 0输入 ,低电平有效 1INT 外部中断 1输入 ,低电平有效 陕西科技大学毕业论文(设计说明书) 8 WR 外部随机存储器的写选通,低电平有效 RD 外部随机存储器的读选通,低电平有效 各 外围电路 模块 由图 21系统结构图和本系统所完成的功能可以将 外围电路 分为以下几个模块。 (1) 模拟信号采集单元:即 ADC0809 将 5V 的模拟信号转换成数字信号。 (2) LED 数码管显示:通过 I/O 口控制数码管的段选和位选,显示数字化的粉尘浓度 ,使报告更形象化,而且也使报告显示系统具有双重保障。 (3) 键盘设定参考值:通过独立按键输入粉尘浓度参考值,与当前采集的浓度值对比判断浓度是否在安全范围内。 (4) 看门狗:使系统因故死机后能自动恢复正常。 (5) 蜂鸣器报警:浓度超标时,报警提示,使 设计更完整。 (6) 显示切换:切换显示当前浓度与浓度参考值,可以观察当前浓度与危险浓度的差距。 (7) 电源:将电源转化为 12V 的电压供电。 软件程序设计 是依据硬件将各部分的功能发挥,并使之成为一个整体。 程序框图和流程图 因为软件和硬件是密不可分的,所以 由 系统的 硬件 结构图 可以 得出 软件设计的程序框图和流程图。 程序框图 设计 根据硬件系统结构图 所得出的 各模块如图 22所示。 主 控 制 器 C P U 信 号 采 集 部 分 显 示 部 分 键 盘 部 分 看 门 狗 部 分 图 22 系统 各 模块 组成 基于单片机的粉尘检测仪控制程序设计 9 如图 22所示系统 所 设计的程序 分 为以下 四 个部分。 (1) 信号 采集的 程序 : 该程序设计主要是将模数转换得来的数字信号输入到单片机内部。 (2) LED 的显示程序 : 本程序设计主要完成粉尘浓度的数字显示。 (3) 看门狗的复位程序 :该程序设计主要完成程序飞跑或死机时系统的复位。 (4) 键盘输入部分 :该部分主要完成浓度参考值的设定和显示切换。 粉尘检测仪 程序 主 流程 图 设计 根据硬件系统结构图所设计 的 程序 主 流程图如图 23 所示。 陕西科技大学毕业论文(设计说明书) 10 开 始系 统 初 始 化键 盘 设 定 浓 度 最 大 限显 示 浓 度 最 大 限采 集 当 前 浓 度A / D 转 换当 前 浓 度 浓 度 最 大 限显 示 当 前 浓 度切 换 显 示5 s 定 时报 警 、 显 示采 取 相 应 措 施YN 图 23程序 主 流程图 基于单片机的粉尘检测仪控制程序设计 11 3 粉尘测试仪的 程序 设计 编程 语言的选择 C 语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。 因此采用 C51 语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。 对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。 对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性,移植性也好。 在程序设计过程中,要充分利用 C51 语言的预处理命令。 对于一些常用的常数,如 TRUE, FALSE, PI 以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义 # define或集中起来放在一个头文件中进行定义,再采用文件包含命令 # include将其加入到程序中去。 这样当需要修改某个参量时,只须修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都作修改,从而有利于文件的维护和更新。 C 语言的优点 根据 C 语言的功能可以归结出 C语言具有以下优点。 (1) C 语言是编译型语言,具有高级语言的特点,也具备汇编语言简洁、可以控制硬件的功能。 (2) 表达能力强,易于编程,可读性好。 (3) 可移植性好, C语言本身不依赖系统硬件,可以很容易移植到不同类型的单片机上。 编译时要选择芯片,将同一条语句变成该芯片对应的指令。 (4) 有丰富的库函数可以调用。 (5) 寄存器的分配,由编译器完成,编程者可将精力集中到软件整体设计,有利于提高软件质量。 (而汇编语言编程者必须记住这些分配) (6) 可以多人编写一个大程序,将 各模块之间接口确定即可。 (7) 有实时多任务操作系统( RTOS),可以合理的分配 CPU 的时间及单片机的资源。 (8) 开发周期短,适合工程技术人员的 开发应用软件。 单片机 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) 对于程序上应用的各种算法要精简。 控制器 内部存储空间分布 本设计是以 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) 寻址区 基于单片机的粉尘检测仪控制程序设计 13 RAM中的 20H~ 2FH 的 16个单元除了可作为一般 RAM 单元进行字节寻址外,还可进行位寻址 , 作位寻址区。 位寻址区共有 16个 RAM 单元,合计 128 位,位地址为 00H~ 7FH。 89S52单片机具有位处理机(又称布尔处理机)功 能,位处理机的存储空间就包括这个位寻址区。 (c) 用户区 在内部 RAM 低 128 单元中,通用寄存器占去 32个单元,位寻址区占去 16个单元,剩下的 80个单元就是供用户使用的一般 RAM 区,地址单元为 30H~ 7FH。 对这部分区域的使用不作任何规定和限制,但应当说明的是,堆栈一般开辟在此区。 关于堆栈 ,堆栈是一个特殊的存储区域 ,它后进 先出,而单片机的堆栈是地址增加型,即压入数据时地址指针增加。 堆栈 的操作有压入: PUSH,弹出: POP。 (2) 特殊功能寄存器 SFR(高 128 单元) 内部 RAM 的高 128 单元是给特殊寄存器使用的,因此称之为专用寄存器区,其单元地址为 80H~ FFH。 因为这些寄存器的功能已作专门规定,所以称其为专用寄存器或特殊功能寄存器( Special Function Registers)。 特殊功能寄存器的总数为 21个,仅占用了 80H~ FFH 中的很小一部分。 21个特殊功能寄存器是不连续地分散在内部 RAM 的高 128 单元之中,尽管其中还有许多空闲地址,但用户不能使用。 程序计数器 PC是独立于 SFR 之外的唯一的一个不可寻址的专用寄存器。 PC不占 RAM 单元,在物理上是独立存在的。 它不包 括在 21个特殊功能寄存器中。 在 21个特殊功能寄存器中,有 11个寄存器不仅可以字节寻址,也可以进行位寻址。 凡是能进行位寻址的 SFR,其特征是字节地址都能被 8 整除(字节地址的末位是 0 或 8)。 IP中有 3位、 IE 中有 2位、 PSW中有一位对用户无实际意义,所以直接寻址位为 82位;再加上数据存储器中的 128 位, 89S52共计有 210位可寻址位。 (a) 程序计数器 PC PC是一个 16位的计数器。 其内容为将要执行的指令地址,寻址范围达 64KB。 PC 有自动加 1功能,从而实现程序的顺序执行。 PC没有地址,是不可 寻址的(但在物理上是存在的),因此用户无法对它进行读写;但可以通过转移、调用返回等指令改变其内容,以实现程序的转移。 (b) 累加器 A 累加器 A为 8位寄存器,是最常用的专用寄存器,功能较多。 它既可用于存放操作数 ,也可用来存放中间结果。 89S52单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。