czesc, Potrzebuje zrobic sobie timeout do rs'a, cos mi to nie dziala i nie bardzo wiem dlaczego. Moze ktos "rzuci" okiem i zobaczy: Generalnie chcialbym by po ustawieniu rs_stop na 1 usart wyslal K i zakonczyl dzialanie. Wiem ze timer dziala poprawnie (dostaje komunikat). A moze jakos inaczej to realizowac? Jestem otwarty na propozycje...
pozdrawiam, bartek.
PS. Zadzialalo mi to jezeli mialem wlaczone usart0_transmit('e') (wysyla e na drugi port), ale opoznienie ktore probowalem wstawic niz juz nie zmienilo.
unsigned char USART1_Receive( void ) { char status,data; while (1) { while(rs_stop != 0x01){ if (((status=UCSR1A) & RX_COMPLETE)!=0){ data=UDR1; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) return data; } //USART0_Transmit('e'); //_delay_loop_2(100); } if (rs_stop == 0x01){ return 'K'; } }; }
SIGNAL (SIG_OVERFLOW0){ rs_timeout++; if (rs_stop == 0x00){ if (rs_timeout >= 220){ rs_stop = 0x01; usart0_send("RS time outss"); } } TCNT0= 0x29; //reload counter value wdt_reset(); }