单片机应用技术

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《单片机应用技术》项目4报警产生器泸州职业技术学院机电工程系《单片机应用技术》精品课程组本讲主要内容4相关知识1教学目标2工作任务3项目实践5项目考核1、终极目标:制作一个单片机控制的报警产生器。2、促成目标:(1)理解中断的基本概念;(2)理解MCS-51中断系统的结构和特点;(3)掌握中断系统的处理过程和使用方法;(4)掌握中断控制的程序设计方法;【教学目标】单片机的P3.3口线连接按钮开关SB进行控制,当开关按下时,产生外部1中断,蜂鸣器响报警信号:由P3.5口线输出1KHz和500Hz的音频信号驱动蜂鸣器作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行。【工作任务】【活动一】总体设计本系统功能由硬件和软件两大部份协调完成,硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。【项目实践】本系统的硬件采用模块化设计,以AT89S52单片机为核心,与按键接口电路、音频报警电路组成控制系统。该系统硬件主要包括以下几个模块:AT89S52主控模块、按键模块、音频报警模块等。其中AT89S52主要完成外围硬件的控制以及一些运算功能;按键模块主要外部中断功能;音频报警模块主要完成报警音频信号的输出。系统组成方框图如图4.1所示。【项目实践】单片机复位电路时钟电路电源电路图4.1报警产生器系统组成方框图【项目实践】按键电路音频报警电路应用软件采用模块化设计方法。系统软件主要由主程序、外部中断1子程序、延时子程序等模块组成,系统软件结构框图如图4.2所示。外部中断1服务子程序主程序延时子程序图4.2系统软件结构框图【项目实践】【活动二】硬件设计1.主控模块设计本项目采用ATMEL公司生产的AT89S52单片机,主控模块的具体设计参见项目1。2.按键模块设计一般的按键从实物来看,是一个四端口器件,但是其实它是一个二端口器件。图4.3按键实物图【项目实践】在按下塑料柱子之前,两个触点之间是不导通的,按下的时候就导通,提供外部电路的不同接法,就可以使其中一个端口在按下和不按下的时候产生电平变化,而单片机正是通过检测这种变化来完成对按键输入信息的获得。按键SB的一端接地VSS,另一端接P3口的P3.3(INT1,外部中断1请求输入端),如图4.3所示。P3口内部又上拉电阻,所以在按键SB按下之前,端口P3.3保持在高电平;当按键SB按下时,端口P3.3通过按键SB接到VSS,这个时候就是低电平。所以通过检测端口的状态变化,可以判断按键是否按下。【项目实践】3.音频报警模块设计蜂鸣器的作用蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。①压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。【项目实践】②电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。本项目中,选用无源电磁式蜂鸣器来实现报警发声。图4.4蜂鸣器实物图和三极管C8550实物图【项目实践】蜂鸣器和普通扬声器相比,最重要的一个特点是,只要按照极性要求加上合适的直流电压,就可以发出固有频率的声音。电磁式蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机I/O引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。单片机通过一个三极管C8550放大电流来驱动蜂鸣器,电路图如图4.3所示。如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.5引脚控制,当P3.5输出高电平时,三极管C8550截止,没有电流流过线圈,蜂鸣器不发声;当P3.5输出低电平时,三极管C8550导通,这样蜂鸣器的电流形成回路,发出声音。因此,可以通过程序控制P3.5脚的电平来使蜂鸣器发出声音和关闭。【项目实践】图4.5报警产生器与单片机的接口电路原理图【项目实践】1.算法设计当按键SB未按下时,P3.3口线(INT1,外部中断1请求输入端)为高电平;当按键SB按下时,P3.3口线为低电平;单片机在相继的两个周期采样过程中,一个机器周期采样到该引脚为高电平,接着的下一个机器周期采样到该引脚为低电平时,则使外部中断1中断请求标志IE1置1,产生中断。改变单片机P3.5引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变P3.5输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。【活动三】软件设计【项目实践】在中断服务程序中,调用延时子程序并对P3.5引脚取反来实现特定频率的报警音频信号的产生。报警音频信号产生的方法:500Hz信号的周期为1/500Hz=2ms,信号电平为每2ms/2=1ms取反1次;1KHz的信号周期为1/1KHz=1ms,信号电平每1ms/2=500us取反1次。1ms正好为500us的2倍,可以利用延时500us的延时子程序来实现延时,1ms正好调用2次延时子程序。【项目实践】2.数据结构设计P3.3口线用于控制按钮开关SB;P3.5口线用于输出1KHz和500Hz的音频信号驱动蜂鸣器作报警信号;工作寄存器R2为计数次数。3.程序设计(1)主程序设计主程序主要完成对外部中断1进行初始化,对相关的特殊功能寄存器进行初始化设置。堆栈指针初始化,栈底设置为60H。开放总中断,设置EA位。允许/INT1外部中断:设置EX1位。设置IT1位使外部中断源/INT1工作于边沿触发方式下。【项目实践】外部中断/INT1对应的外部中断源是/INT1引脚即P3.3,当外部中断1允许且为边沿触发方式时,只要在P3.2引脚上出现负的下降沿时,外部中断1的标志位IE1被置位,CPU将在下一个机器周期的S1状态时响应该中断。主程序设计流程图如图4.6所示。【项目实践】堆栈指针初始化开始设置外部中断1的触发信号类型:边缘触发方式开放总中断允许外部中断1中断等待外部中断1图4.6主程序设计流程图【项目实践】(2)中断服务程序模设计CPU响应了外部中断1的中断请求后转至中断服务程序执行。其主要功能就是将P3.5的值取反、延时,再取反、再延时;从而实现P3.5口线交替输出1KHz和500Hz的音频信号驱动蜂鸣器报警。中断服务程序设计流程图如图4.7所示。【项目实践】【项目实践】图4.7中断服务程序流程图(3)延时子程序设计延时子程序模块设计请参考项目1。【项目实践】4.汇编语言源程序;*************************************************************;项目名称:报警产生器;功能:利用外部中断1,产生1KHz和500Hz的音频报警信号;作者::日期:;*************************************************************ORG0000HAJMPMAINORG0013HAJMPINT_1;*************************************************************;功能:主程序;*************************************************************ORG0100HMAIN:MOVSP,#60H;堆栈指针初始化SETBIT1;边缘触发方式【项目实践】SETBEA;打开中断总开关SETBEX1;外部中断1允许控制位SJMP$;等待外部1中断;*****************************************************************;功能:外部中断1服务子程序;*****************************************************************ORG0200HINT_1:MOVP3.5,#00HSTART:MOVR2,#200DV1:CPLP3.5;输出500Hz音频信号LCALLDELY500usLCALLDELY500usDJNZR2,DV1【项目实践】MOVR2,#200DV2:CPLP3.5;输出1KHz的音频信号LCALLDELY500usDJNZR2,DV2RETI******************************************;功能:延时子程序(延时500us);******************************************DELY500us:MOVR7,#250LOOP:NOPDJNZR7,LOOPRETEND【项目实践】5.C语言源程序/***********************************************************///项目名称:报警产生器//功能://作者://日期:/***********************************************************/#includeAT89X51.H//包含头文件#includeINTRINS.Hbitflag;unsignedcharcount;【项目实践】/***********************************************************///功能:主程序/************************************************************/voidmain(void){SP=0x60;//堆栈指针初始化IT1=1;//边缘触发方式EA=1;//打开中断总开关EX1=1;//初始化外部中断1标志位While(1);//等待外部1中断}【项目实践】/**********************************************************///功能:延时子程序/***********************************************************/voiddely500(void){unsignedchari;for(i=250;i0;i--){_nop_();}}/**************************************************************///功能:外部中断1服务子程序//中断编号:2/**************************************************************/【项目实践】voidintersvr1(void)interrupt2using1{P3^5=0;P3_5=~P3_5;for(count=200;count0;count--){P3_5=~P3_5;dely500();}for(count=200;count0;count--){P3_5=~P3_5;dely500();dely500();}}【项目实践】【第一部分】中断系统中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原来程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被中止的原程序的过程。采用了中断技术后的计算机,可以解

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功