可燃气体报警器设计毕业论文_第1页
可燃气体报警器设计毕业论文_第2页
可燃气体报警器设计毕业论文_第3页
可燃气体报警器设计毕业论文_第4页
可燃气体报警器设计毕业论文_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕业论文设计可燃气体报警器设计第1章 单片机相关知识介绍1.1 单片机中断与复位2.1.1单片机中断系统1. 中断的概念中断是通过硬件来改变cpu程序运行的方向。计算机在执行程序的过程中,由于cpu以外的某种原因,有必要尽快中止当前程序的执行,而去执行相应的处理程序,在处理结束后,再回来继续执行被中止了的源程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。2. 89c51 的中断系统89c51的中断系统主要由几个与中断有关的特殊功能的寄存器,中断入口,顺序查询逻辑电路等组成。与中断有关的特殊功能寄存器有四个,分别为中断源寄存器(即专用寄存器tcon和scon的相关位),中

2、断允许控制寄存器ie和中断优先级控制寄存器ip。89c51单片机有5个中断源,可提供两个中断优先级,即可实现二级中断嵌套。5个中断源的排列顺序由中断优先级控制寄存器ip和顺序查询逻辑电路共同决定。5个中断源对应5个固定的中断入口地址。(1) 中断请求源: 外部中断请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为int0、int1,也就是p3.2、p3.3这两个引脚。在内部的tcon中有四位是与外中断有关的。it0:int0触发方式控制位,可由软件进和置位和复位,it0=0,int0为低电平触发方式,it0=1,int0为负跳变触发方式。ie0:int0中断请求标志位。当

3、有外部的中断请求时,这位就会置1(这由硬件来完成),在cpu响应中断后,由硬件将ie0清0。it1、ie1的用途和it0、ie0相同。(2)内部中断请求源:tf0:定时器t0的溢出中断标记,当t0计数产生溢出时,由硬件置位tf0。当cpu响应中断后,再由硬件将tf0清0。tf1:与tf0类似。ti、ri:串行口发送、接收中断。(3) 中断允许寄存器ie中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器ie来控制的。见表2-1 表2-1 8位中断允许寄存器eaxxeset1ex1et0ex0其中ea是总开关,如果它等于0,则所有中断都不允许。es串行口中断允许et1定时器1中断允许,ex1

4、外中断1中断允许。et0定时器0中断允许,ex0外中断0中断允许。(4)五个中断源的自然优先级与中断服务入口地址外中断0:0003h 定时器0:000bh外中断1:0013h 定时器1:001bh串口 :0023h它们的自然优先级由高到低排列。中断优先级中由中断优先级寄存器ip来置值的,ip中某位设为1,相应的中断就是高优先级,否则就是低优先级。xxxpspt1px1pt0px02.1.2单片机复位电路复位是单片机的初始化操作,其主要功能是把pc初始化位0000h单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

5、除pc之外,复位操作还对其它一些专用寄存器有影响,他们的复位状态如下;pc 0000h tcon 00hacc 00h tlo 00hpsw 00h th0 00hsp 07h tl1 00hdptr 0000h th1 00hp0p3 0ffh scon 00hip xx000000b sbuf 不定ie 0x000000b pcon 0xx0000btmod 00h复位操作还对单片机的个别引脚信号有影响,例如把ale和信号变为无效状态,即ale = 0, = 1。本实验采用按键电平复位方式,晶振为12mhz,r1为200,r2为2k,c为10uf。复位电路虽然简单,但其作用非常重要。一个单

6、片机是否正常工作,首先要检查是否能复位成功。1.2 at89c51单片机对adc0809的接口mcs-51与adc接口时必须弄清并处理好三个问题:1要给start线送一个100ns宽的启动正脉冲;2. 获取eoc线上的状态信息,因为它是a/d转换的结束标志;3.要给“三态输出锁存器”分配一个端口地址,也就是给oe线上送一个地址译码器输出信号。mcs-51和adc接口通常可以采用查询和中断两种方式。采用查询法传送数据时mcs-51应对eoc线查询它的状态:若它为低电平,表示a/d转换正在进行,则mcs-51应当继续查询;若查询到eoc变为高电平,则给oe线送一个高电平,以便提取a/d转换后的数字

7、量。采用中断方式传送数据时,eoc线作为cpu的中断请求输入线。cpu响应中断后,应字中断服务程序中使oe线变为高电平,以提取a/d转换后的数字量。 mcs-51对adc0809的接口adc0809内部有一个8位“三态输出锁存器”可以锁存a/d转换后的数字量,故它本身既可看作一种输入设备,也可认为是并行i/o接口芯片。因此,adc0809可以直接和mcs-51接口,当然也可通过像8255这样的其他芯片连接。但在大多数情况下,51系列单片机是和adc0809直接相连的1.3 at89c51的介绍是一个低电压,高性能cmos 8位单片机,片内含4k bytes的可反复擦写的flash只读程序存储器

8、和128 bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器和flash存储单元,内置功能强大的微型计算机的at89c51提供了高性价比的解决方案。at89c51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(i/o)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,at89c51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和flash存储器结合在一起,特别是可反复擦写的flash存储器可有效地降低开发成本。第2章 硬件部分的设计及调试

9、2.1 硬件部分的设计2.1.1 系统的组成整个报警器由三个部分组成:浓度检测及显示模块。主控模块和报警及事故处理模块。系统的组成框图如图3-4所示。故障处理报警控制浓度显示at89c51气体浓度检测工作状态设置图3-4 系统组成框图2.1.2 系统各模块功能1.气体浓度检测模块系统采用三点单独检测的方法,可用来巡回检测三个不同的房间;也可用来巡回检测同一个房间的不同方位.检测器件选用高温一氧化碳气体传感器(gs-a1),该传感器对一氧化碳具有很高的灵敏度,稳定性和抗湿性良好,加活性碳罩后,可防止乙醇等有机气体的干扰.检测结果经高精度运放器op07放大后,送入adc0809模p数转换芯片进行模

10、)数转换,单个传感器检测电路图如图5。 2.模数转换模块在本设计中,另一重要模块就是a/d模数转换模块。因为模拟信号不能直接送往单片机进行处理,必须进行a/d转换。模数转换的过程有四个阶段,即:采样,保持,量化和编码。本设计利用adc0809实现模数转换。adc0809是8位逐次渐进型的a/d转换器,它采用coms工艺20个引脚双列直插式封装,它有三态琐存器,直接驱动数据总线,与微机相连时不需要附加接口电路。adc0809的主要性能如下:1分辨率为8位。2最大转换误差为1lsb。3转换时间为100us。4逻辑点平与coms和ttl相兼容。5+5v单电源供电。6可对0到+5v的输入模拟信号进行转

11、换。图3-5 a/d转换模块引脚图程序中预采用模数转换电路由adc0809芯片组成,三路检测结果从in0、in1、in2输入,转换顺序由adda、addb、addc控制,转换结果送单片机p0口供单片机进行数据处理。3.显示电路由p0口输入的数据,在单片机内部进行标度变换后,从单片机的串行口输出进行显示.系统的工作状态和气体浓度,采用led数码管显示,每30秒刷新一次.为了不再扩展ipo口,系统采用串行口的移位功能扩展为4位静态显示电路.第一位为系统工作状态显示,后三位为一氧化碳气体浓度显示.当第一位为“00”时,表示系统工作在三点巡回检测同一个房间状态;为“8”时表示系统工作在三点巡回检测同一

12、个房间正常工作状态;为“1”、“2”、“3”时表示系统工作在单独检测状态,此时后三位显示的数据分别为第1号、第2号、第3号传感器所检测到的一氧化碳气体浓度。浓度显示单位为5ppm.74ls164为串行输入,并行输出寄存器,当p2.0=1且at89c51的txd端有输出时,74ls164接收串行数据,更新显示;当p2.0=0时,显示的内容不变。4.主控模块系统采用单片机进行控制,选用at89c51单片机.该单片机为atmel公司的产品,其指令系统完全与8031/8051兼容,内带4k字节的内存和程序保护系统,便于程序的调试修改和保密,各管脚的功能如下:1)ale端的功能:ale端与adc0809

13、的clock相连,为adc0809输入时钟脉冲.2)p0口的功能:p0口与adc0809的数据输出口相连,接收apd转换结果.3)p1口的功能:p1.0端接工作状态控制开关,开关闭合时,系统进入正常工作状态;p1.1端外接的开关为三点巡回测量同一个房间控制开关,当开关闭合时有效;p1.2p1.4端接adc0809的adda、addb、addc三端,控制adc0809的八路模拟输入转换.4)p2口的功能:p2.1端与wr端通过外接的与门求反后与adc0809的start和ale相连,用以启动apd转换,且将8路地址锁存;p2.1端与rd端通过外接的与门求反后与adc0809的oe端相连,用以允许

14、将apd转换结果输出,让单片机读取转换结果;p2.2端用作系统音乐报警信号控制端,高电平有效;p2.3端用作排风扇启动信号控制端,高电平有效;p2.4端用作电磁阀启动信号控制端,高电平有效.5)p3口的功能:p3.0、p3.1端和p2.0端用于控制系统的显示输出.5.报警与事故处理模块当气体浓度超过允许值时,该模块动作,发出警报信号并根据不同情况进行事故处理.p2.2端为音乐控制端,p2.3端为电磁阀启动控制端,p2.4为排风扇控制端,均为高电平有效.为防止市电对系统的干扰,p2.3和p2.4端都经过光电耦合管对电磁阀和排风扇进行控制.系统各模块之间的接线图如图6所示.图5 单个传感器电路图

15、2.1.3 系统的控制1系统要求设置正常工作状态,除正常工作状态外,电磁阀要求处于关闭状态,以切断煤气通道,防止煤气外泄。2在非正常工作状态下,当室内一氧化碳的浓度达到100ppm时系统应启动音乐报警,若2min报警无效,系统应启动排风扇进行通风排气。3系统进入正常工作状态后,先启动排风扇进行通风,然后启动电磁阀供给煤气。4系统进入正常工作状态,自45min后,每隔10min音乐响起一次,用来提醒用户在工作完毕后,停止供气。5在正常工作状态下,当系统检测到一氧化碳的浓度达到300ppm时,应关闭电磁阀,切断煤气通道以防止意外事故的发生。2.1.4 系统主要器件的介绍3.1.4.1 gs传感器介

16、绍设计中所用到的气体传感器是gs系列传感器,下面具体介绍一下gs系列气体传感器:gs系列气敏元件采用半导体敏感材料,工艺独特为国内首创,其灵敏度、选择性、稳定性、抗干扰性、响应时间及寿命等主要性能,均达到国内先进水平.用该系列元件组装成易燃易爆和有毒气体泄漏报警器及检测装置,可广泛运用于矿山、油田、化工、国防、医药及家庭.gs系列传感器主要有以下特点:(1)灵敏度高、功耗低,输出信号强.(2)选择性好、对被检测的气体非常敏感,而对干扰气体则灵敏度很低(3)稳定性、可靠性强(4)具有抗高温、抗高湿性能(5)元件不含任何贵金属催化剂,具有抗中毒及抗饱和性能.但由于气体传感器是使用半导体材料来制作,

17、不可避免的是有温度漂移问题,如何处理好气体传感器温度补偿问题是报警器设计的关键(图3-1、图 3-2).以前的一般做法是把报警器的报警阀值电压作补偿,这样的电路会简单一些,但温度补偿的效果不太理想,主要是在低温环境里,气体传感器的表面温度降低导致气体传感器的性能变差,解决的方法是在低温环境里提高气体传感器的加热功率,使气体传感器的表面温度维持相对恒定,达到使气体传感器稳定工作的目的。图3-1 传感器输出特性曲线图图3-2 传感器加温度补偿所需的加热电压曲线 气体传感器加热电源的原理见图 3-3,利用 pic 单片机的脉冲宽度调制输出功能(简称 pwm), 及 a/d 转换输入功能实现电源电压的

18、稳定和自我调整。 如图所示,是降压式开关电源(buck 式)的基本电路。其中,vin 为输入电压,vout 为输出电压,q1、q2 为开关三极管,r1、r2、r3 为电阻,l 为电感,d 为肖特基二极管;c 为电容,mqk 为气体传感器,通常有:,;。其中,n 为脉宽占空比,ton 为开关三极管导通时间,toff 为开关三极管关闭时间,rx 为开关电源的负载电阻,vp 为输出纹波电压.实际使用开关速度为 20khz,输出的电压为 2.250.01v,输出电流为 120ma,vp0.1v.该电路的工作原理是:预先设定目标工作电压值,输出 at89c51 单片机的 pwm,启动开关电源工作,通过a

19、/d 转换电路将电源电压值读入单片机,如果电压值偏离给定值,则调整 pwm 输出,这样形成一个电压调整的闭合环路,直到电压值维持恒定,而环境温度将决定电压给定值的大小,达到随外界温度的改变而改变加热功率的目的,以补偿气体传感器的温度变化,同时使用开关电源减少了线性稳压电源的压降损耗.该开关电源电路的电压稳定精度取决于单片机 a/d 和 pwm 的精度,该 at89c51 单片机基本能够满足气体泄漏报警器的性能需求。图3-3 传感器加热电源原理图 3.1.4.2 74ls164移位寄存器介绍74ls164 8 位移位寄存器(串行输入,并行输出) 简要说明 164 为 8 位移位寄存器,其主要电特

20、性的典型值如下:当清除端(clear)为低电平时,输出端(qaqh)均为低电平。 串行数据输入端(a,b)可控制数据。当 a、b 任意一个为低电平,则禁 止新数据输入,在时钟端(clock)脉冲上升沿作用下 q0 为低电平。当 a、b 有一个为高电平,则另一个就允许输入数据,并在 clock 上升沿作用下决定 q0 的状态。 引出端符号 clock 时钟输入端 clear 同步清除输入端(低电平有效) a,b 串行数据输入端 qaqh 输出端逻辑及封装图双列直插封装极限值 电源电压7v 输入电压 5.5v 工作环境温度 54164 -070 储存温度 -65150真值表h高电平 l低电平 x任

21、意电平 低到高电平跳变 qa0,qb0,qh0 规定的稳态条件建立前的电平 qan,qgn 时钟最近的前的电平时序图下面再介绍一下74ls164驱动数码管:在单片机应用系统中,显示器显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的i/o接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中cpu的开销小。可以提供单独锁存的i/o接口电路很多,这里以常用的串并转换电路74ls164为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。 m

22、cs-51单片机串行口方式0为移位寄存器方式,外接6片74ls164作为6位led显示器的静态显示接口,把8031的rxd作为数据输出线,txd作为移位时钟脉冲。74ls164为ttl单向8位移位寄存器,可实现串行输入,并行输出。其中a、b(第1、2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,共一个输入信号时可并接。t(第8脚)为时钟输入端,可连接到串行口的txd端。每一个时钟信号的上升沿加到t端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74ls164中。r(第9脚)为复位端,当r=0时,移位寄存器各位复0,只有当r=1时,时钟脉冲才起作用。q1q8(第3-6和1

23、0-13引脚)并行输出端分别接led显示器的hga各段对应的引脚上。在给出了8个脉冲后,最先进入74ls164的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢?再来一个脉冲,第一个脉冲就会从最高位移出,搞清了这一点,下面让我们来看电路,6片7ls164首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单片机rxd端输出的数据就进入到了第一片74ls164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74ls164,而新的数据则进入了第一片74ls164,这样,当第六个8个脉冲完成后,首次送出的数据被送到了最左面的164中,其他数据依次出现在第一、二、三、四、五片74ls1

24、64中。2.2 硬件电路的调试本设计的元器件较少,所以采用万用板手工焊接。焊接完成后,检查有无可能出现的虚焊、漏焊,检查电源线和接地线。确定无问题后将电路板通电。首先用示波器观察单片机at89c51的18、19管脚有无频率为10mhz的三角波。若有,表示晶振正常工作,单片机能保证正常工作。若无,检查晶振电路,排除故障。接着用单片机仿真器向p1口送数值,检查led数码管能否正常显示,若不能,检查译码器7448是否工作,有无电压输出,检查led是否损坏。最后检查adc0809在有电压15v接入的情况下,有无电压输出。若无问题,硬件调试完毕。第3章 软件部分的设计及调试3.1 软件部分的设计本设计的

25、主要功能实现在于程序的编写,流程图如图4-1: 图4-1 软件流程图如图所示,整个报警器程序上分成中断取值转换、调零、报警、显示四大模块3.1.1 主程序整个程序一共使用了两个中断,一个外部中断即int0中断,一个定时/计数器中断即it0中断.这两个中断各有其作用,int0中断是用来判断a/d转换器adc0809对模拟信号的转换是否完成,当a/d转换结束后,adc0809发出结束eoc(高电平)信号,该信号可供单片机查询,也可反相后作为向单片机发出中断信号,而本设计正是用的这个方法,使得程序进入中断取值程序.而程序中所用到的it0中断,是为产生一个周期为2s的方波而设计的,其作用是为看门狗产生

26、喂狗子信号.具体程序如下: org 00h jmp start ;主程序入口地址 org 03h jmp into ;外中断into入口 org 0bh jmp itop ; 定时器0中断入口 org 0100hstart: mov ie,#10000001b ;int0中断使能 mov ip,#00000001b ;int0中断优先 mov tcon,#00000000b ;设置int0为电平触发 mov scon,#00000000b ;串行口发送,接收标志位请0 mov sp,#60h ;设堆栈指针 mov tmod,#01h ;设置t0为方式1 call pt0m0here: ajmp

27、 here ;自身跳转pt0m0: mov tl0,#0ch ;t0中断服务程序,t0重新置初值 mov th0,#0feh setb tr0 ;启动t0 setb et0 ;允许t0中断 setb ea ;cpu开中断 retitop: mov tl0,#0ch ;t0中断服务程序,t0置初值 mov th0,0feh cpl p1.0 ;p1.0状态取反 reti acall led ;调用led自检子程序 mov 33h,#00h ;设置中断完成标志为0 mov dptr,#0feffh ;adc0809的端口地址 movx dptr,a ;使bus为高阻抗,令adc0809开始转换wa

28、it:mov a,33h ;等待a/d转换完成信号 jnz intok jmp wait ;未完成则跳回等待intok: mov a,32h ;将最新的浓度值存入累加器中,(若a/d未工作,则a=0) jnz l1 mov a,30h jmp l2l1: mov 30h,31h mov a,31h ;将新浓度载入累加器l2: call bcd ;调用bcd码调整程序 call disp ;显示当前浓度 call adzero ;调用零点调整子程序 call alarm ;调用判断报警程序 call bcd call disp ;调用显示子程序 clr a ;清除累加器值 jmp start ;

29、返回在主程序通过对33h中数值的判断断定a/d是否转换完成,当33h中为1时,转换完成,程序调用调零、报警、显示模块对输入数据进行处理。3.1.2 调零子程序:由于未知问题,可能造成送入单片机中显示的模拟电压量与真实电压存在区别,这种误差可以通过在中断处理中对a/d转换的数值加上一个调整值来解决。这样,我们就能根据实际情况来对报警器输出的数值进行控制,使其记数更加精确,使用更方便。我们可以利用对端口的电平高低来判断是否需要进行调零处理,故可将按键开关接于端口p2.2.若开关按下,则说明有调零需要,于是进入调零处理程序;若开关没有按下,则说明没有调零需要,系统进入下一步.通过设置一个按键,既可保

30、证程序顺利进行,又方便用户使用.具体程序如下:adzero:call delayjb p2.2,jmp1 ;判断调零按钮是否按下,没按则跳jmp1.jmp1:ret通过对p2.2位的判断来分辨是否有调零请求,若有则跳入调零模式,调零模式中程序如下:loop1:call delay jnb p2.2,$ ;消除抖动延时 mov a,40h ;将调零预设值40h送入 clr c ;清除进位标志 subb a,#01h ;调零值减1 jnc loop2 ;未借位则跳loop2 mov a,#05h ;有借位则重设调零值为5loop2:mov 40h,a ;将调零值送回40h保存 mov a,r3 ;

31、将当前浓度值送入a jz xend dec a ;当前浓度值减1(响应调整变化)xend1 :mov 30h,a ;送回30h保存 mov 31h,a ;送回31h保存 call bcd ;调用bcd码调整 call disp ;调用显示子程序jmp loopxend: mov a,#63h jmp xend1进入调零模式后,若有按键则,led数码管示数响应按键变化。若3秒无任何按键,则退出调零模式返回主程序。3.1.3 显示子程序因为通过a/d转换进入单片机8051的浓度值以十六进制存在,为了让led显示需要转换为bcd码,其bcd码转换程序如下:bcd:mov 55h,#00h ;存放bc

32、d转换中的百位数mov 56h,#00h ;存放bcd转换中的十位数clr c ;清除进位标志为下面的subb准备 mov r2,#00h ;清除r2chan:subb a,#64h ;减100jc chan1 ;不能减,转inc r1 ;百位值jmp chan ;循环判断百位chan1: add a,#64h ;还原百位数 clr c ;清除进位标志为下面的subb准备chan2: subb a,#0ah ;减10jc chan3 ;不够减,跳inc r2 ;够减十位加1jmp chan2 ;重复减10chan3: add a,#0ah ;还原十位数mov 60h,r2 ;把十位数放60h中

33、mov 61h,a ;把个位数放61h中ret这样把转换成的bcd码,个位存于61h中,十位存入60h中,再编写显示模块如下:disp: mov r7,#03h mov r0,#60hled1: mov a,r0 mov dptr,#tableled2: movc a,a+dptr mov sbuf,a jnb ti,$ clr ti inc r0 djnz r7,led1 ret将数值送入到led显示74ls164驱动数码管的过程:在单片机应用系统中,显示器显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的i/o接口用于笔划段字形代码。这样单

34、片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中cpu的开销小。可以提供单独锁存的i/o接口电路很多,这里以常用的串并转换电路74ls164为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。 mcs-51单片机串行口方式0为移位寄存器方式,外接3片74ls164作为3位led显示器的静态显示接口,把8031的rxd作为数据输出线,txd作为移位时钟脉冲。74ls164为ttl单向8位移位寄存器,可实现串行输入,并行输出。其中a、b(第1、2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,共一个输入信

35、号时可并接。t(第8脚)为时钟输入端,可连接到串行口的txd端。每一个时钟信号的上升沿加到t端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74ls164中。r(第9脚)为复位端,当r=0时,移位寄存器各位复0,只有当r=1时,时钟脉冲才起作用。q1q8(第3-6和10-13引脚)并行输出端分别接led显示器的hga各段对应的引脚上。在给出了8个脉冲后,最先进入74ls164的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢?再来一个脉冲,第一个脉冲就会从最高位移出,搞清了这一点,下面让我们来看电路,3片7ls164首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单

36、片机rxd端输出的数据就进入到了第一片74ls164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74ls164,而新的数据则进入了第一片74ls164,这样,当第六个8个脉冲完成后,首次送出的数据被送到了最左面的164中,其他数据依次出现在第一、二、三片74ls164中。由于本设计采用的是机械按键,与地线想连,按键按下,输入为低电平,释放按键则输入为高电平。实际上,机械式按键的落片存在着轻微的弹跳现象其时间由操作员按键的动作所确定,为了确保cpu对按键的一次闭合仅做一次处理,必须去除抖动,一般通过调用子程序延时来解决,在键的稳定闭合或释放时才读出键的状态,具体程序如下:delay:

37、movr 5,#60 设定30毫秒d1: mov r6,#248 ;设定0.5毫秒djnz r6,$ djnz r5,d1 ret因为石英晶体为12mhz,一个机器周期为1微秒,这样如上程序可达到延时30毫秒的目的。3.1.4 报警子程序本设计采用了声光报警,当探测器探测的浓度超过报警设定值时就会同时产生音乐报警和灯光报警,此时红灯亮启,喇叭发出音乐,而正常时,喇叭关闭,红灯关闭,而显示正常的绿色led亮启,本设计为了安全起见,还设置了事故处理装置,即出现危险使,探测器除了报警外,还会使排气扇的阀门打开,对室内进行排气,以免产生气体爆炸或是中毒.具体程序如下alarm: mov a,30h ;

38、将当前浓度值送如累加器 clr c ;清除进位标志 subb a,50h ;与预警值进行判断 jnc good1 ;若无借位,则当前浓度值高于或者等于预警值,跳good1报警 setb p1.6 ;关闭声光报警 setb p1.7 clr p2.3 ;关闭排气阀门 setb p1.5 ;关闭黄色led clr p1.4 ;打开绿色led(显示正常) ret good1: clr p1.6 ;打开声光报警(危险报警) clr p1.7 clr p2.3 ;打开排气阀门 setb p1.5 ;关闭黄色led setb p1.4 ;关闭绿色led(显示不正常? ret3.1.5 中断取值子程序:从硬

39、件电路图可以看出,a/d0809的intr端通过反相器与单片机的外部中断int0相连,由a/d0809的管脚功能可知,当a/d开始转换送入的模拟电压时,intr端为低电平,转换完成后,intr端变成高电平,通过反相器变成低电平使单片机89c51产生外部中断,进入中断处理程序:;* * * * * * * * * * * * * * * * *into: push acc ;将累加器值压入堆栈保存 push psw ;将psw值压入堆栈保存 movx a,dptr ;将a/d转换好的值送入累加器 mov 32h,a ;将a/d读得的值存入32h保存 clr c subb a,51h ;判断获得的

40、电压是否小于1v(50) jnc ok1 mov 32h,#00h ;当前a/d转换的电压小于1v,则a/d转换得的示数为00 jmp emp1 ok1: mov a,32h call adjust ;调用adjust将其调整为浓度对应的16进制 call addd ;调用addd将其与调零预设值相加,得到调整后的16进制 mov 31h,a ;将调整后的值送入31h保存 emp1: mov ie,#10000000b ;关闭int0中断使能,关闭中断 pop psw ;至堆栈取回psw值 pop acc ;至堆栈取回acc值 mov 33h,#01h ;中断完成,设置完成标记33h为1 re

41、ti;* * * * * * * * * * * * * * * * *; 调整相加子程序;* * * * * * * * * * * * * * * * * adjust: clr c subb a,#32h ;将a/d转换的值减50再除10乘5可得当前浓度的16进制值 mov b,#0ah div ab mov b,#05h mul ab ret addd: add a,40h table: db 0c0h,0f9h,0a4h,0b0h,99h db 92h, 82h, 0f8h,80h, 90h end在中断处理过程中,因为a/d0809在模拟电压为15v时送入单片机的数值为50250,

42、为了使示数在099间变化,编写数值转换程序如下:adjust: clr c subb a,#32h ;将a/d转换的值减50再除10乘5可得当前浓度的16进制值 mov b,#0ah div ab mov b,#05h mul ab ret中断处理过程中断处理过程可分为三个阶段,即中断响应,中断处理和中断返回。图2-1单片机中断流程图图中,保护现场之后的开中断是为了允许有更高级中断打断此中断服务程序。3.2 软件程序的调试程序输入完后就进入调试阶段。调试时采用逐个调试的方法,即先调试其中每个子程序,确保无误后再对整个程序进行整体调试,直到程序顺利运行,达到设计目的。事实证明了调试过程是极其缓慢

43、与艰苦的,在软件调试过程中,由于对中断操作的处理不当,使我很长时间一直停滞不前,通过对自己耐心极限的挑战,最终发现了问题,我相信这是对自己独立工作能力的一个很好的锻炼,一次难得的经历。附录软件设计源程序;30h:存放旧浓度地址31h:现在浓度值(a/d转换后换算取得的新浓度);40h:初始调零值=0 32h:a/d转换后的值 33h:a/d转换完成(中断完成)标志;50h:初始预警值=5055h:存放bcd转换中的百位数;56h:存放bcd转换中的十位数60h:转换完的个位存放地址;61h:转换完的十位存放地址62h:转换完的百位存放地址;63h:存放转换完的压缩bcd码供显示用 r1:bcd

44、转换中存放的百位数(可做百位报警);r2:bcd转换中存放十位数60hr3:当前浓度值保存;r4:设置改变模式延时时间r5,r6:延时程序中用到;sp:堆栈-#70h;* * * * * * * * * * * * * * * * *; 可燃气体探测报警器; 2008.5.20;* * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *; 各引脚用途及系统功能说明;p1.4 接绿灯,指示正常;p1.5 接黄灯,指示故障;p1.6 接红灯,灯光报警;p1.7 接喇叭,音乐报警;p2.0 接adc0809;p2.2 接调零开关;p2.3 接继电器,控制排气阀门;* * * * * * * * * * * * * * * * *; 主 程 序;* * * * * * * * * * * * * * * * * org 00h jmp start ;主程序入口地址 org 03h jmp into ;外中断into入口 org 0bh jmp itop ; 定时器0中断入口 org 0100hstart: mov ie,#10000001b ;int0中断使能 mov ip,#00000001b ;int0中断优先 mov tcon,#000000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论