用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级,外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。
问题
用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级,外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。
要求:中断触发方式为下降沿触发,按键有消抖功能
仿真
代码
#include <reg51.h>
#define uchar unsigned char
void delay(uchar c) { //延时c毫秒
uchar a, b;
for (; c > 0; c--)
for (b = 142; b > 0; b--)
for (a = 2; a > 0; a--);
}
void INT_0() interrupt 0 { //外部中断0
EX0=0; //关闭外部中断0,防止在执行过程中再次发生中断
delay(20); //消除抖动
EX0=1; //打开外部中断0
while(1) { //led向下循环点亮,表示正在执行外部中断0服务程序
P1 = 0xfe; delay(200);
P1 = 0xfd; delay(200);
P1 = 0xfb; delay(200);
P1 = 0xf7; delay(200);
P1 = 0xef; delay(200);
P1 = 0xdf; delay(200);
P1 = 0xbf; delay(200);
P1 = 0x7f; delay(200);
}
}
void INT_1() interrupt 2 { //ÍⲿÖжÏ1
EX1=0;
delay(20);
EX1=1;
P1 = 0x00; delay(200); //led全部点亮,闪烁3次,表示正在执行外部中1服务程序
P1 = 0xFF; delay(200);
P1 = 0x00; delay(200);
P1 = 0xFF; delay(200);
P1 = 0x00; delay(200);
}
void main() {
P1 = 0xFF;
EA = 1; //打开总中断
EX0 = 1; //打开外部中断0
IP = 0x04; //设置外部中断1为高级优先级
IT0 = 1; //设置触发方式为下降沿触发
EX1 = 1; //打开外部中断1
IT1 = 1;
while(1);//死循环
}