51单片机外部中断0实例详解
今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法。
1 51单片机的中断源51单片机共有5个中断源,分别为:
外部中断0
定时器0中断
外部中断1
定时器1中断
串口中断
每一个中断都对应一个中断向量,中断向量表如下所示:
2 什么是中断事件
当中断发生时单片机将正在执行的程序暂时放下而去处理中断事件,当中断事件处理完毕后再接着去处理之前的事情,这样可以大大降低单片机的资源,提高执行效率。举个例子说明一下什么是中断:
我很喜欢打CS,每天晚上我都会抽时间打CS,但同时厨房里正在烧水,为了不使水烧干,我每隔5分钟就去厨房看一下水有没开,但这就错过了游戏老被别人爆头干掉,我很苦恼,怎么办。于是我在网上买了一个水烧开就会叫的水壶,这样我就不用每隔5分钟去厨房了从而可以专心的打游戏,只有听到水壶吱吱叫的时候,我去把水倒出来就可以了。
在这个例子里,打游戏就是主任务,水烧开就是中断,吱吱叫就是中断向量,听到吱吱响我就明白水烧开了,这时我要把打游戏这个主任务暂时放下,转而去处理水烧开了这个中断事件,水倒完后我就又回到了游戏这个主任务中。这样是不是提高了打游戏的效率呢?
3 中断的硬件实现
51单片机的外部中断0引脚接一只按键,该按键通过上拉电阻接到电源,即没有按键发生时单片机检测到的是高电平,当按键按下时单片机检测到的是低电平。单片机的P0.0引脚以灌电流的方式接了一只LED,当按键按下时LED灯点亮,没按键时LED灯熄灭。
4 中断的软件实现
单片机中断函数的写法比较固定,51单片机中断函数的写法如下:
void Initd() interrupt 0
其中:
void:为中断函数的返回类型,中断函数多为空类型;
Initd():是中断函数的名称,这个函数名符合C语言函数命名规范就可以,随便起;
interrupt:为51单片机中断的关键字,必须这么写(51单片机必须这么写);
0:为中断向量,该值详看第一个表格,如果是外部中断1就写2,如果是定时器1中断就写3;
中断函数不用在主函数中调用,只要中断事件发生,单片机自己主动会调到中断函数中。
该例子的函数如下所示:
5 仿真实现
当按键发生时,LED灯点亮,如下图所示。注意对比两种图中按键的状态 。
本订阅号致力于单片机、ARM等嵌入式软硬件的设计经验分享,秉承“人人都是电子设计经验的分享者”的理念,成功路上不孤单,我们一起努力。公众号:micropoint8,对于本节内容欢迎大家讨论。
51单片机外部中断的总结
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。
这个原理很好理解。但应用时需要特别注意的几点:
1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。
2)边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。
3)中断标志可以手工清除。一个中断如果在没有得到响应之前就已经被手工清除,则该中断将被CPU忽略。就如同没有发生一样。
4)选择电平触发还是边沿触发方式应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。比如,有的书上说(《Keil C51使用技巧及实战》),就有类似的观点。
相关问答
51 单片机外部中断 的工作过程?外部信号触发外部硬件中断,现场保护,数据进栈保存,pc指针跳至中断服务程序入口处,外部信号触发外部硬件中断,现场保护,数据进栈保存,pc指针跳至中断服务程序...
什么是 单片机 的 中断 ?单片机中断是指CPU在正常执行程序的过程中,由于计算机内部或外部发生了另一事件(如定时时间到,超压报警等),请求CPU迅速去处理,CPU暂时停止当前程序的运行,...
为何51 单片机 的 外部中断 0没有按下按键就会自动进入?-ZOL问答这样就OK了,因为你在外部中断产生时去停止定时器0的计时,但在主程序内却不断的使TR0=1.所以外部中断过後又自动计时了有用(0)回复第一个问题:你干嘛都用用长...
为什么51 单片机 的 外部中断 0没有按下按键就会自动进入?这是不可能的,不是程序有问题就是电路有问题。你先自己检查,自己不能解决就贴程序代码和电路图,帮你分析。这是不可能的,不是程序有问题就是电路有问题。你...
单片机中断 是怎么回事?单片机中断是指CPU在正常执行程序的过程中,由于计算机内部或外部发生了另一事件(如定时时间到,超压报警等),请求CPU迅速去处理,CPU暂时停止当前程序的运行,...
51 单片机 ,c语言,为什么写2个 外部中断 程序,就会有一个不工作呢?不是同时按的,不用考虑优先级?首先两个中断是否都打开了,也就是EX0、EX1是否都等于1;另外看看触发方式:IT0、IT1是什么置;再看看你是否真的触发了,硬件上确认没有问题?第四,你将两个...
在使用8051 单片机外部中断 源--外部中断0,应对它进行初始化,其主要步骤是什么?1.设置外部中断的触发方式,下降沿或低电平2.开外部中断03.开总中断1.设置外部中断的触发方式,下降沿或低电平2.开外部中断03.开总中断
8051 单片机外部中断 ,有哪些激活方式?有两种方式:下降沿触发方式和低电平触发方式80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL)、...
89C51 单片机 的 中断 系统共有几个 中断 源?89C51单片机的中断系统共有5个中断源。这些中断源分别是外部中断0(INT0)和1(INT1),定时器/计数器0(T0)和1(T1)溢出中断以及串行通信口中断(RI/TI)。IN...89C5.....
stm32 单片机 如何实现在 外部中断 函数?一个间的外部中断程序控制LED亮灭首先,我们要了解中断是怎么执行的,打个比方,现在小明在家看电视,这时卧室里的电话响了,听到电话响的小明就暂停电视跑去卧...