Forum: Mikrocontroller und Digitale Elektronik PIC Umrechnung hex-dezimal


von Sven (Gast)


Angehängte Dateien:

Lesenswert?

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

von Steffen (Gast)


Lesenswert?

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

von Sven (Gast)


Lesenswert?

Hallo Steffen,

stimmt.. aber ich hatte vorher die Register ausdrücklich gelöscht,
daher passt es ;-)

Sven

von john (Gast)


Lesenswert?

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

von Sven (Gast)


Lesenswert?

Hallo John,
So richtig kann ich damit leider nix anfangen, da ich mich noch nicht
mit C beschäftigt habe. Aber trotzdem vielen Dank!!

Sven

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

"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

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

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

von Dieter B. (Gast)


Lesenswert?

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

von Harald G. (Gast)


Lesenswert?

Hallo Sven

ändere doch mal in der Subroutine

HexDec  die beiden Befehle

                 btfss  Status,C

           in    btfsc  Status,C

mfg

HG

von Sven (Gast)


Lesenswert?

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

von Sven (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.