[AVR C] - co tu jest nie tak



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Office" <tomek.jaworski_at_nospam_cut_it.gazeta.pl>
Subject: [AVR C] - co tu jest nie tak
Date: Mon, 31 Oct 2005 15:10:55 +0100


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_loop2(Licznik); // petla opozniajaca
delay_loop2(Licznik);
delay_loop2(Licznik);
delay_loop2(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



Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: [AVR C] - co tu jest nie tak
Date: Mon, 31 Oct 2005 20:25:37 +0100


Użytkownik "Office" <tomek.jaworski_at_nospam_cut_it.gazeta.pl> napisał w wiadomości
news:dk58lv$jva$1_at_nospam_inews.gazeta.pl...
...
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.


chyba nawiasu brakuje:

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

ma byc:

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

--
Andrzej




Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: [AVR C] - co tu jest nie tak
Date: Tue, 1 Nov 2005 03:58:52 +0100


Użytkownik "Andy" <anokWYTNIJ_at_nospam_ceti.pl> napisał w wiadomości news:dk5r5q$qe1
...
chyba nawiasu brakuje:

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

ma byc:

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

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

Nawias niczego nie zmienia.

--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr" <mstelix_at_nospam_wp.pl>
Subject: Re: [AVR C] - co tu jest nie tak
Date: Tue, 1 Nov 2005 11:22:02 +0100



void Char2RS(char Znak)
{
UDR = Znak;
while (!(UCSRA & 1<<TXC))
{} // czekanie na koniec transmisji
}

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;
}



Poprzedni Następny
Wiadomość
Spis treści
From: "Office" <tomek.jaworski_at_nospam_cut_it.gazeta.pl>
Subject: Re: [AVR C] - co tu jest nie tak
Date: Wed, 2 Nov 2005 07:59:51 +0100


Dziekuje :) - pomoglo.

void Char2RS(char Znak)
{
UDR = Znak;
while (!(UCSRA & 1<<TXC))
{} // czekanie na koniec transmisji
}

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;
}