Hola
La verdad es que el codigo deberia cuncionar, al menos el ciclo DO While y los for no deberian tener problemas.
de hecho utilice la siguiente funcion para mostrar lo que enviava al puerto:
void MuestraBinario(char Num)
{
int i;
for(i=0;i<8;i++)
printf("%u",bit_test(Num,(7-i)));
printf(" :%u\n\r",Num);
}
y utilizando tu mimo codigo, reemplazando
output_b(letra1) por MuestraBinario(letra1) y
output_b(letra2) por MuestraBinario(letra2)
obtengo
Pic Iniciado\0A \0D
00000000 :0\0A \0D
00111111 :63\0A0D
01001000 :72\0A\0D
01001000 :72\0A\0D
01001000 :72\0A\0D
00111111 :63\0A\0D
00000000 :0\0A \0D
00000000 :0\0A\0D
01111111 :127\0AD
01111111 :127\0A\0D
01000001 :65\0A \0D
01000001 :65\0A\0D
01000001 :65\0A\0D
00000000 :0\0A \0D
00000000 :0\0A\0D
00111111 :63\0A0D
01001000 :72\0A\0D
por lo que el problema no creo que sea el codigo.
Que compilador usas?
yo uso el PCWH compiler, el tuyo parece similar pero no conosco la instruccion setup_oscillator(OSC_4MHZ|OSC_INTRC);
tu compilador interpretara por defecto un int como entero sin signo de 8 bits?
podria mostrar lo que envias al puerto B con la misma funcion?.
El proyecto es genial!