Hola a todos de nuevo.
Estoy tratando de implementar las soluciones que me recomendaron, pero no logro hacerlas funcionar. He estado tratando de encontrar mi falla, pero no lo he conseguido. Lo más que se me ocurre es que haya algún problema por estar usando el #USE RS232. Les dejo las partes esenciales de mi código, y espero que alguien me pueda ayudar.
Es un PIC16F887
#USE RS232(baud=9600, parity=N, bits=9, uart1, long_data, stream=rs485) //Esto es la configuración que tengo del #use rs232
//aquí viene donde nombro los bits para la recepción
#bit rcv=0x18.0 //Este es el 9no bit, de acuerdo a la hoja de datos del pic
#bit rcven=0x18.6//Este es el bit para habilitar la recepción de 9 bits
#INT_RDA
inte(){
led=1;
if(rcv==0){
led2=0;
}
if(rcv==1){
led2=1;
}
Solo pongo la parte de código que considero necesaria para esto. Al principio de mi código principal, hago rcven=1; para habilitar la recepción de 9 bits. "led" lo uso para saber que entró a la interrupción (todo bien hasta ahí). Después pretendo usar el "led2" para ver si el pic logra distinguir entre un byte con el 9no bit en 1, o en 0; pero ahí empieza mi problema, ya que "led2" nunca cambia de estado.
Por otro lado, puedo decir que la transmisión de 9bits, es correcta, incluso la recepción. Ya que probé con algo mas o menos así:
//envío al pic en cuestión el dato siguiente
putchar(0x100);
//o el siguiente
putchar(0x000);
//En el pic en cuestión, tenía algo así
#INT_RDA
inte(){
char=getc();
if(char==0x100){
led=1;
}
if(char==0x000){
led=0;
}
}
Eso es solo un ejemplo, ya que ese código ya lo deseché. Pero la idea principal, era esa.
Así que mi problema, por lo que veo, es a la hora de identificar exclusivamente el 9no bit.
Espero que puedan ayudarme. ¡Muchas gracias de nuevo!