单片机定时门铃
问题出在循环上,瞬间完成两次,第二次要等到第一次“丁咚”响了才能开始。
# 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;
}
}