Lo que pasa es que si usas getc(); en el PIC2, no sabrás si el byte recibido es el primero o el segundo.
Para saber que es el primer byte o el segundo debe haber una conversación entre los PICs, el PIC1 avisa de alguna forma que ahí va el byte 1 y el PIC2 avisa que ya lo recibió, posteriormente el PIC1 envía el byte 2 y el PIC2 avisa que ya lo recibió.
Una vez teniendo ambos bytes puedes depositarlos en el puerto A y B del PIC2.
Si no haces que ambos PICs se sincronicen es probable que el byte1 (primeros 8 interruptores) se ponga en el byte2 (últimos 8 LEDs).
Se me ocurre que hagas una sincrocnización por tiempos.. primero activa el PIC2, luego activas el PIC1 y que envíe los primeros 8 interruptores (1 byte), ya luego los otros 8 y así el PIC2 siempre sabrá el orden de recepción.
- PIC2 (el que enciendes primero, el girador

)
#use rs232(baud=2400, xmit=PIN_x,rcv=PIN_y) //[PIC2] 'x' no se usa, 'y' es el pin que recibe desde PIC1
...
while(1)
{
output_a(getc()); //recibes 8 primeros interruptores y los sacas por porta
output_b(getc()); //recibes 8 últimos interruptores y los sacas por portb
}
- PIC1 (el de los interruptores)
#use rs232(baud=2400, xmit=PIN_x,rcv=PIN_y) //[PIC1] 'x' transmite hacia PIC2, 'y' no se usa
...
delay_ms(2000); //que espere a que PIC2 sea encendido primero o esté listo para recibir
while(1)
{
putc(input_a()); //envías 8 interruptores de porta por rs232
putc(input_b()); //envías 8 interruptores de portb por rs232
}
Ya te lo puse más claro, espero que así le entiendas.

Le bajé la velocidad a 2400bps por si hay problemas con las escobillas que mencionas ya que pueden rebotar y generar errores en la transmisión.