Podrias haber seguido seguido en el otro hilo, ya que es el mismo codigo.
Espero que no te enojes por lo que te digo y tus consultas seran siempre bien recibidas.
Como te dije estas teniendo serios problemas de programacion (en ASM y en C que son las cosas que vi), pero SERIOS, lei que estas intentando programar un robot con cinematica inversa, etc etc etc.
Pero por ahora lo que mas te vas a tener que enfocar es aprender C y como ejecutan las instrucciones de manera secuencial los microcontroladores, cosas como estas:
datos [0]=0;
delay_us(0.4);
datos [1]=1;
delay_us(0.4);
datos [2]=0;
delay_us(0.4);
datos [3]=1;
delay_us(0.4);
datos [4]=0;
delay_us(0.4);
datos [5]=1;
delay_us(0.4);
datos [6]=0;
delay_us(0.4);
datos [7]=1;
delay_us(0.4);
datos [8]=0;
delay_us(0.4);
datos [9]=1;
delay_us(0.4);
datos [10]=1;
delay_us(0.4);
datos [11]=0;
delay_us(0.4);
datos [12]=1;
delay_us(0.4);
datos [13]=0;
delay_us(0.4);
datos [14]=1;
delay_us(0.4);
datos [15]=1;
delay_us(0.4);
Son realmente absurdas, cuando la funcion delay_us admite nomas enteros y vos intentas pasarle un float.
Parameters: time - a variable 0-65535(int16) or a constant 0-65535
Ademas de que sirve asignarle un valor a una variable alojada en la RAM con delays entremedio ????, supongamos que acepta el delay ese valor. de que sirve asignarle una y otra ves el valor a ese array ???, se hubiera podido remplazar por:
unsigned char datos [16]={1,0,1,0,.....,1};
void diagnostico (void)
{
int j;
delay_us(6.4);
for(j=0,j<16;j++)
...
Eso no va a hacer que se envie un 1 luego un 0 a cada 0.4us, solo estas haciendo que ponerle todos los valroes al array sea lento. (Ni es por que el delay es de 0).
Tampoco valdria la pena hacer eso por un 0 o un 1. utilizar 16 * 8 bits = 128 bits para solo tener la info de 16 bits.
Encima luego usas
for (j=0;j<15;j++ )
{
putc(datos[j]);
}
Y tenes configurado el RS232. genial, esto es una funcion bloqueante que se queda esperando hasta que se envie todo.
Haciendo que tu if del main, tenga que esperar que se envie todo por la UART, para volver a preguntar sobre la entrada.
Otra cosa no estas enviando un 1 bit si esa fur tu idea. sino estas enviando:
1 bit de start + 8 bits de datos + 2 bits de stop, asincronamente asi que no es una onda cuadrada con un duty 50% si es lo que querias hacer.
Cada 1 o 0 ahi seria algo asi, como para darte un ejemplo
1 0000 0001 11
Otro "error", no estas usando el valor dato[15] xD por tu condicion.
Para resumirtelo, tu funcion diagnostico es igual a esto:
for (j=0;j<16;j++ )
{
putc((j&0x01));
}
Encima no sale de ahi, de ese for hasta que envio todo de la UART.
Aunque no lo quieras admitir, estas errandole en temas de programacion bastante simples.
El manual de las funciones de CCS lo tenes en internet, solo busca CCS Manual y lo tenes. Ahi te explica cada una.
Pero el tema de los arrays, eso ya como dije es un error de programacion