Sorry, ich versuche mal verständlicher, also meine Idee ist die Uhrzeit in BCD zu packen, um es einfacher zu machen nehmen wir für jede Ziffer ein Register und machen es mit Sekunden.
Du hast sicherlich eine Taktquelle, wo Du Deinen Sekundenregister inkrementierst, dort verwenden wir jetzt 2 Register, einer für 10-er Sekunden und einer für 1-er etwa so:
Um das alles auf LCD zu schicken muß jetzt alles in ASCII und nich bin vorliegen hier kann man ein Stück RAM nutzen um die Daten zwischenzuspeichern jetzt kommen die Zeiger zum einsatz also:Code:.... .def sekeiner = r16 .def sekzehn = r17 ... ;Taktquelle inc sekeiner cpi sekeiner,60 brne raus clr sekeiner inc sekzehn raus: ret
Jetzt liegt im Ram an der Adresse 0x60 die Zehner Zahl 0x61 einer Zahl und 0x62 die Nullterminierung.Code:.def tmp = r18 .equ RAMPUFFER = 0x0060 ;das sollte die erste Ramzelle sein wandeln: ldi XH,HIGH(RAMPUFFER) ldi XL,LOW(RAMPUFFER) mov tmp,sekzehn ori tmp,0x30 st X+,tmp mov tmp,sekeiner ori tmp,0x30 st X+,tmp ldi tmp,'\0' st X,tmp ret
Puh, jetzt ausgabe
Zugegeben für normale BCD ist das Quatch, da könnte man direkt in ASCII rechnen, aber denke mal an die gepackten BCDsCode:ldi XH,HIGH(RAMPUFFER) ldi XL,LOW(RAMPUFFER) lesen: ld tmp,X+ cpi tmp,'\0' breq ende ;Hier Ausgabe von tmp an LCD rjmp lesen ende: ret![]()
So jetzt klarer ?
Gruß Sebastian
P.S. Ich habe das alles "Online" geschrieben und nicht geteste, sollte aber funktionieren






Zitieren

Lesezeichen