beginner_de
beginner_de
beginner_de
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Avr-Asm-Tutorial S. 110<br />
durch Additionen vervielfacht. Aufwändig daran ist, dass praktisch bei je<strong>de</strong>m Addieren ein Überlauf<br />
<strong>de</strong>nkbar ist und abgefangen wer<strong>de</strong>n muss. Wer keine zu langen Zahlen zulässt o<strong>de</strong>r wem es egal ist,<br />
ob Unsinn rauskommt, kann die Branch-Anweisungen alle rauswerfen und das Verfahren damit etwas<br />
beschleunigen.<br />
13.5 Von binär nach ASCII<br />
Die Wandlung von Binär nach ASCII erfolgt in <strong>de</strong>r Routine Bin2ToAsc5. Das Ergebnis ist generell<br />
fünfstellig. Die eigentliche Umwandlung erfolgt durch Aufruf von Bin2ToBcd5. Wie das funktioniert,<br />
wird weiter unten beschrieben.<br />
Wird statt Bin2ToAsc5 die Routine Bin2ToAsc aufgerufen, kriegt man <strong>de</strong>n Zeiger Z auf die erste<br />
Nicht-Null in <strong>de</strong>r Zahl gesetzt und die Anzahl <strong>de</strong>r Stellen im Register rBin2L zurück. Das ist bequem,<br />
wenn man das Ergebnis über die serielle Schnittstelle sen<strong>de</strong>n will und unnötigen Leerzeichen-Verkehr<br />
vermei<strong>de</strong>n will.<br />
13.6 Von binär nach BCD<br />
Bin2ToBcd5 rechnet die Binärzahl in rBin1H:L in <strong>de</strong>zimal um. Auch dieses Verfahren ist etwas<br />
zeitaufwändig, aber sicher leicht zu verstehen. Die Umwandlung erfolgt durch fortgesetztes Abziehen<br />
immer kleiner wer<strong>de</strong>n<strong>de</strong>r Binärzahlen, die die <strong>de</strong>zimalen Stellen repräsentieren, also 10.000,<br />
1.000, 100 und 10. Nur bei <strong>de</strong>n Einern wird von diesem Schema abgewichen, hi.<br />
13.7 Von binär nach Hex<br />
Die Routine Bin2ToHex4 produziert aus <strong>de</strong>r Binärzahl eine vierstellige Hex-ASCII-Zahl, die etwas<br />
leichter zu lesen ist als das Original in binär. O<strong>de</strong>r mit welcher Wahrscheinlichkeit verschreiben Sie<br />
sich beim Abtippen <strong>de</strong>r Zahl 1011011001011110? Da ist B65E doch etwas bequemer und leichter zu<br />
memorieren, fast so wie 46686 in <strong>de</strong>zimal.<br />
Die Routine produziert die Hex-Ziffern A bis F in Großbuchstaben. Wer es lieber in a .. f mag: bitte<br />
schön, Quelltext än<strong>de</strong>rn.<br />
13.8 Von Hex nach Binär<br />
Mit Hex4ToBin2 geht es <strong>de</strong>n umgekehrten Weg. Da hier das Problem <strong>de</strong>r falschen Ziffern auftreten<br />
kann, ist wie<strong>de</strong>r je<strong>de</strong> Menge Fehlerbehandlungsco<strong>de</strong> zusätzlich nötig.<br />
13.9 Quellco<strong>de</strong><br />
; **************************************************************************************<br />
; * Routinen zur Zahlumwandlung, V 0.1 Januar 2002 , (C)2002 info avr-asm-tutorial.net *<br />
; **************************************************************************************<br />
; Die folgen<strong>de</strong>n Regeln gelten für alle Routinen zur Zahlumwandlung:<br />
; - Fehler während <strong>de</strong>r Umwandlung wer<strong>de</strong>n durch ein gesetztes T-Bit im Status-Register<br />
; signalisiert.<br />
; - Der Z Zeiger zeigt entwe<strong>de</strong>r in das SRAM (Adresse >=$0060) o<strong>de</strong>r auf einen<br />
; Registerbereich (Adressen $0000 bis $001D), die Register R0, R16 und R30/31 dürfen<br />
; nicht in <strong>de</strong>m benutzten Bereich liegen!<br />
; - ASCII- und BCD-kodierte mehrstellige Zahlen sind absteigend geordnet, d.h. Die<br />
; höherwertigen Ziffern haben die niedrigerwertigen Adressen.<br />
; - 16-bit-Binärzahlen sind generell in <strong>de</strong>n Registern rBin1H:rBin1L lokalisiert, bei<br />
; einigen Routinen wird zusätzlich rBin2H:rBin2L verwen<strong>de</strong>t. Diese müssen im<br />
; Hauptprogramm <strong>de</strong>finiert wer<strong>de</strong>n.