A pesar que CCS lo permite... olvidate de los goto y las etiquetas (dejaselo para ASM a eso).
Utiliza
while() {}
o
do { }while()
para eso, y
break;
si queres salir de ese while(), do..while o for().
Utilizar una identacion, asi es mas facil leerlo.
Y Si explicas masomenos que queres que realize tu codigo seria mas facil de encontrar una solucion, aunque creo entender el codigo.
Todo tu programa:
int8 dato,buff;
#int_rda
void recepcion_serial (void)
{
}
void main (void)
{
enable_interrupts(int_rda);
enable_interrupts(global);
while (true)
{
dato=buff;
while(dato!=0)
{
output_high(PIN_A2);
dato--;
delay_ms(1000);
}
output_low(PIN_A2);
buff=0;
}
}
Le agregue ese buff, para que a si esta corriendo el programa haciendo una demora de 20 segundos y le llega otro dato, no varie el tiempo de espera. Sino ocurria que si enviabas un 0x10, y luego enviabas un 0x20 mientras estaba haciendo esa "espera", dato pasaba a valor 0x20 y comenzaba todo de vuelta.
Pongo a 0 buff al final para que cualquier dato que llego no sea tomado en cuenta mientras se esperaba el tiempo. Sino por ejemplo mientras hace la animacion de 0x10, y llega un 0x20, apenas termine el de 0x10, va a seguir con el de 0x20.
Se que estas usando 2 PIC, pero ojo si estas mandando un '1' ( es decir un caracter y no un numero 0x01 ) en la UART, ya que un '1' en ASCII equivale a 49 o 0x30, y va a ser mucho mas tiempo del necesario.
Y espero que sea un UART por HW como esta implementado.