Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim Senden über RS232
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, 16: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
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, 21: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
Alles ok, Männer, 0x00 => 0 => '\0' ist alles eins
da "s" ein character ist, ist einfaches Hochkomma angesagt.
Ging eigentlich nicht so sehr um die Hochkomma, sondern mehr um das while(*s) und warum da nicht while(*s != '\0') steht.
.. 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')"
Also, das war ja mein Frage, vielen Dank.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.