PIC Umrechnung hex-dezimal

Gast #65213
Hallo,

Hab schon Wochen probiert, nun muß ich doch mal hier fragen. Ich möchte
ein Register (was mal später ein Timer werden soll) dreistellig auf
einem LCD-Display ausgeben. Ich habe mir aus anderen Veröffentlichungen
Anregungen geholt und versucht, das für meinen Zweck umzuschreiben.
Zu Testzwecken ist mein Register im Beispielprogramm nur 0.

Mein Gedankengang: Ich ziehe vom Inhalt des Registers 100(dez) ab und
prüfe, ob das Ergebnis negativ wurde (C-Flag). Wenn nicht, hochzählen
der Hunderterstelle um 1. Wenn es negativ war, wieder 100 zum Register
addieren, um den alten, richtigen Wert zu haben.
Das gleiche mit der Zehnerstelle. Der verbleibende Rest im Register
sollte dann die Einerstelle sein.
Zu den Hunderter, Zehner und Einerstellen jeweils 030hex addieren, um
den ASCII-Wert zu erhalten. Diese Stellen dann auf dem Display
ausgeben.
Bin für Hinweise sehr dankbar!

Tschööö Sven
Angehängte Dateien:
Gast
Hab´s jetzt nicht alles so genau durchgesehen aber addlw D'100'
addiert 100 zu w und schreibt nicht 100 in w. Bei den Zehnern ist es
das Gleiche.

Steffen
Gast
ist zwar c un avr aber vieleicht hilfte meine function

void USART_sendhex(u08 data){
  u08 data2;
  data2 = (data & 0xf0) >>4;
  if(data2 > 9) data2 += '7'; else data2 += '0';
  USART_send(data2);
  data2 = (data & 0xf);
  if(data2 > 9) data2 += '7'; else data2 += '0';
  USART_send(data2);
};

john
"Bin für Hinweise sehr dankbar!"

Du hast ja garnicht geschrieben, ob es läuft und wenn nicht, welchen
Fehler Du siehst.


Wenn es aber nur ums optimieren geht, da kann man noch einiges machen.

Anbei mal ein optimierter Code für den 8051 (beim PIC kenne ich mich
nicht so aus).


Peter
Angehängte Dateien:
Gast
Steffen hatte doch was wahres gesagt :-)  Ich habe das addlw durch movlw
ersetzt, das war auf jeden Fall EIN Fehler, aber wohl leider nicht der
einzige.
Mit meinem Testregister "Timer" gleich 0 sollte auf dem LCD
eigentlich "000" angezeigt werden. Es erscheint aber 10x (statt x ein
kryptisches Zeichen).
Zur Übersichtlichkeit habe ich das geänderte File nochmal angehangen.

Sven
Angehängte Dateien:
Gast
Hallo Sven

Dein Problem sollte doch sehr gut im Simulator lösbar sein. Schritt für
Schritt durchgehen und die Register beobachten, was abgeht.

Timer = 0 ist zum debuggen erstmal ein schlechter Wert, meiner Meinung
nach. Teste das im Simulator doch mal mit Timer = 125 oder so.

MFG

Dieter
Gast
Hab ich gerade mal schnell probiert, nun kommen 3 Nullen wie gewünscht,
sieht ja spitze aus!!! Ich probier das später mal noch, indem ich das
Register hochzählen lasse um andere Zahlen anzuzeigen. Vielen Dank
erstmal ;-)

Sven
Gast
So, ich hab das mal probiert, indem ich das Register habe hochzählen
lassen. Umrechnung und Anzeige klappt. Ich bin davon ausgegangen, daß
bei negativem Ergebnis das C-Flag gesetzt wird, das war der Aufhänger.
Warum gibts das Datenblatt auch nicht in Deutsch g
Vielen Dank allen für die Hilfen!!

Sven

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.