Hey,
also ich mache es mit zwei Unterprogrammen:
1. Zerlegen in 3 Dezimalzahlen
Code:
; ----------------------------------------------------------------
; 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
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
Lesezeichen