中断是什么
中断:外部设备向中央处理器发起请求事件,令执行中的正常程序被打断,转而执行另一段特定程序以完成外部设备发出的请求事件。
中断优先级是什么
中断优先级:中断优先级就是外部设备向中央处理器发起多个请求事件后先执行哪一条请求再执行哪一条请求。
通俗理解:当你看电视的时候突然想起了今天早上没刷牙同时你又急着上厕所,于是你去上了厕所,上了厕所以后又去刷了牙😜,完成这些后又回去看了电视。那么看电视的行为就是正常程序,而你上厕所和刷牙的行为就是中断程序,并且你上厕所比刷牙提前了,所以你上厕所的中断优先级高过你刷牙的中断优先级
51单片机中断系统:
中断源 | 中断优先级(从上往下由高到低) | 中断号 |
---|---|---|
外部中断INT 0 | 最高 | 0 |
定时器/计数器 T0 溢出中断 | … | 1 |
外部中断INT1 | … | 2 |
定时器/计数器 T1溢出中断 | … | 3 |
串行口中断 | … | 4 |
定时器/计数器 T2中断 | 最低 | 5 |
51单片机中断系统结构:
中断系统结构图:
中断服务编写格式
注意事项:
- 中断函数没有/不能有返回值,建议将函数定义为void类型以申明无返回值
- 中断函数不能进行参数的传递
- 不能直接调用中断函数
- 若在中断函数中再调用其他函数,被调用的函数必须和中断函数的寄存器区不同
void 函数名() interrupt 中断号 using 选择工作寄存器区
{
函数体(函数内容)
}
使用
- 中断程序讲究快进快出,中断程序尽量简洁,繁琐的程序尽量放在中断程序外部。
以下代码无关紧要:个人重温使用
CT107D板子上面将J5的跳帽接到2—3引脚(BTN那端),在原理图中理解为,S5按钮接P32/INT0,将S4按钮接P33/INT1。当按下S5时就会产生外部中断信号
#include <reg52.h>
sbit L1=P0^0;
sbit L8=P0^7;
sbit buzz=P0^6;
void delay(unsigned int t){
while(t--);
}
void selecthc573(){
P2=(P2&0x1f)|0x80;
}
void buzoff(){
P2 = (P2&0x1f)|0xa0;
buzz=0;
}
void working(){
selecthc573();
L1 = 0;
delay(60000);
L1 = 1;
delay(60000);
}
//-------------------中断函数
void init0(){
IT0=1;//下降沿触发
EX0=1;//中断源使能端打开。中断源使能端也叫中断源允许。
EA=1; //总中断允许
}
unsigned char stat_int=0;//外部中断状态
void serint0() interrupt 0{
stat_int=1;
}
void ledint(){
if(stat_int == 1){
L8=0;
delay(60000);
delay(60000);
delay(60000);
L8=1;
}
stat_int = 0; //中断状态执行完中断程序后重置为0
}
//----------
void main(){
buzoff();
init0();
while(1){
ledint();
working();
}
}