微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大家来看看我这个自己理解的中断嵌套程序

大家来看看我这个自己理解的中断嵌套程序

时间:10-02 整理:3721RD 点击:
//////主函数,让led灯依次闪烁/////
/////外部中断1打断主函数,执行数码管动态扫描////
/////又一个外部中断嵌套,让led亮/////
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar temp=0xfe;
void delay50ms(uint i)
{
        uint j;
        for(;i>0;i--)
        for(j=6245;j>0;j--);
}
void inter1()
{
        EX1=1;
        EA=1;
        IT0=0;
}
void main()
{
        inter1();
        while(1)
        {
                P2=temp;
                delay50ms(20);
                temp=_crol_(temp,1);
        }
}
void INT() interrupt 2
{
        uchar i;
        for(i=0;i<8;i++)                    //////////为什么体现不了实时性,得数码管走到尽头才能触发中断?    应该怎么改?
        {
        P1=we;
        P0=du;
        delay50ms(20);
        }
        EX0=1;
        IT0=0;
}
void INTR() interrupt 0
{
        P2=0x00;
}
我自己理解的中断嵌套是把更高级的外部中断0的开关放在外部中断1的函数体内!不知,这样理解是否正确?
大家看看我这个程序,为什么体现不了实时性,进行二级嵌套时,必须要数码管走到7才能触发更高级的中断,为什么不能就停在那里,触发中断

中断嵌套是,正在执行低优先级的中断服务时,高优先级中断被激活且使能中断才会跳至先执行高优先级的中断服务,执行完后回到低优先级中断服务断点的位置继续往下执行。

没怎么理解,,小编,求赐教啊

中断优先级是通过设置中断优先级控制寄存器来实现的,而不是像你所说的把中断开关放在函数体内

void INT() interrupt 2
{
        uchar i;
        for(i=0;i<8;i++)                    //////////为什么体现不了实时性,得数码管走到尽头才能触发中断?    应该怎么改?
        {
        P1=we;
        P0=du;
        delay50ms(20);
        }
        EX0=1;
        IT0=0;
}
你在之前没有打开更高优先级中断的使能位,当你触发了中断后,中断标志位置1,也不会进入中断服务,当你上面这个函数的for循环结束后,EX0=1,使能了INT0的中断,之前因为标志位已经置1没有进入中断前是不会自动清除标志的,所以,开启了使能后即进入了高优先级中断。
若你在main开始执行的时候就使能了高优先级中断,则能立即中断嵌套操作。

ok  受助了,我也明白了一点

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top