用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级,外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。

本文介绍如何使用C语言在51单片机上设置外部中断INT0和INT1,实现嵌套中断功能,通过下降沿触发并具有按键消抖处理。详细展示了中断优先级配置、触发方式设置及中断服务程序的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

用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);//死循环
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值