Hallo handwerker,
wenn ich Deine Frage richtig verstehe, zeigst Du zur Zeit 8-Bit Binärwerte an, möchtest diese aber lieber als BCD-Werte darstellen. Dann brauchst Du eine kleine Routine, die Dir Binärwerte<60 in BCD (Zehnerstelle höherwertiges Nibble, Einerstelle niederwertiges Nibble) umwandelt.
Das könnte man ganz primitiv durch mehrfache Subtraktion von 10 lösen:
Code:
; r16 enthält Binärwert <60
; r17 wird als Zehner-Zähler verwendet
; Ergebnis in r16: Zehner-Stelle b4-b7, Einerstelle b0-b3
to_bcd:
ser r17 ; Zehner-Zähler = -1
bcd_lp:
inc r17 ; ++Zehner-Zähler
subi r16, 10 ; -10
brpl bcd_lp ; noch einmal, wenn >=0
swap r17 ; Zehnerstellen: b4-b7
subi r16,-10 ; letzte Subtraktion rückgängig machen
or r16,r17 ; Einerstellen: b0-b3
Habe ich schnell mal so hingeschrieben -- ist sicher noch optimierbar; wobei die Optimierung für eine Uhr aber wohl eher unkritisch ist.
Gruß
Fred
Lesezeichen