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

2019-07-15 23:19发布

//////主函数,让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才能触发更高级的中断,为什么不能就停在那里,触发中断

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
dongyumin
1楼-- · 2019-07-16 04:10
 精彩回答 2  元偷偷看……
学单片机的人
2楼-- · 2019-07-16 05:54
dongyumin 发表于 2013-8-3 18:24
中断嵌套是,正在执行低优先级的中断服务时,高优先级中断被激活且使能中断才会跳至先执行高优先级的中断服 ...

没怎么理解,,版主,求赐教啊
liwenbiao
3楼-- · 2019-07-16 08:15
中断优先级是通过设置中断优先级控制寄存器来实现的,而不是像你所说的把中断开关放在函数体内
倾国倾国
4楼-- · 2019-07-16 09:53
{:1:}{:1:}
dongyumin
5楼-- · 2019-07-16 11:59
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开始执行的时候就使能了高优先级中断,则能立即中断嵌套操作。
卍_☆_卍
6楼-- · 2019-07-16 17:43
ok  受助了,我也明白了一点

一周热门 更多>