PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim Senden über RS232



Spurius
02.07.2005, 15:06
Hallo,
bei folgendem Code wird nur ein Zeichen gesendet, obwohl eigentlich endlos gesendet werden soll:


#include <avr/io.h>

void init_usart(void)
{
UBRRL |= 0b01100111;
UCSRB = (1<<TXEN) | (1<<RXEN);
UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
}


int main(void)
{
unsigned int i;
i = 0;
init_usart();
do
{
while (!(UCSRA & (1<<UDRE))) {}
UDR = 'C';
} while (i != 0);
}


Wisst ihr warum nur einmal gesendet wird?
Gruß
Spurius

lion1984
02.07.2005, 15:42
hiho,

bin zwar pic user aber ich glaube, das problem ist:


do
{
} while (i != 0);


d.h. machen solange i ungleich 0 ist das heißt, er verlässt die schlaufe weil du i = 0 gesetzt hast, oder ich verdrehe es gerade :D

wenn er 1 zeichen schickt, ist es eine zeichen für dieses problem,
er geht in die schleiche, shcickt es, und geht wieder raus.

setzte einfachmal:


do
{
} while (i == 0);


das heißt, tue solöange i = 0 ist, sollte funken.

wenn nicht versuche einfach:



while(true)
{}

oder


for(;;)
{}


beides variante einer endlosschleife
hoffe hab dir helfen können

Spurius
02.07.2005, 18:23
Vielen Dank, es geht!!!

Spurius
02.07.2005, 19:38
Hallo,
hab noch ne Frage, und zwar warum wird bei folgendem Code


while (*s)
{ /* so lange *s != '\0' also ungleich dem "Sting-Endezeichen" */
uart_putc(*s);
s++;
}
von da http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Schreiben_einer_Zeichenkette_.28String.29
nicht geschrieben:
while (*s != '\0') ?

lion1984
02.07.2005, 20:07
huhu :D

ich blaube, das is nur eine einfachere schreibweiße, es heißt nur dass, da die schleife solang durchfahren wird, bis das und das gesetzt ist.
so weit ich weiß, is ein stringendzeichene eine "0" und nicht "\0". so haben wir es in der schule gelernt, ob es nochstimmt kann ich nicht sagen, even is "\0" auch richtig. aber die schreibweiße ist nur, solange dieses Bit nich gesetzt ist bzw solang es gestzt ist.

ich hoffe es stimmt :D so weiß ich es, falls ich mich irre können mich gerne andere user korrigeren

PicNick
03.07.2005, 16:17
Alles ok, Männer, 0x00 => 0 => '\0' ist alles eins
da "s" ein character ist, ist einfaches Hochkomma angesagt.

Spurius
03.07.2005, 21:20
Ging eigentlich nicht so sehr um die Hochkomma, sondern mehr um das while(*s) und warum da nicht while(*s != '\0') steht.

PicNick
04.07.2005, 10:21
.. while(*s) und warum da nicht while(*s != '\0') steht
Ist ja wieder genau das Gleiche. Wenn du jemandem erklären wolltest, was eigentlich while (*s) bedeutet, was denkst du, was ihm dann erzählst ? Eben, genau "while(*s != '\0')"

Spurius
04.07.2005, 12:34
Also, das war ja mein Frage, vielen Dank.