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