《单片机中断嵌套小练习》用最简洁的方式学会中断嵌套。

Isoke ·
更新时间:2024-09-20
· 623 次阅读

外部中断是单片机一个比较重要的部分,这次,用最简单的方法让你去实现中断嵌套的功能,通过下面这个小实验,相信你对中断的认识会更加的深刻。如果还对中断这方面不太了解的话,请看这篇文章。
链接: 单片机的外部中断link.

功能要求: 主程序功能:led灯灭,八位共阴数码管熄灭。 功能:利用按键K1,K2触发中断,K1触发使led闪烁8次。K2触发,数码管显示0~F。 要求:K2优先级高于K1,通过Keil和Proteus进行仿真和调试。

数码管的段位编码。

共阳极数码管编码表:
unsigned char shumaguan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

共阴极数码管编码表:

unsigned char shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

1.Proteus仿真图

在这里插入图片描述

2.程序的编写 #include"reg51.h" sbit led=P0^0; unsigned char shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delayms(unsigned int ms); void Init(); void main() { Init(); P2=0x00;//熄灭数码管 led=1;//熄灭led while(1); } void Init()//外部中断初始化 { IT0=1;//选择跳沿触发方式 EX0=1;//打开外部中断0允许位 IT1=1;//选择跳沿触发方式 EX1=1;//打开外部中断1允许位 EA=1;//打开总中断 IP=0X04;//设置外部中断1的优先级大于外部中断0 } void Int0() interrupt 0 using 0//外部中断0的执行程序。 { unsigned char i; delayms(5); if(P3^2==0) { for(i=0;i<16;i++)//实现led闪烁八次。 { led=~led; delayms(1000); } } } void Int1() interrupt 2 using 1//外部中断1的执行程序。 { unsigned char i; delayms(5); if(P3^3==0) { for(i=0;i0;i--) for(j=100;j>0;j--); }

♥功能测试:当led闪烁的时候,按下K2键,实现了数码管的显示。说明K2键对应的中断优先级要大于K1键对应的中断优先级。从而能够打断led的闪烁。



中断 嵌套 单片机

需要 登录 后方可回复, 如果你还没有账号请 注册新账号