Se te olvido decir en que programas? bueno yo uso el CCS.
Yo entiendo que tu quieres mandarle numeros por rs232 y representarlos en bits en el puerto B ¿cierto?
Bueno pensando en que quieres eso y modificando un poco tu programa, a mi se me ocurre hacerlo asi:
#include <16f876a.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,bits=8,xmit=PIN_C6,rcv=PIN_C7)
char recepcion[4], abc=0; //Declaras variables
int i=0, comando;
int1 bandera=0;
// INTERRUPCION DE LA UART POR RX
#int_RDA
void RDA_isr()
{
//recibimos comando
abc = getc (); //Guarda lo recibido
if ((abc!=0x0D) && (abc<='9') && (abc=>'0')) //Recibimos solo numeros
recepcion=getc(); //Guarda el numero recibido en el string
else if ((abc==0x0D)) //Si recibimos enter
{
recepcion='\0'; //Terminanos el string con un null
disable_interrupts(GLOBAL); //Desactivamos interrupciones temporalmente
fprintf("%s\n\r", recepcion); //mostramos el string
}
//confirmamos lo recibido
fprintf("%c\n\r", abc);
bandera=1; //decimos que ya recibio un caracter
}
void main (void)
{
enable_interrupts(INT_RDA); //Habilita interrupcion del RS232
enable_interrupts(GLOBAL);
while (1)
{
if (bandera==1) //Entramos solo si se recibio algun caracter
{
if (abc == 0x0D) //Si se recibio enter mostar lo recibido en PORTB
{
comando = atoi (recepcion); //transformamos lo recibido a numero
OUTPUT_B(comando); // Lo mandamos
i=0; //nuestro indice lo hacemos 0
abc=0;
enable_interrupts(GLOBAL); //habilitamos la interrupcion
}
else
i++; //Si no es enter seguimos aumentado nuestro indice
bandera=0; //Sea como sea volvemos hacer bandera 0 para no entra infinitamente
}
}
}
Espero que si sirva, realmente lo hica al vuelo, no lo probe