Ich habe ein kleines Codeproblem bei meinem AVR-Progarmm. Mein Programm bricht folgende while-Schleife nicht ab, wenn der BootupTimeout größer als 199 ist: while((BootupTimeout<199)&&(getchar()!=0x24)) { #asm(nop) } Hab ich mich bei der logischen Verknüpfung vertan?
Welchen Typ hat BootupTimeout? Sollte mindestens uint8_t sein, signed char geht nicht.
Von wo liest denn dein getchar()? Schickst du da auch Daten rein?
Scheint mir, das er auf das getchar wartet und nichts bekommt. Probier doch mal aus ob deine getchar routine überhaupt funktioniert. Ansonsten kannst du ja auch das umschreiben in eine do-while schleife.
Das getchar() soll Daten von dem UART des ATmega16 einlesen. Wenn aber keine ankommen, soll BootupTimeout dafür sorgen, dass die while-Schleife abgebrochen werden soll. BootupTimeout wird in einer ISR hochgezählt, was auch funktioniert.
getchar() aber wartet, bis ein Zeichen ankommt. Daher wird Dein Bootuptimeout nur ein einziges Mal ausgewertet und die Chose hängt im getchar(). Statt getchar() solltest Du eine Funktion verwenden, die Dir mitteilt, ob überhaupt ein Zeichen anliegt, und nur dann solltest Du getchar() benutzen.
und so eine Funktion müsste ich dann wohl selber basteln, weils der Codevision nicht hat. welche register müsste ich mir da näher anschaun?
Anstatt zu suchen, welches register du auslesen musst, kannst du einfach eine interrupt routine benutzen, die einfach nur eine variable setzt beim erfolgreichen empfang eines zeichens. usart_rx interrupt ( natürlich rücksetzen nicht vergessen )
das hört sich gut an, ich werde das mal probieren vielen Dank für die Hilfe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.