Timbre con temporizador de un solo chip

El problema está dentro del bucle, ambos tiempos se completan sobre la marcha y el segundo no puede empezar hasta que haya terminado el primer "ding dong".

#include

#define uchar unsigned char

#define uint unsigned int

uint p=0; //Debe definirse como uint (p ocupa 2 bytes)

sbit K=P1^7;//keypress

sbit DoorBell=P3^0; //timbre

unsigned int i;

void main()

{

DoorBell=0;

TMOD=0x00; p> TH0=(8192-700)/32;//temporización 700us

TL0=(8192-700)%32;

IE=0x82;

while(1)

{

if(K==0)// Pulsa el botón para iniciar el cronómetro

{

for(i=0;i<2;i++)// Quiero tener dos "ding", pero solo un "ding"

{

TR0=1;

mientras(TR0);

}

}

}

}

}

void Timer0()interrupción 1

{

DoorBell=~DoorBell;

p++;

if(p<600) //Si necesitas arrastrar el sonido, puedes ajustarlo a 400. Si necesita arrastrar el sonido, puede ajustarlo a 400 y 800

{

TH0=(8192-700)/32 //700us timer

TL0=(8192-700)%32;

}

si no(p<1200)

{

TH0 =( 8192-1000)/32; /temporizador de 1 ms

TL0=(8192-1000)%32;

}

más

{

TR0=0;

p=0;

}

}

}

../css/tongji.js">