这是回复题主的代码,目的是观察各中断及返回用的,可以借鉴理解中断的作用,我实践是不会这样写的.
- #include <REG52.H>
- #include "intrins.h"
- #define uchar unsigned char
- bit K1=0,K2=0;//标记逻辑组合可以替代中断优先
- void Delay(unsigned int i)//延时函数
- {
- unsigned int j;
- for(;i>0;i--)
- for(j=0;j<125;j++)
- {;}//空函数
- }
- void main()//主函数https://ask.csdn.net/questions/8011758
- {
- unsigned char display [9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯显示数据数组
- unsigned char a;
- EA=1;//总中断允许
- EX0=1;//允许外部中断0中断
- EX1=1;//允许外部中断1中断
- IT0=1;//选择外部中断0为跳沿触发方式
- IT1=1;//选择外部中断1为跳沿触发方式
- PX0=0;//外部中断0为低优先级
- PX1=1;//外部中断1为高优先级
- for(;;)
- {
- for(a=0;a<9;a++)
- {
- Delay(400);//延时,切换会延时阻塞设定时间
- P1=display[a];//已定义的流水灯显示数据送到P1口
- }
- }
- }
- void int0_isr() interrupt 0 //删除using 0否则无法返回主函数外中断0的中断服务函数
- {
- unsigned char m=0;
- for(m=0;m<10;m++)//标号为偶数的LED和奇数LED交替闪烁10次
- {
- P1=0x55;//标号为偶数的LED灯点亮
- Delay(500);//延时
- P1=0xaa;//标号为奇数的LED灯点亮
- Delay(500);//延时
- }
- }
- void int1_isr() interrupt 2 //using 1外中断1的中断服务函数,体现了中断优先和返回
- {
- unsigned char n=0;
- for(n=0;n<5;n++)//8位LED全亮全灭5次
- {
- P1=0;//8位LED全亮
- Delay(500);//延时
- P1=0xff;//8位LED全灭
- Delay(500);//延时
- }
- }
复制代码
|