Guten Abend oder besser Nacht Habe da mal ne Frage zu einem Source-File das ein LCD (HD44780) initialisieren soll. Wenn Daten bzw. Befehle gesendet wurden wird mit dem Sprungbefehl "rcall WaitBusy" das BusyFlag des LCD abgefragt. Der Datenbus des LCD hängt am PortA (8bit) und und E,RW und RS des LCD an PortC des AVR. Takt ist 4Mhz 1 WaitBusy: 2 ldi R16, 0x00 ; 3 out DDRA, R16 ;PortA als Eingang konfiguriert 4 cbi PortC, RS ;Register-Select 0 = Befehl 5 sbi PortC, RW ;Schreibrichtung 1 = lesen von LCD 6 WB1: 7 sbi PortC, E ;Enable-Impuls starten 8 nop ; 9 nop ;E muß min.320ns anliegen 10 in R16, PinA ;BusyFlag in R16 einlesen 11 cbi PortC, E ;Enable-Impuls beenden 12 nop ;Zeitverzögerung warum auch immer 13 sbrc R16, BF ;wenn bit7 in R16 0 ist überspringe den nächsten Befehl 14 rcall WB1 ;Rücksprung zu WB1 15 cbi PortC, RW ;Schreibrichtung 0 = schreiben zu LCD 16 ldi R16, 0xFF 17 out DDRA, R16 ;PortA als Ausgang konfiguriert 18 ret ;Rücksprung zu Hauptprogramm So das ist ja alles logisch und ich habe es auch kappiert, aber warum ist in Zeile 12 diese Zeitverzögerung von 250ns bei 4Mhz??? Wozu brauch man die???
Ich würde mal sagen, dass der "nop"-Befehl nicht notwendig ist. Mit den Löschen vom Enable-Bit beendest du ja die Kommunikation mit dem Display. Daher ist das Busyflag schon längst in R16 geschrieben. Un das sollte dann auch ohne den "nop"-Befehl direkt geprüft werden können.
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.