Mi código completo se encuentra aquí .
Básicamente, estoy transmitiendo a un Arduino, y no estoy recibiendo el valor correcto (se dará cuenta de que estoy tratando de enviar d'22 '). Aquí está el método donde realmente mordí la transmisión:
// Method for transmitting value using serial bit banging
void uart_tx_bit_bang(unsigned char val) {
unsigned char i;
Tx_Pin = 0; // Start bit
uart_time_delay();
for ( i = 8 ; i != 0 ; --i ) {
if (val & 0x01) Tx_Pin = 1; // Begin with LSB
else Tx_Pin = 0;
val >>= 1;
uart_time_delay();
}
Tx_Pin = 1; // Stop bit
uart_time_delay();
}
Dado que el retraso debe ser 1 / baudios, uart_time_delay()
debe ser un retraso de 104us. Estoy usando __delay_us(104)
de las bibliotecas PIC. Cualquier ayuda en esto es muy apreciada.
Estoy seguro de que estoy usando la velocidad de transmisión correcta en ambos extremos.