02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Avr-Asm-Tutorial S. 115<br />

; Bin2ToAsc<br />

; =========<br />

; wan<strong>de</strong>lt eine 16-Bit-Binärzahl in eine fünfstellige ASCII-kodierte Dezimalzahl um,<br />

Zeiger<br />

; zeigt auf die erste signifikante Ziffer <strong>de</strong>r Zahl, und gibt Anzahl <strong>de</strong>r Ziffern zurück<br />

; Aufruf: 16-Bit-Binärzahl in rBin1H:L, Z zeigt auf Anfang <strong>de</strong>r Zahl (5 Stellen<br />

; erfor<strong>de</strong>rlich, auch bei kleineren Zahlen!)<br />

; Rückkehr: Z zeigt auf erste signifikante Ziffer <strong>de</strong>r ASCII-kodierten Zahl, rBin2L<br />

enthält<br />

; Länge <strong>de</strong>r Zahl (1..5)<br />

; Benutzte Register: rBin1H:L (bleibt erhalten), rBin2H:L (wird überschrieben), rmp<br />

; Aufgerufene Unterroutinen: Bin2ToBcd5, Bin2ToAsc5<br />

;<br />

Bin2ToAsc:<br />

rcall Bin2ToAsc5 ; Wandle Binärzahl in ASCII<br />

ldi rmp,6 ; Zähler auf 6<br />

mov rBin2L,rmp<br />

Bin2ToAsca:<br />

<strong>de</strong>c rBin2L ; verringere Zähler<br />

ld rmp,z+ ; Lese Zeichen und erhöhe Zeiger<br />

cpi rmp,' ' ; war Leerzeichen?<br />

breq Bin2ToAsca ; Nein, war nicht<br />

sbiw ZL,1 ; ein Zeichen rückwärts<br />

ret ; fertig<br />

; Bin2ToBcd5<br />

; ==========<br />

; wan<strong>de</strong>lt 16-Bit-Binärzahl in 5-stellige BCD-Zahl um<br />

; Aufruf: 16-Bit-Binärzahl in rBin1H:L, Z zeigt auf die erste Stelle <strong>de</strong>r BCD-kodierten<br />

; Resultats<br />

; Stellen: Die BCD-Zahl hat exakt 5 gültige Stellen.<br />

; Rückkehr: Z zeigt auf die höchste BCD-Stelle<br />

; Benötigte Register: rBin1H:L (wird erhalten), rBin2H:L (wird nicht erhalten), rmp<br />

; Aufgerufene Unterroutinen: Bin2ToDigit<br />

;<br />

Bin2ToBcd5:<br />

push rBin1H ; Rette Inhalt <strong>de</strong>r Register rBin1H:L<br />

push rBin1L<br />

ldi rmp,HIGH(10000) ; La<strong>de</strong> 10.000 in rBin2H:L<br />

mov rBin2H,rmp<br />

ldi rmp,LOW(10000)<br />

mov rBin2L,rmp<br />

rcall Bin2ToDigit ; Ermittle 5.Stelle durch Abziehen<br />

ldi rmp,HIGH(1000) ; La<strong>de</strong> 1.000 in rBin2H:L<br />

mov rBin2H,rmp<br />

ldi rmp,LOW(1000)<br />

mov rBin2L,rmp<br />

rcall Bin2ToDigit ; Ermittle 4.Stelle durch Abziehen<br />

ldi rmp,HIGH(100) ; La<strong>de</strong> 100 in rBin2H:L<br />

mov rBin2H,rmp<br />

ldi rmp,LOW(100)<br />

mov rBin2L,rmp<br />

rcall Bin2ToDigit ; Ermittle 3.Stelle durch Abziehen<br />

ldi rmp,HIGH(10) ; La<strong>de</strong> 10 in rBin2H:L<br />

mov rBin2H,rmp<br />

ldi rmp,LOW(10)<br />

mov rBin2L,rmp<br />

rcall Bin2ToDigit ; Ermittle 2.Stelle durch Abziehen<br />

st z,rBin1L ; Rest sind Einer<br />

sbiw ZL,4 ; Setze Zeiger Z auf 5.Stelle (erste Ziffer)<br />

pop rBin1L ; Stelle <strong>de</strong>n Originalwert wie<strong>de</strong>r her<br />

pop rBin1H<br />

ret ; und kehre zurück<br />

; Bin2ToDigit<br />

; ===========<br />

; ermittelt eine <strong>de</strong>zimale Ziffer durch fortgesetztes Abziehen einer binär kodierten<br />

; Dezimalstelle

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!