标题: Proteus数码管0~F显数时引入外部中断,为何不能完全停止,而是以更长的周期继续运行 [打印本页]

作者: T_Trigger    时间: 2019-10-31 00:23
标题: Proteus数码管0~F显数时引入外部中断,为何不能完全停止,而是以更长的周期继续运行

小白一杖,刚接触单片机,按照郭天祥师傅的单片机教程,在proteus中仿真4位数码管显示0~F时,引入EX0=1;IT0=0;电平触发的外部中断,并点亮P1^0的LED。
仿真时发现当中断产生时,LED灯点亮,数码管是以几倍的周期继续依次显示,而并非真正的停在中断时的某一位上。
请各位大神不吝赐教,感激万分。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit beef=P2^3;
sbit d1=P1^0;
void delay(uint);
uchar num;
uchar code table[]=
        {
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71
        };

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void exter0() interrupt         0
{
        d1=0;
}

void main()
{
        EA=1;
        EX0=1;
        IT0=0;
        wela=1;    //位选择
        P0=0xf0;
        wela=0;
        while(1)
        {
                 for(num=0;num<16;num++)
                      {
                         d1=1;
                         dula=1;                 
                         P0=table[num];
                         dula=0;
                         delay(500);
                   }
        }
}



作者: wulin    时间: 2019-10-31 06:18
IT0=0;是外部低电平触发中断,按键按下,INT0始终处于触发状态,CPU没有足够时间处理主循环中任务。改IT0=1;外部下降沿触发中断,按键按下瞬间触发中断一次,持续按住无效。
作者: csmyldl    时间: 2019-10-31 08:06
把IT0=0改为IT0=1  电平触发会产生多次中断
作者: T_Trigger    时间: 2019-10-31 11:47
wulin 发表于 2019-10-31 06:18
IT0=0;是外部低电平触发中断,按键按下,INT0始终处于触发状态,CPU没有足够时间处理主循环中任务。改IT0= ...

IT0=1,是可以实现脉冲触发。
能不能解释一下,IT=1时,当我一直处于触发状态时,本应该跳出主程序,只执行触发中断中的程序,但实际情况是在我外部中断0加保持低电平时,主程序仍然在运行,只是运行周期比以前高了几倍。感激不尽……
作者: T_Trigger    时间: 2019-10-31 11:49
csmyldl 发表于 2019-10-31 08:06
把IT0=0改为IT0=1  电平触发会产生多次中断

原来如此,谢谢解答,我再多查阅一下这方面的介绍。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1