Archiv verlassen und diese Seite im Standarddesign anzeigen : Dezimalzahl in ihre Ziffern zerteilen
Hallo
Ich muss für die ausgabe einer dezimalzahl an einer 7seg. Anzeige eine Variable mit dem nahmen Zahl die einen wert von 0-255 hat in ihre 3 ziffern zerlegen und in den variablen zein zzwei zdrei speichern nur weiß ich nicht wie ich die zahl zerlegen kann. ich benutzte einen PIC16F690
mfG
IchKG
Hallo IchKG!
Aus deiner Beschreibung vermute ich, dass deine Variable "Zahl" eine 8-bit hexadezimal (binär) Zahl ist. Die musst du zuerst in eine dezimale Zahl umwandeln und erst danach die 3-stellige Dezimalzahl ausgeben. Über hexadezimal zu dezimal Wandlung sind schon mehrere Beiträge in diesem Forum zu finden.
MfG
Wenn es mit dividieren nix is, kannst du:
zein = wie oft kann ich 100 abziehen
zzwei = wie oft kann ich (vom Rest) 10 abziehen
zdrei = Rest
so versuch ichs mal PicNICK
Du kannst dir auch das anschauen:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=37867&highlight=hex+wandlung
MfG
Du kannst dir auch das anschauen:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=37867&highlight=hex+wandlung
MfG
ich will keine hex umwandlung machen sondern so wie das PICNick geschrieben hat
einfach nur eine Dezimalzahl in ihre stellen zerteilen
Sorry, dann vergiss, bitte, meine Aussagen! :)
MfG
Hey,
also ich mache es mit zwei Unterprogrammen:
1. Zerlegen in 3 Dezimalzahlen
; ----------------------------------------------------------------
; Variablen im RAM
; ----------------------------------------------------------------
cblock
bcdE ; Einerstellen
bcdZ ; Zehnerstellen
bcdH ; Hunderterstellen
endc
; ----------------------------------------------------------------
; Funktion zum Wandeln einer 8 Bit Binaerzahl in 3 Stellen bcd
; Uebergabe ist w Register
; Ergebnisse in bcdE, bcdZ, bcdH
; ----------------------------------------------------------------
binbcd: clrf bcdH ; bcdH loeschen
clrf bcdZ ; bcdZ loeschen
movwf bcdE ; w nach bcdE
bcd1: movlw 0x0a ; lade w mit 10
subwf bcdE,w ; bcdE - 10 in w
btfss STATUS,C ; bcdE < 10 ?
goto bcd2 ; ja -> bcd2
movwf bcdE ; nein -> bcdE - 10
incf bcdZ,f ; bcdZ + 1
movlw 0x0a ; lade w mit 10
subwf bcdZ,w ; bcdZ - 10 in w
btfss STATUS,C ; bcdZ = 10 ?
goto bcd1 ; nein -> bcd1
clrf bcdZ ; ja -> bcdZ = 0
incf bcdH,f ; bcdH + 1
goto bcd1 ; gehe zu bcd1
bcd2: return
2. Umwandeln in 7-Segment Code
;************************************************* ************************************************** *********************************
; Tabelle der Siebensegmentcodes von 0 bis 9 an RB1...RB7
;************************************************* ************************************************** *********************************
tab addwf PCL,1 ; Addiert W und PCL. Ergebnis steht in PCL,was Sprung zum entsprechenden Ausgabewert ergibt
retlw 0x7E ; 0
retlw 0xC ; 1
retlw 0xB6 ; 2
retlw 0x9E ; 3
retlw 0xCC ; 4
retlw 0xDA ; 5
retlw 0xFA ; 6
retlw 0xE ; 7
retlw 0xFE ; 8
retlw 0xDE ; 9
Hoffe es hilft dir.
Gruß Carsten
danke carsten genau sowas hab ich gesucht
mfG
Dacht ich mir, deswegen habe ich es gepostet. Ich habe es damals wo ich es gesucht habe über google gefunden bzw. selbst erstellt. Also den ersten Code findest du in Google unter der bezeichnung binbcd Wandlung und den zweiten habe ich selbst erstellt.
subwf bcdZ,w ; bcdZ - 10 in w
btfss STATUS,C ; bcdZ = 10 ?
goto bcd1 ; nein -> bcd1
in Komentar steht = 10? du überprüfst hier ja das C bit aber für einen == Vergleich muss man ja das Z bit prüfen
Das Z-Bit überprüfst du bei einem Vergleich von =0 .
Ich habe diesen Code nicht geschrieben, sondern einfach übernommen.
ja eh
du willst prüfen ob die variable = 10 ist
indem du variable-10 rechnest und wen das dan 0 ergiebt also das Z bit gesetzt ist das stimmt die aussage = 10
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.