单片机定时门铃

问题出在循环上,瞬间完成两次,第二次要等到第一次“丁咚”响了才能开始。

# include & ltreg 51 . h & gt;

#定义uchar无符号字符

#定义uint无符号整数

uint p = 0;//必须是uint定义(p为2字节)。

sbit k=p1^7;//键

sbit doorbell=p3^0;//门铃

无符号int I;

void main()

{

门铃= 0;

TMOD = 0x 00;

TH0 =(8192-700)/32;//700us计时

TL0 =(8192-700)% 32;

IE = 0x82

while(1)

{

If(K==0)//按键启动定时器。

{

for(I = 0;我& lt2;I++)//我想“丁咚”两次,但我只能“丁咚”一次。

{

TR0 = 1;

while(TR0);

}

}

}

}

无效定时器0()中断1

{

门铃= ~门铃;

p++;

如果(p & lt600) //如果需要拉长声音,可以调400,800。

{

TH0 =(8192-700)/32;//700us计时

TL0 =(8192-700)% 32;

}

else if(p & lt;1200)

{

TH0 =(8192-1000)/32;//1毫秒计时

TL0 =(8192-1000)% 32;

}

其他

{

TR0 = 0;

p = 0;

}

}