attiny2313: странное поведение USART
Добавлено: Вс фев 24, 2008 03:35:47
Делаю сеть rs-485 и напоролся на такой странный глюк (пока только в Протеусе, но в железе тоже не работает как надо)... Есть две штуки ATTINY2313 соединенных по USART с помощью MAX487. Есть две такие функции:
и прием:
Настройки обоих контроллеров полностью идентичны, однако при посылке с первого байта 0x0A, на втором читаем 0x10A, то есть как будто помимо байта посылается еще девятый бит (естественно отключен при настройке USART на обоих МК). MAX487 в этом не виноват (пробовал и без него, напрямую - тоже самое). Пробовал обнулять бит RXB8 регистра UCSRB. При отладке в Протеусе установлено, что девятый бит появляется именно на приемнике, т.к. с передатчика данные уходят корректно... Совсем я что-то запутался, может быть кто-нибудь уже сталкивался с подобным поведением USART'a у тиньки?
Код: Выделить всё
void rs485_send(char *Data, unsigned char Size)
{
//unsigned char PreviousIODev=poutput;
unsigned char SentBytes=0;
//poutput=RS485;
RS485_CTRL=1; // управляем направлением передачи для MAX487
for(SentBytes=0;SentBytes<=Size;SentBytes++)
{
putchar(Data[SentBytes]);
}
//poutput=PreviousIODev;
RS485_CTRL=0;
}Код: Выделить всё
char rs485_recv(char *Data)
{
char BytesReceived=0;
memset(Data,0,32);
//poutput=RS485;
while(Data[BytesReceived]=getchar()) BytesReceived++;
return BytesReceived;
}