中断系统和延时程序有关吗?
我是一个初学者,刚学C51中断系统,想问问为啥我编写了一个程序,进入中断系统后,执行完程序就不返回主程序了。P2口 是控制led灯的。
这是程序
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define OUT2 P2
sbit K3=P3^2;
sbit K4=P3^3;
uchar m;
uchar n;
uchar k;
uchar lsd[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(uint i) // 延时函数
{
uint j;
while(i--)
{
for(j=0;j<125;j++)
{;}
}
}
void hhll()
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
PX0=0;
PX1=0;
}
void main() //主函数
{
hhll();
while(1)
{k=0;
for(k=0;k<8;k++)
{
OUT2=lsd[k];
delay(500);
}
}
}
void int0() interrupt 0 using 3//外部中断0的中断函数
{
if(K3==0)
{delay(5);
for(m=5;m>0;m--)
{
OUT2=0xf0;
delay(500);
OUT2=0x0f;
delay(500);
}
}
}
void int1() interrupt 2 using 3 //外部中断1的中断函数
{
if(K4==0)
{delay(5);
for(n=5;n>0;n--)
{
OUT2=0x00;
delay(500);
OUT2=0xff;
delay(500);
}
}
}
之后我看书,把延时程序换成这样,又能够退出中断系统返回主程序了。
void delay(uint i)
{
uint j;
for(;i>0;i--)
for(j=0;j<333;j++) //晶振为12MHz,j的选择与晶振频率有关
{;}
}
想问问是为啥。中断返回和延时程序有关吗?