用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);//死循环
}

猜你喜欢

转载自blog.csdn.net/qq_37131037/article/details/82987129