您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制单片机内部中断及I/O键盘应用 正文
单片机内部中断及I/O键盘应用

单片机内部中断及I/O键盘应用

点击数:7174 次   录入时间:03-04 11:36:20   整理:http://www.55dianzi.com   电脑-单片机-自动控制

  一、原理简介
  
  所谓中断,是指CPU停止当前的工作,转而去处理中断服务程序,等待中断服务程序完成后,再返回原来工作的断点处,继续原来的工作。中断响应可以分为一下几个步骤:
  
  ①保护断点:保存程序将要执行的指令的地址,以便完成中断程序之后返回。
  
  ②寻找中断入口:根据不同的中断源产生的中断,查找对应的入口地址。
  
  ③执行中断服务程序。
  
  ④中断返回:继续执行原来未完成的程序。
  
  从以上分析可以看出,中断的实时性效果很好,可以用来处理一些紧急的情况下的事件,比如按键的输入、信号采集的一次结束、接收到一个重要的信号等等。为了更好地理解外部中断的工作原理,还是先来认识一下单片机与中断相关的几个寄存器。第一个,定时器的运行状态控制寄存器TCON如下表所示,

  高4位是定时器对应的寄存器控制位;低4位对应的是外部中断的控制位,可以位控制。
  
  ITO:外部中断0的触发方式控制位,ITO=O,设置为低电平触发方式;ITO=1,设置为负边沿触发方式。在实际应用中一般,设置成ITO=1,即边沿触发,防止因为按键的低电平造成的多次中断触发。
  
  IEO:外部中断0的请求标志位,置1有效。
  
  IT1和IE1功能与ITO和IEO相同,对应于外部中断1,不再重复介绍。

  第二个,中断允许寄存器IE如下表所示,这个寄存器在定时器讲座中也有介绍,同样可以位寻址,其中EXO对应于外部中断0的允许控制;EX1对应于外部中断l的允许控制,都是置1有效。

  根据输入方式不同,按键可以分为中断输入和I/O输入两种,中断的优先级高,在一些实时性要求比较高的的场合里经常使用,普通的I/O按键在一些实际的系统中应用的更为广泛一些,下面就介绍一下简单的I/O的按键输入原理。
  
  按键本身是机械开关,在触点闭合或断开的瞬间会出现电压抖动的现象一次按键多次启动中断。必须去除抖动的影响,才能正确识别被按下的键。在实际的项目中可以考虑用硬件电路来实现滤除这些干扰信号的目的,但往往会增加硬件成本和电路板的面积,因此,一般采用软件方法消抖。延时大约lOms左右,之后再读取引脚上的电平状态,一般情况下,一个按键按下的时候,总会在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。具体应用见程序分析。



www.55dianzi.com

  二、电路图详解
  
  电路图如下图所示。很简单,就是在单片机的外部中断O的P32管脚接了一个按键,可以做中断输入,同时PO口接了4个I/O按键,发挥用来实验I/O按键的作用。同时P30和P31管脚分别接一个LED,Pl0管脚接一个蜂鸣器,用来响应按键的执行效果。蜂鸣器采用一个三极管PNP的三极管8550控制,低电平控制蜂鸣。

断及I/O键盘原理图

  三、关键程序分析
  
  1.用中断方法控制LED

  程序详解:
  
  (1)中断服务程序人口
  
  (3)中断服务程序内容,对一个led进行取反工作
  
  (7)开启总中断的大门
  
  (8)使能外部中断0
  
  (9)设置中断的触发方式为负边沿触发
  
  (10)死循环注意这个程序中什么也没有执行,所有的操作都是中断来执行的。
  
  2.用I/O键盘控制LED及蜂鸣器

  程序详解:
  
  (14)定义按键读取函数,返回一个字节的按键值。
  
  (16)定义中间变量,暂存按键的状态。
  
  (17)定义上一次读取的按键值,作为比较使用。
  
  (18)死循环,读取按键值。
  
  (20)从PO口读取I/O按键值。
  
  (21)判断如果有按键按下。
  
  (23)延时一段时间,消除按键抖动。
  
  (24)将当前的按键值赋给上一次的中间变量。
  
  (25)死循环等待,释放按键。
  
  (27)再次读取按键值,做比较用,准备退出。
  
  (28)判断按键是否已经释放。
  
  (30)返回按键值。
  
  (34)如果没有按键按下。
  
  (36)同样返回按键,否则不会退出while循环。
  
  (39)返回按键值。

  读这个程序的时候,要注意判断按键按下以及按键释放的处理上,还有就是利用return可以跳出外层的while循环,这一点在很多的地方都可以用到。鉴于篇幅关系,其他子程序省略,具体参见套件附件中源程序。
  
  四、调试过程及要点
  
  首先,连接好硬件设备,将开发板通过串口线连接到电脑端,接好USB电源线或者直流SV电源线。之后打开下载软件,选择生成的“INT.hex”文件,进行下载(注意冷启动,先点击下载,之后再给单片机系统上电)。程序下载之后,可以通过轻按INT中断按键,进行观测现象,触发一次P30端口对应的LED应该改变一次状态:亮一灭一亮一灭。之后下载“10键盘应用.hex”文件。分别按下Sl到S4按键,对应的现象应该是:
  
  按下Sl,D30亮;按下S2,D31亮;按下S3,蜂鸣器长响;按下S4,D30和D31灭,蜂鸣器停响。
  
  注意比较二者在程序上的处理异同点。实验效果略,具体步骤自己操作,如果针对本实验有问题,可以到网站论坛提问。
  
 在利用C51编写单片机程序时,如果需要使用中断资源,要注意尽量减少中断服务程序的内容和长度,因为在主程序中可能还需要相应其他的中断或者重要的事件。如果一个中断服务程序过长,很可能会影响到主程序对外部信号的检测和响应。合理利用单片机的中断资源,能够增加单片机系统的稳定性、实时性,同时使程序更加健壮。




本文关键字:单片机  键盘  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制