Hallo! Ich hab grad ein kleines Problem: Mein AT90S4433 soll über das UART die Zeichenkette "80 04 BF 02 00" ausgeben. Wäre ja eigentlich kein Problem, aber ich brauch eine Pause von 0,1ms an jeder Stelle, wo ein Leerzeichen steht. (s. Markierung im Anhang). Mit einer normalen Warteschleife funktioniert es leider nicht. Gruß, Michael
0,1 ms = 100 µs lassen sich problemlos entweder mit Timer oder Software-Delay realisieren. DELAY_100: ldi tmp,98 ;8 Takte für LDI RCALL RET = 2 µs dec tmp ;98 * 4 = 392 Takte nop ;Gesamt 400 Takte = 100 µs bei 4 MHz brne pc - 2 nop ret Aufruf mir rcall delay_100 ergibt 100 µs delay bei 4 MHz
Hab ich auch schon probiert, funktioniert aber leider nicht. Funktioniert auch nicht, wenn man das Warten, bis UDR bereit ist, weglässt.
Du mußt erst warten, bis der UART leer ist und dann erst das Delay starten, sonst sendet der UART munter, während Dein Programm in der Warteschleife versauert. Also: Im USR das Bit TXC (UART Transmit Complete) abfragen, wenn es "1" ist, das Delay starten.
Danke für den Tipp, werd ich gleich ausprobieren, wenn ich wieder ans Oszi kann.
also liege ich richtig mit: wait: sbis USR, TXC rjmp wait rcall wait100us , um im USR das Bit TXC abzufragen?
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.