PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : binär zu bcd wandler



dennse159
16.05.2007, 12:51
ja moin leute
hab mal wieder ein problem... will mir einen binär zu bcd Wandler programieren. und jedes mal wenn ich jezz zb von einer 255 eine hundert abziehe wir das Carry- bzw Digit-carry- Flag gestetzt. kann mir jemand sagen wieso?

hier noch mein code...



main
clrf BCD_100er
clrf BCD_10er
clrf BCD_1er
clrdc
clrc
btfss PORTA,0
goto main

;Lade variable die in BCD zu Wandeln ist.
movlw D'255'
movwf ZU_WANDELN

;Subtrahiere den wert mit 100 solange bis Ergebnis 0
;wenn ja dann springe zu "weiter" sonst wiederhole
;bis ergebniss 0
Hunderter
movlw D'100'
subwf ZU_WANDELN,1
incf BCD_100er,1
bdc weiter
goto Hunderter

;addiere den Wert 100 zur speicherzelle
;um wieder einen genauen wert zu habe
weiter
clrdc
decf BCD_100er,1
movlw D'100'
addwf ZU_WANDELN,1
clrc

;Subtrahiere den wert mit 10 solange bis Ergebnis 0
;wenn ja dann springe zu "Zehner" sonst wiederhole
;bis ergebniss 0
Zehner
clrdc
movlw D'10'
subwf ZU_WANDELN,1
incf BCD_10er,1
bdc go_on
goto Zehner

;addiere den Wert 100 zur speicherzelle
;um wieder einen genauen wert zu habe
go_on
clrdc
decf BCD_100er,1
movlw D'10'
addwf ZU_WANDELN,1

;Subtrahiere den wert mit 1 solange bis Ergebnis 0
;wenn ja dann springe zu "Zehner" sonst wiederhole
;bis ergebniss 0
Einer
movlw D'1'
subwf ZU_WANDELN,1
incf BCD_1er,1
bdc Ausgeben
goto Einer

wäre über jede antwort erfreut...

Yossarian
16.05.2007, 13:52
Hallo
beim Subtrahieren verhält sich das Carry Flag andersherum als beim Addieren.

Mit freundlichen Grüßen
Benno

dennse159
16.05.2007, 14:04
also wird bei jedem subtrahieren Carry gesetzt und erst wenn der übertrag von "0" auf "255" wieder gelöscht oda wie?

Yossarian
16.05.2007, 15:18
Hallo
Steht im Datenblatt.
Pobier es einfach aus.

Mit freundlichen Grüßen
Benno