Hola, lo que te hace falta es definir un protocolo de comunicación.
Por ejemplo yo tengo un PIC con salida RS-232 a 1200,N,8,1 y quiero que:
-Lea uno de 5 canales AD y me devuelva el valor.
-Reciba un valor y lo envíe a uno de dos salidas PWM.
-Lea una de 8 entradas digitales y me devuelva el valor.
-Reciba un valor y lo envié a uno de 8 salidas digitales.
En mi caso defino que cada mensaje o paquete de comunicación entre la PC y el PIC, estará formado por 4 bytes:
-Un byte de inicio del paquete, ":".
-Un byte de función, según los siguientes valores
---01-Leer entrada analogica.
---02-Escribir salida PWM.
---03-Leer entrada digital.
---04-Escribir salida digital.
-Un byte de numero de canal, que indica el número de entrada o salida que se quiere leer o escribir.
-Uno o dos bytes de datos, que se usan solo cuando con las funciones de escritura (primero el LSB y luego el MSB, si corresponde).
-Dos bytes de fin del paquete, <CR> <LF> (retorno de carro y avance de linea)
Entonces si quiero leer la entrada analógica 0, envio:
":"+0x01+0x00+<CR>+<LF>
Si quiero escribir la salida PWM 1, que es de 10 bits, con el valor 0x01FF:
":"+0x02+0x01+0xFF+0x01+<CR>+<LF>
Si quiero leer el valor de la entrada digital 7, envío:
":"+0x03+0x07+<CR>+<LF>
por ultimo si quiero escribir un 1 en la salida digital 6, envio:
":"+0x04+0x06+0x01+<CR>+<LF>
Esta es un ejemplo que uso muy seguido. Para que el programa del PIC reconozca el protocolo por lo general utilizo una máquina de estado, cuyo estado cambia de acuerdo al byte recibido por la USART.
Cada vez que se recibe un byte por la entrada serial se ejecuta lo siguiente.
El estado 0 es esperar el byte ":", que indica el inicio del paquete. Si se recibe ese byte, se pasa al estado 1.
El estado 1 es recibir el byte de función, 0x01 a 0x04, si se recibe otro byte, se trata de un comando desconocido, se decarta el paquete y se vuelve al estado 0. Sino guarda el byte de función y se pasa al estado 2.
El estado 2 es recibir el numero de entrada/salida y guardarlo. Ahora si el byte de función era de lectura, se pasa al estado 5 (recibir el CR). Sino se pasa al estado 3 para recibir uno o dos bytes a escribir.
El estado 3 es recibir el byte de dato a escribir y guardarlo, Si el byte de numero de entrada/salida indica una salida de mas de 8 bits, se pasa al estado 4 para recibir el otro byte, sino se pasa al estado 5 (recibir el CR)
El estado 4 recibe el MSB del dato a escribir para las salidas de más de 8 bits y lo guarda. Luego se pasa al estado 5 (recibir el CR)
El estado 5 espera recibir el CR, si se recibe el CR se pasa al estado siguiente, recibir el LF, sino se descarta todo el mensaje y se vuelve al estado 0.
El estado 6 espera recibir el LF, si se recibe el LF, se valida el paquete y se ejecuta el comando de acuerdo a los bytes de función, nro de entrada/salida y datos, luego se vuelve al estado 0 para esperar el proximo comando, si no se recibe el LF, se descarta todo el paquete y se vuelve al estado 0.
Bueno espero que te sirva, y saludos.
Téc. Claudio J. Pérez
Ciberar-Sistemas & Desarrollos
Jujuy-Argentina