微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 中断系统

中断系统

时间:10-02 整理:3721RD 点击:
为什么我的中断函数执行时,主程序还在继续进行。
此程序的目的:8位数码管动态显示数字的时候,P2^0接低电平,执行中断程序(d1亮)。
问题:d1亮时,主程序继续执行。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;
sbit d1=P2^0;
uint i;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{        
        EA=1;
        EX0=1;
        IT0=0;
        while(1)
        {
                for(i=0;i<8;i++)
                {
                        switch(i)
                        {
                                case(0):c=0;b=0;a=0;break;
                                case(1):c=0;b=0;a=1;break;
                                case(2):c=0;b=1;a=0;break;
                                case(3):c=0;b=1;a=1;break;
                                case(4):c=1;b=0;a=0;break;
                                case(5):c=1;b=0;a=1;break;
                                case(6):c=1;b=1;a=0;break;
                                case(7):c=1;b=1;a=1;break;
                        }
                        P0=table[i];
                        delay(1000);
                }               
        }
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=124;y>0;y--) ;
}
void exter0() interrupt 0
{
        d1=0;
}

应该要P3.2口(INT0)接地。——>执行中断程序。

根据你所要求的效果,使用中断方式并不适合,在主程序里加一个引脚电平的判断就可以了,设定一个判断引脚,如果这个引脚位低电平,就进入一个判断该引脚是否位高电平的循环,这时数码管就不会显示了,当该引脚电平为高,则退出该循环,回到主程序,数码管就可以继续显示了。
如果使用中断方式的话,除非在中断里设置一个死循环,否则中断程序执行完就会退回到主程序的,基本无法实现你的要求。

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

网站地图

Top