Gefunden für ungleich ascii - Zum Elektronik Forum |
| 1 - UART Probleme -- UART Probleme | |||
| |||
| 2 - Probleme bei LCD-Ansteuerung -- Probleme bei LCD-Ansteuerung | |||
| Moin,
Wie sollen wir denn den Fehler finden, wenn wir den Originalkode nicht haben? Du musst keine Verzögerung, wie von Jorn vorgeschlagen, reinbauen, wenn du das Busyflag testest. Das tust du, ob du es richtig machst, kann ich dir nicht beantworten, da ich keinen PIC-Assembler verstehe, oder nur rudimentär. Sollte das Testen des Busyflags allerdings nicht klappen, dann ist Jornbytes Einwand allerdings berechtigt. Tabelle? Werden denn die richtigen Zeichen im ROM korrekt addressiert? Wann ist der String zuende? Nullterminiert? Oder bekannte Länge? Wenn er nicht nullterminiert ist, dann wird fleißig jeder weitere Datensalat aus dem Flash oder RAM gelesen und als Datenbyte ins Displayram kopiert. Nullterminiert bedeutet aber auch, dass du selbst überprüfen musst, ob das gelesene Zeichen ungleich NULL (0) ist! Sind die Zeichen unter den ASCII-Zeichen 0x0-0x7, dann wird der Inhalt des Character Generator RAMs aufs Display abgebildet. Das Ganze geht so schnell, dass du vermutlich kaum die ersten paar korrekten Zeichen des Strings sehen kannst, bevor sie mit Datensalat überschrieben werden. Ist dann noch ein Fehler in der LCD-Routine, was ich wie gesagt nicht herausfinden kann, dann ist es klar, dass das nich... | |||
3 - HEX nach DEZ umrechenen für LCD ? -- HEX nach DEZ umrechenen für LCD ? | |||
| Ein Beispiel in ASM:
; Bin2ToAsc5 ; ========== ; wandelt eine 16-Bit-Binärzahl in eine fünfstellige ASCII- ; kodierte Dezimalzahl um ; Aufruf: 16-Bit-Binärzahl in rBin1H:L, Z zeigt auf Anfang ; der Zahl ; Rückkehr: Z zeigt auf Anfang der Zahl, führende Nullen sind ; mit Leerzeichen überschrieben ; Benutzte Register: rBin1H:L (bleibt erhalten), rBin2H:L ; (wird überschrieben), rmp ; Aufgerufene Unterroutinen: Bin2ToBcd5 ; Bin2ToAsc5: rcall Bin2ToBcd5 ; wandle Binärzahl in BCD um ldi rmp,4 ; Zähler auf 4 mov rBin2L,rmp Bin2ToAsc5a: ld rmp,z ; Lese eine BCD-Ziffer tst rmp ; prüfe ob Null brne Bin2ToAsc5b ; Nein, erste Ziffer ungleich 0 gefunden ldi rmp,' ' ; mit Leerzeichen überschreiben st z+,rmp ; und ablegen dec rBin2L ; Zähler um eins senken brne Bin2ToAsc5a ; weitere führende Leerzeichen ld rmp,z ; Lese das letzte Zeichen Bin2ToAsc5b: inc rBin2L ; Ein Zeichen mehr Bin2ToAsc5c: subi rmp,-'0' ; Addiere ASCII-0 st z+,rmp ; und speichere ab, erhöhe Zeiger ld rmp,z ; nächstes Zeichen lesen dec rBin2L ; noch Zeichen behandeln? brne Bi... |
|
Zum Ersatzteileshop Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation! gerechnet auf die letzten 30 Tage haben wir 7 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst 12 Besucher in den letzten 60 Sekunden alle 5.00 Sekunden ein neuer Besucher ---- logout ----su ---- logout ---- |