Vale gracias a todos, me alegra que les haya interesado, en realidad puede ser una aplicación útil para muchos.
Les voy a explicar más a fondo:
(IMAGEN A MODO DE EJEMPLO)
HAY UN ERROR EN LA IMAGEN, EL PIN TX DEL PIC VA CONECTADO AL SWITCH

El pin Rx del PIC y de los dispositivos seriales están conectados en un solo nodo y los pines Tx van conectados a un Switch digital (74HC4066), el cual el PIC va a controlar, dónde según el dato que éste reciba, va a "suichear" y así permitir que el terminal Tx del dispositivo 1 o 2 se conecte al puerto serial.
Voy a ser lo más explícito posible respecto al código:
#include <16F628A.h>
#include <string.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code protected from reads
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, bits=8, xmit=PIN_B2, rcv=PIN_B1) //manejo del RS232
#use fast_io(a)
#use fast_io(b)
char dato, BufferRx[6];
unsigned int i=0;
int1 BanderaComp=0;
//Tramas de 5 caracteres
char disp1[6]="xxxx$", disp2[6]="yyyy$", desactivar[6]="zzzz$";
// Rutina de Interrupcion por RX USART
#int_RDA
void RDA_isr(void)
{
//Caracter de final: $ (HEX: 24)
dato=0x00;
if(kbhit())
{
dato=getc();
}
BufferRx[i]=dato;
i++;
if(dato==0x24)
{
BanderaComp=1;
i=0;
}
}
La idea es que cuando se reciba el caracter "$" indique el fin de la trama, luego dicha trama guardada en BufferRx, se compara:
void comprobacion()
{
disable_interrupts(global);
if(!strcmp(BufferRx, disp1)) //cuando la comparación NO es igual, retorna 1
{
output_high(PIN_B4);
}
if(!strcmp(BufferRx, disp2)) //cuando la comparación NO es igual, retorna 1
{
output_high(PIN_B5);
}
if(!strcmp(BufferRx, desactivar)) //cuando la comparación NO es igual, retorna 1
{
output_low(PIN_B4);
output_low(PIN_B5);
}
enable_interrupts(global);
BanderaComp=0;
BufferRx = 0x00;
}
Los string: "disp1, disp2 y desactivar", son cadenas preestablecidas en el pic que son las que se reciben vía serial.
Y la función MAIN:
void main()
{
// Configuración inicial del PIC
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
set_tris_a(0x01);
set_tris_b(0x02);
BufferRx = 0x00;
do
{
//PIC A LA ESPERA POR COMANDO SERIAL
if(BanderaComp)
comprobacion();
}while(TRUE);
}
He de acotar que los dispositivos seriales tienen sendos programas (privados de su fabricante) para ser controlados.
OJO: El "suicheo" FUNCIONA correctamente, se realizó ésta operación hasta 30 veces seguidas y el PIC no tuvo problema, el detalle está cuando luego de que un dispositivo está conectado al puerto serial, se conecta a través de su programa de fabricante y empiezan a transmitirse sus datos, a los segundos el PIC se cuelga y hay que reiniciarlo.