单片机 实现报警检测.docx
《单片机 实现报警检测.docx》由会员分享,可在线阅读,更多相关《单片机 实现报警检测.docx(13页珍藏版)》请在冰豆网上搜索。
单片机实现报警检测
151系列单片机简介及题目分析
1.151系列单片机简介
1.1.1时钟电路
8XX51单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。
晶振通常选用6MHZ、12MHZ或24MHZ。
内部振荡方式如图1-1所示。
图中,电容器C1、C2起稳定振荡频率、快速起振的作用。
电容值一般为5-30pF。
内部振荡方式所得到的时钟信号比较稳定,实用电路中使用较多。
图1-1内部震荡方式
外部振荡方式是把已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟与外部信号保持一致。
外部振荡方式如图1-2所示。
图1-2外部振荡方式
1.1.2单片机的时序单位
振荡周期:
晶振的振荡周期,又称时钟周期,为最小的时序单位。
状态周期:
振荡频率经过单片机内的二分频器分频后提供给片内CPU的时钟周期。
因此,一个状态周期包含2个振荡周期。
机器周期:
1个机器周期由6个状态周期即12个振荡周期组成,是计算机执行一种基本操作的时间单位。
指令周期:
执行一条指令所需的时间,一个指令周期由1-4个机器周期组成,依据指令不同而不同。
以上4种时序单位中,振荡周期和机器周期是单片机内计算其他时间(如波特率、定时器的定时时间等)的基本时序单位。
1.1.3复位电路
复位操作完成单片机内电路的初始化,使单片机从一种确定的状态开始运行。
当8XX51单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位操作。
如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。
因此要求单片机复位后能脱离复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电复位、开关复位。
上电复位要求接通电源后,自动实现复位操作。
开关复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。
常用的上电且开关复位电路如图1-3所示。
上电后,由于电容充电,使RST持续一段时间高电平。
当单片机已经在运行之中时,按下复位键也能使RST持续一段时间高电平,从而实现上电且开关复位的操作。
通常选择C=10-30uF,R=10kΩ。
如果上述电路复位不仅要使单片机复位,而且还要使单片机的一些外围芯片也同时复位,那么上述电阻电容参考值应适当调整少许。
图1-3复位电路
1.2题目分析及中断原理和引用
再分析题目,第一个小题中,两个不同频率的驱动信号可分别由两个16位的定时器产生,驱动的外围电路可以是蜂鸣器,扬声器等发音器件;第二个小题中,可由外部中断引脚接一个开关,从而产生外部中断。
80C51单片机中涉及中断控制的有3个方面4个特殊功能寄存器:
①中断请求:
定时和外中断控制寄存器TCON;
串行控制寄存器SCON;
②中断允许控制寄存器IE;
③中断优先级控制寄存器IP。
80C51外部中断源有2种触方式,即电平触发和脉冲触发。
当外部中断源为电平触发时,低电平有效。
CPU采样到
引脚为低电平时,就认为是外中断0的一个有效的中断请求信号。
当外部中断源以脉冲方式触时,负脉冲有效。
CPU在一个机器周期采样到
引脚为高电平,在接下来的一个机器周期采样到
引脚是低电平,即出现了下降沿的跳变时,就认为是外中断0的一个有效的中断请求信号。
因为2次检测的间隔时间都至少维持一个机器周期,从而保证CPU能够检测到电平的跳变。
对外部中断的控制主要有:
1)外部中断的开放或禁止;2)触发电平方式;3)优先级别的选择。
这些控制机构分别位于IE、TCON和IP等3个专用寄存器中。
合理编写程序是实现对中断控制的最基本方法,外部中断标志的编程方式有中断方式和查询方式。
中断方式是指CPU在接收到外部中断请求时,暂时停止主程序的执行,转去处理相关的服务程序,之后再返回继续运行原程序。
中断方式下的编程一般有如下步骤:
1)开中断;2)设置中断优先级;3)中断源的相关控制;4)编写中断服务程序。
查询方式就是CPU主动地监测中断源的状态并做出相应反应。
其编程步骤如下:
1)关中断;2)中断源的相关设置;3)关中断查询及相关处理。
2种方式的特点是:
在中断方式下,CPU除了响应中断之外的时间都用于执行主程序,中断源与CPU实现了并行工作。
而在查询方式下,除初始化工作外,CPU完全用于处理中断标志的查询及中断标志有效后的处理,中断一直占用着CPU的时间,并没有处于并行工作状态。
2系统电路图设计和仿真
2.1系统电路图
系统电路图如图2-1所示
图2-1系统电路
图中,核心芯片是proteus提供的89C51,在其基础上搭好最小系统,包括晶振电路,复位系统。
对于第一个小题,整个系统是这样的:
由P1.0引脚来控制扬声器的发声,而P1.0又要受到SW1开关的控制,即当开关合上时,P1.7会产生一个低电平信号,然后使得P1.0开始产生两种不同频率的方波来驱动扬声器,从而发出报警信号;当SW1断开时,将定时器关闭,同时给P1.0一个低电平,报警声随即消失。
对于第二个小题,只需通过P3.2引脚接入一个开关,然后设置为低电平下降沿触发,通过P3.2的信号来控制P1.0的输出,从而发出报警信号。
2.2系统仿真
在P1.0处接入示波器,第一个题目,合上开关SW1,在报警的同时,观测P1.0输出信号的波形,如图3-2所示
图2-2仿真结果1
从仿真结果可以看出来,P1.0处的输出是由两种不同频率的方波构成的,一个是500HZ,一个是1KHZ,从而使得扬声器发出交替音调报警声音。
第二个题目,合上开关SW2,在报警的同时,观测P1.0输出信号的波形,如图3-3所示
图2-3仿真结果2
由结果可以看到,输出的是1KHZ的方波,扬声器发出持续的一个音调的报警。
3相关程序及分析
3.1题目一汇编程序
ORG0000H
CLRA
BEG:
SETBP1.7
JBP1.7,$
MOVR2,#200
DV:
CPLP1.0
CJNEA,#0FFH,N1
ACALLD500
N1:
ACALLD500
DJNZR2,DV
CPLA
SJMPBEG
D500:
MOVR7,#250
DJNZR7,$
RET
END
3.2题目一C程序
#include
sbitfb=P1^0;
sbitsw=P1^7;
#defineuintunsignedint;
uinti,w;
voidT0_irq(void)interrupt1using1
{
TH0=(65035/256);//定时0.5MS,即频率1KHZ
TL0=(65035%256);
fb=~fb;
}
voidT1_irq(void)interrupt3using3
{
TH1=(64535)/256;//定时1MS,即频率500HZ
TL1=(64535)%256;
fb=~fb;
}
voiddelay(unsignedintw)//延时1MS
{
uinti;
while(w--)
for(i=0;i<125;i++);
}
voidmain()
{
TMOD=0x01;
TH0=(65035/256);//定时0.5MS,即频率1KHZ
TL0=(65035%256);
TH1=(64535-50000)/256;//定时1MS,即频率500HZ
TL1=(64535-50000)%256;
EA=1;
ET0=1;
ET1=1;
while(sw==0)
{
TR0=1;
delay(100);
TR0=0;
TR1=1;
delay(200);
TR1=0;
}
while(sw==1)
{
TR0=0;
TR1=0;
fb=1;
}
}
此程序主要用51的两个定时器,其中,T0用来产生频率为1KHZ的信号,T1用来产生频率为500HZ的信号。
定时器装初值的方法为:
以时钟频率为12M为例,那么一个机器周期大约为1us,对于16位的定时器,若从0开始计数,则计65535us时,会溢出产生中断。
所以假如要定时50ms,就应该装入初值为(65535-50000),从而使计数器计数50000us溢出,即为50ms。
3.3题目二C程序
#include
#include
#defineuintunsignedint;
sbitfb=P1^0;
sbitcx=P3^2;
uintflag,i,w;
voiddelay(unsignedintw)//延时1MS
{
uinti=0;
while(w--)
for(i=0;i<125;i++);
}
voidT0_irq(void)interrupt1using1
{
TH0=(65035/256);//定时0.5MS,即频率1KHZ
TL0=(65035%256);
fb=~fb;
}
voidcounter0(void)interrupt0
{
EX0=0;
delay(5);
EX0=1;
TMOD=0x01;
TH0=(65035/256);//定时0.5S,即频率
TL0=(65035%256);
ET0=1;
TR0=1;
flag=1;
}
voidmain()
{
IT0=1;//下降沿触发
EX0=1;
EA=1;
while
(1)
{
if(cx==1)
{
fb=0;
TR0=0;
}
}
}
此程序主要用到了外部中断0。
在使用前应对外部中断的触发方式进行设定,有下降沿和低电平两种触发形式。
然后打开总中断,打开外部中断即可。
设计程序需要注意的地方是:
类似于键盘的消抖,外部中断的产生与撤销也要进行延时消抖,体现在中断函数里的delay。
4心得体会
本次课程设计用Protues软件仿真及keil软件来实现报警信号的检测与告警提示。
通过这次设计,掌握了简单报警器的工作原理及工作过程,学会了使用keil软件来在单片机中加载入程序,并学会通过keil软件来检验汇编程序的正确性,对以后的学习和工作都起到了一定的作用,加强了动手能力和学业技能。
在实习的过程中检验了以前学的通信系统的知识掌握度,使我更加熟悉了汇编语言的编写。
设计是我们将来必需的技能,这次设计恰恰给我们提供了一个应用自己所学知识的机会,在摸索该如何设计电路使之实现所需功能的过程中,特别有趣,培养了我的设计思维,增加了实际操作能力。
参考文献
[1]孙燕莲,韩巍.文福安构建仿真实验系统关键技术的研究,实验技术与管理,2005
[2]马正强.单片机虚拟实验室的建立,单片机与嵌人式系统应用,2005.
[3]代启化.基于Ptoteus的电路设计与仿真,自动化技术,2006.
[4]降学礼.基于Ptoteus软件的单片机实验室建设,单片机与嵌入式系统应用,2005.
[5]夏继强,沈德金.单片机实验与实践教程,北京:
北京航空航天大学出版社,2001.