Neto, eu sei que faz muito tempo, mas mesmo assim dei uma olhada no seu projeto. Certamente você já resolveu. Mas vou deixar registrado aqui.
Supondo que eu esteja enviando a letra 'c' pela serial (do PC para o PIC):
A sua variável
saida que inicialmente é 0b00000000, vai ficar 0b00000010 imediatamente após executada a linha
bit_set(saida,1) [ver imagem 1], tudo ok até aí. Na linha seguinte você chama
write_expanded_outputs(&saida) [ver imagem 2] e imediatamente após essa linha a sua variável
saida volta a ser 0b00000000, o que é um problema pra você.
O 'problema' está na função
write_expanded_outputs.
Veja que essa função, na linha 0026 [ver imagem 2] fica manipulando o valor que está no ponteiro *oe e o valor nesse ponteiro é justo a sua variável
saida. A sua variável tem os bits rotacionados à esquerda e é complementada com o bit 0 à direita, acontecendo isso 8 vezes. Como sua variável é de 1 byte, logo depois dessas 8 rodadas você terá o valor 0b00000000 na variável
saida.
Espero ter ajudado alguém.
Imagem 1:
Imagem 2:
--
MhagnumDw