[AVR C] - co tu jest nie tak

Oct 31, 2005 4 Replies

Witam grupowiczow. Trenuje wlasnie C pod AVR, konkretnie atmega8. Staram sie napisac program wysylajacy lancuch znakow przez RSa. Oto co udalo mi sie napisac:



char napis[14] = "Cos Cos Cos!"; void String2RS(char *str); void Char2RS(char Znak); int main(void) { UBRRH =0; //ustawianie predkosci UBRRL= 12; UCSRC = 0x86; UCSRB = 1<<TXEN; for(;;) { String2RS(napis); _delay_loop_2(Licznik); // petla opozniajaca _delay_loop_2(Licznik); _delay_loop_2(Licznik); _delay_loop_2(Licznik); } return 0; } void String2RS(char *str) { int n = 0; while (str[n]) { Char2RS(str[n]); n++; } } void Char2RS(char Znak) { UDR = Znak; while (!(UCSRA & 1<<TXC)) {} // czekanie na koniec transmisji }



Wynik dzialania tego programu jest taki ze wysyla jedynie dwa pierwsze znaki lancucha 'znaki'. Pytanie moje takie - co ja robie nie tak.



Pozdrawiam Tomek



U¿ytkownik "Office" <tomek.jaworski@cut_it.gazeta.pl> napisa³ w wiadomo¶ci news:dk58lv$jva$ snipped-for-privacy@inews.gazeta.pl...

chyba nawiasu brakuje:

while (!(UCSRA & 1<<TXC))

ma byc:

while (!(UCSRA & (1<<TXC)))

U¿ytkownik "Andy" snipped-for-privacy@ceti.pl napisa³ w wiadomo¶ci news:dk5r5q$qe1

Chyba jednak nie w tym problem. Pomylily mi sie priorytety operatorow.

Nawias niczego nie zmienia.

a moze tak:

void Char2RS(char Znak) { while ( !( UCSRA & ( 1<<UDRE ) ) ) ; // Flaga UDRE jest zerowana po zapisaniu rejestru UDR //i ustawiana na "1" w chwili przenoszenia danej z rejestru UDR // do nadawczego rejestru przesuwajacego UDR = Znak; }

Dziekuje :) - pomoglo.

//i

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required