mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC Umrechnung hex-dezimal


Autor: Sven (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffen,

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

Sven

Autor: john (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Sven (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Harald G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sven

ändere doch mal in der Subroutine

HexDec  die beiden Befehle

                 btfss  Status,C

           in    btfsc  Status,C

mfg

HG

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.