单片机中断小问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 06:13:03
这样一个中断程序:
void timer0() interrupt 1
{
static unsigned char num;
unsigned char i;
TL0=0x00;
TH0=0xcf;
num++;
buzzer=~buzzer;
if(num==1000)
{
led=~led;
for(;num>=0;num--)
{
for(i=0;i<1000;i++);
}
}
}
请问,该中断能不能在num==1000的时候进行延迟,还是说在延迟过程中又重新进入中断了??如果是后者,那么怎么样写才能在达到一定条件后(如在本程序中的num==1000)让中断“休息”一会儿呢??谢谢!!!
如果可以延迟的话,那么请问为什么这个程序不能实现蜂鸣器产生滴滴的声音??
#include<reg52.h>
sbit buzzer=P2^0;
sbit led=P2^1;
void timer0() interrupt 1
{
static unsigned char num;
unsigned char i;
TL0=0x00;
TH0=0xcf;
num++;
buzzer=~buzzer;
if(num==1000)
{
led=~led;
for(;num>=0;num--)
{
for(i=0;i<1000;i++);
}
}
}

void main()
{
unsigned int num=0;
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
led=0;
while(1);
}

中断函数最好简练
for(;num>=0;num--)
{
for(i=0;i<1000;i++); {
}
}
这部分浪费时间的程序挪到主程序里面去。
再主程序中判断标志(num==1000)时关闭中断允许ET0,或总中断EA,等你需要的时候再打开中断使能,就行了。