下面的51单片机程序中,外部中触发后,延时一段时间之后(delayms(50)),让标志位flag=0;这个时候为什么单片机还在处于中断当中呀????
按理来说,标志位为0,此时if(flag==1)的程序应该不执行呀,但是,操作中是在继续执行。
请问各位大神,这是什么原因。
下面为代码:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P1^0;
sbit D2 = P1^1;
sbit FM = P2^3;
uint flag = 0;
uint count = 0;
void delayms(uint xms) //延时函数
{
uint i,j;
for(i=xms;i--;i>0)
for(j=110;j--;j>0);
}
void main()
{
/********关闭电磁阀**********/
D1 = 0;
/********关闭指示灯**********/
D2 = 1;
/********外部中断触发********/
EA = 1;
EX0 = 1;
IT0 = 0;// 中断为低电平触发
while(1)
{
if(flag==1)
{
D1=1;
D2=0;
delayms(50);
flag=0;
}
}
}
/********中断函数***********/
void time_0() interrupt 0 //中断函数0
{
flag = 1;
}
|