单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 191|回复: 4
打印 上一主题 下一主题
收起左侧

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);
                   }
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
来自 3#
csmyldl 发表于 2019-10-31 08:06 | 只看该作者
把IT0=0改为IT0=1  电平触发会产生多次中断
沙发
wulin 发表于 2019-10-31 06:18 | 只看该作者
IT0=0;是外部低电平触发中断,按键按下,INT0始终处于触发状态,CPU没有足够时间处理主循环中任务。改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加保持低电平时,主程序仍然在运行,只是运行周期比以前高了几倍。感激不尽……
5#
 楼主| T_Trigger 发表于 2019-10-31 11:49 | 只看该作者
csmyldl 发表于 2019-10-31 08:06
把IT0=0改为IT0=1  电平触发会产生多次中断

原来如此,谢谢解答,我再多查阅一下这方面的介绍。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表