Hallo Ích möchte den Inhalt eines Registers an ein LCD ausgeben. Direkt ist dies ja nicht möglich. Der Inhalt des Registers muss erst umgewandelt werden. z.B. die Zahl 59 ist ins Register "reg1" geschrieben worden und soll am LCD ausgegeben werden. Es soll nun so lange rumgerechnet werden, bis man 5 Zehner und 9 Einer in zwei temporären Registern stehen hat. Das ist ja schön und gut. Aber wie gehts dann weiter? Das Problem ist, dass ich im PIC den Wert, den ich am LCD ausgeben will, in Anführungstriche setzen muss. movlw '5' movwf LcdDATEN ;Datenregister call LcdAusgabe ;Ausgabe-Routine Wie kann ich denn den errechneten Wert nun am LCD ausgeben???
Ich hoffe mal, dass die Routine noch erkennbar ist. Die auszgebenden Zahl (0..99, in register HexZahl) wird in Zehner und Einer aufgesplittet. Es wird so lange vom Register HexZahl 10 subtrahiert bis ein Übertrag auftritt. Damit habe ich die Zehner. Der Rest vor dem Übertrag entspricht den Einern. Einfach 0x30 dazuaddiert und man hat den ASCII-Wert für das Display. !!! Die Routine funktioniert nur im Wertebereich von 0..99 ; HexZahl in Zehner und einer aufsplitten Ergebnis in Zehner und Einer +0x30 ; --> ASCII Code für Display HexDec movlw 0xff ; Zehner-Stelle = -1 movwf Zehner movf HexZahl,w ; Umzuwandelnde Zahl in w NextSub incf Zehner,f ; Zehner erhöhen movwf HexZahl ; w wieder zurück in HexZahl movlw 0x0A subwf HexZahl,w ; 10 abziehen, Erg. in w btfsc c ; Übertrag ? goto NextSub movf HexZahl,w ; Divissionsrest movwf Einer movlw 0x30 addwf Einer,f addwf Zehner,f return MfG
Ja... Wenn ich dann durch diese Routine eine eine 5 im Zehner-Register stehen habe, was mache ich dann damit? Ich kann ja dann nicht einfach das Zehner-Register ins LcdDATEN-Register kopieren. Mein Problem ist, dass ich nicht weiss, wie die errechneten Zahlen ins LcdDATENRegister reinkriege. Mittels der Anführungstriche geht das ja dann wohl nicht, oder?
Hallo Hat sich erledigt. Ich habe die Routine einfach mal übernommen und die Register Zehner und Einer ins Lcd-Datenregister geladen. Funktioniert einwandfrei. Die Register Einer, Zehner und HexZahl habe ich vorsichtshalber vorher noch auf Null gesetzt. Danke für die Code!!!
Am Anfang hatte ich ähnliche Probleme, damals gab es aber noch keine Foren wie dieses. MfG
Hi Wolfram! Wolltest du eigentlich die Zahl als Hex oder Dez.darstellen? Hex ist doch ganz einfach: Zahl -> ASCII_H und ASCII_L /2 Register oder 1x sichern ASCII_H & $0f /High-Nibbel ausfiltern ASCII_H 4 x rechtsschieben (oder swap) ASCII_H + $30 /aus Wert wird ASCII ASCII_H an LCD ausgeben ASCII_L & $f0 /Low-Nibbel ausfiltern ASCII_L + $30 /ASCII ASCII_L an LCD ausgeben fertig Wenn dez. musst du natürlich umwandeln, dann aber eigentlich 3 Stellen oder nur bis 99 Gruss Uwe
Hallo Die Zahl sollte als Dezimalzahl dargestellt werden. Mit der Routine von Steffen funktioniert das Umwandeln ganz gut. Das LCD akzeptiert die Daten nun endlich. Die Idee mit den Hexzahlen werde ich mir mal abspeichern. Vielleicht brauche ich das ja mal irgendwann. Danke dafür. mfg Wolfram Hildebrandt
Die Hex-Umwandlung von Uwe funktioniert so nicht ganz richtig. 0x9A wird nach dieser Funktion als "9:" dargestellt und 0xBE ergibt ";>". Der ASCII-Code von A ist 0x41 also muss man bei Werten >9 (ASCII_H,ASCIIL in Uwes Routine) nicht 0x30 sondern 0x37 dazuaddieren. MfG Steffen
Hi! War mir in der Eile doch entfallen Und noch ein Fehler hat sich eingeschlichen, Mist! Sollte also so aussehen: Zahl -> ASCII_X und ASCII_L /2 Register oder 1x sichern ASCII_H & $f0 /High-Nibbel ausfiltern ASCII_H 4 x rechtsschieben (oder swap) Call Test ASCII_L ->ASCII_X /ASCII_X auf Ausgangswert laden ASCII_X & $0f /Low-Nibbel ausfiltern Call Test . . . Test: ASCII_X + $30 /aus Wert wird ASCII ASCII_X > $39 /??? Ist es ein Buchstabe??? ja ASCII_H + $07 /aus Sonderzeichen wird Buchstabe ASCII_X an LCD ausgeben Ret MFG Uwe
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.