外中断优先级实验c语言
时间: 2023-07-13 20:35:31 浏览: 60
以下是一个简单的外中断优先级实验的C语言代码示例:
```c
#include <reg51.h>
// 定义中断向量地址
#define INT0_VECTOR 0x03
#define INT1_VECTOR 0x0B
// 定义全局变量,用于存储中断响应次数
volatile unsigned char int0_count = 0;
volatile unsigned char int1_count = 0;
// 定义中断服务程序
void int0_isr() interrupt INT0_VECTOR
{
int0_count++;
}
void int1_isr() interrupt INT1_VECTOR
{
int1_count++;
}
void main()
{
// 初始化外部中断0和1
IT0 = 1; // 设置INT0下降沿触发
IT1 = 0; // 设置INT1低电平触发
EX0 = 1; // 使能INT0中断
EX1 = 1; // 使能INT1中断
EA = 1; // 使能总中断
// 主循环
while(1)
{
// 检查中断响应次数,根据优先级输出信息
if(int0_count > 0)
{
printf("INT0响应了%d次\n", int0_count);
int0_count = 0;
}
else if(int1_count > 0)
{
printf("INT1响应了%d次\n", int1_count);
int1_count = 0;
}
else
{
// 无中断响应
printf("无中断响应\n");
}
// 延时一段时间,以免输出过快
for(int i = 0; i < 50000; i++);
}
}
```
这个程序使用了8051单片机的外部中断0和1,其中INT0的优先级高于INT1,即当两个中断同时发生时,INT0的中断服务程序会先执行。在主循环中,程序不断检查中断响应次数,根据优先级输出信息。需要注意的是,由于中断服务程序可能会在任何时刻运行,因此全局变量需要加上`volatile`关键字,以确保变量在多个线程中的可见性和一致性。