本讲任务:
了解中断概念,以外部中断为例讲解中断程序的编写方法。
中断的概念:
单片机处理某一事件A时,发生了另一事件B请求(中断求);单片机暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待单片机将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。
引起单片机中断的根源或原因:
中断源向单片机提出中断请求,中断发生的时刻不能事先确定。
中断优先级:
单片机的中断系统一般允许多个中断源,当几个中断源同时向单片机请求中断,要求为它服务的时候,这就存在单片机优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。单片机总是先响应优先级别最高的中断请求。
中断嵌套:
当单片机正在处理一个中断请求源的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。单片机暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。
中断优先级的三条原则:
1:单片机同时接收到几个中断时,首先响应优先级别最高的中断请求。
2:正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
3:正在进行的低优先级中断服务,能被高优先级中断请求所中断。
中断系统相关寄存器:
中断源:
8051的中断系统有5个中断源 ,2个优先级。
中断响应条件:
中断源有中断请求;
此中断源的中断允许位为1;
开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断。
一次中断过程的完整步骤:
1、中断请求:中断事件一旦发生,中断源就提交中断请求(将中断标志位置1),欲请求单片机暂时放下目前的工作转向为该中断作专项服务。
2、中断使能:虽然中断源提交了中断请求,但是,能否得到单片机的响应,还要取决于该中断请求能否通过若干关卡送达单片机(中断使能位等于1,关卡放行),这些关卡有以下两类:此中断源的中断允许位;全局中断允许位。
3、中断响应:如果一路放行,则单片机响应该中断请求,记录断点,跳转到中断服务程序。对于外部中断和定时器中断,中断响应时中断标志位会被硬件自动清零。
4、中断处理:对中断源进行有针对性的服务。
5、中断返回:返回到主程序断点处,继续执行主程序。
1、3、5由硬件自动完成。2、4是用户编程完成。中断响应条件为1、2同时满足。
中断服务程序设计:
例程:
/***********************外部中断0**************************
*单片机型号:STC89C52RC
*开发环境:KEIL
*功能:用外部中断的方式实现:按下S13,S14,S15,S16让D4和蜂鸣器点亮/发声或熄灭/不发声。
*************************************************************/
#include<reg52.h>
sbit P1_0=P1^0;
sbit BEEP=P2^3;
void int0_init(void)
{
IT0=1;
EX0=1; //打开外部中断0
EA=1;
}
void main()
{
int0_init();
P3=0x0f;
while(1);
}
void int0() interrupt 0
{
P1_0=~P1_0;
BEEP=~BEEP;
}
最后,求求看到的此文的小伙伴点赞和关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~