Caros colegas,
Estou tentando fazer uma segunda serial num ATMEGA16 e quando eu compilo e faço a simulação no AVRSTUDIO, tudo está em ordem... os tempos de aquisição estão dentro do necesserário...
No proteus, quando envio algum caracter ou texto.... está bem legal... mas quando tento receber algo.... fica tudo meio esquisito, parece que está deslocando em 1 bit a mais, por exemplo, ao digitar a letra "b" (01100010) aparece "1" (00110001).... já fiz de tudo e não consegui entender o que pode estar acontecendo no meu código....
Será que alguém pode me dar alguma dica....
Segue abaixo uma parte do código para receber um dado.
Obs.: os tempos 140 de delay é para que se espera mais ou menos 156 microsegundso até o próximo bit e aí, 77 dá em torno de 104,5 microsegundos entre um bit e outro...
//==============================================
char Le_Carac(void)
{
unsigned char x=0;
conta = 8;
while (x = (PIND & 0x08)); //Aguarda STARTBIT
_delay_loop_2(140); //Aguarda o tempo do STARTBIT
while(conta)
{
if (PIND & 0x08)
lc = 0x80;
else
lc =0;
rc >>= 1;
rc = rc + lc;
_delay_loop_2(77);
conta--;
}
_delay_loop_2(77);
return rc;
}
//=============================================
Grato