die Umwandlung ist notwendig, sonst bekommste aum RS232 nur die Binärwerte, und das ist eher ned gut.

Die umwnadlung von Binär in ASCII ist eigentlich recht simpel, du musst deine Binärrzahl erst in eine BCD zahl verwandeln, und dann diese in eine ASCII:

Code:
;
; Bin2ToAsc
; =========
; wandelt eine 16-Bit-Binärzahl in eine fünfstellige ASCII-
;   kodierte Dezimalzahl um, Zeiger zeigt auf die erste signi-
;   fikante Ziffer der Zahl, und gibt Anzahl der Ziffern zu-
;   rück
; Aufruf: 16-Bit-Binärzahl in rBin1H:L, Z zeigt auf Anfang
;   der Zahl (5 Stellen erforderlich, auch bei kleineren Zah-
;   len!)
; Rückkehr: Z zeigt auf erste signifikante Ziffer der ASCII-
;   kodierten Zahl, rBin2L enthält Länge der Zahl (1..5)
; Benutzte Register: rBin1H:L (bleibt erhalten), rBin2H:L
;   (wird überschrieben), rmp
; Aufgerufene Unterroutinen: Bin2ToBcd5, Bin2ToAsc5
;
Bin2ToAsc:
	rcall Bin2ToAsc5 ; Wandle Binärzahl in ASCII
	ldi rmp,6 ; Zähler auf 6
	mov rBin2L,rmp
Bin2ToAsca:
	dec rBin2L ; verringere Zähler
	ld rmp,z+ ; Lese Zeichen und erhöhe Zeiger
	cpi rmp,' ' ; war Leerzeichen?
	breq Bin2ToAsca ; Nein, war nicht
	sbiw ZL,1 ; ein Zeichen rückwärts
	ret ; fertig

;
; Bin2ToBcd5
; ==========
; wandelt 16-Bit-Binärzahl in 5-stellige BCD-Zahl um
; Aufruf: 16-Bit-Binärzahl in rBin1H:L, Z zeigt auf die
;   erste Stelle der BCD-kodierten Resultats
; Stellen: Die BCD-Zahl hat exakt 5 gültige Stellen.
; Rückkehr: Z zeigt auf die höchste BCD-Stelle
; Benötigte Register: rBin1H:L (wird erhalten), rBin2H:L
;   (wird nicht wieder hergestellt), rmp
; Aufgerufene Unterroutinen: Bin2ToDigit
;
Bin2ToBcd5:
	push rBin1H ; Rette Inhalt der Register rBin1H:L
	push rBin1L
	ldi rmp,HIGH(10000) ; Lade 10.000 in rBin2H:L
	mov rBin2H,rmp
	ldi rmp,LOW(10000)
	mov rBin2L,rmp
	rcall Bin2ToDigit ; Ermittle 5.Stelle durch Abziehen
	ldi rmp,HIGH(1000) ; Lade 1.000 in rBin2H:L
	mov rBin2H,rmp
	ldi rmp,LOW(1000)
	mov rBin2L,rmp
	rcall Bin2ToDigit ; Ermittle 4.Stelle durch Abziehen
	ldi rmp,HIGH(100) ; Lade 100 in rBin2H:L
	mov rBin2H,rmp
	ldi rmp,LOW(100)
	mov rBin2L,rmp
	rcall Bin2ToDigit ; Ermittle 3.Stelle durch Abziehen
	ldi rmp,HIGH(10) ; Lade 10 in rBin2H:L
	mov rBin2H,rmp
	ldi rmp,LOW(10)
	mov rBin2L,rmp
	rcall Bin2ToDigit ; Ermittle 2.Stelle durch Abziehen
	st z,rBin1L ; Rest sind Einer
	sbiw ZL,4 ; Setze Zeiger Z auf 5.Stelle (erste Ziffer)
	pop rBin1L ; Stelle den Originalwert wieder her
	pop rBin1H
	ret ; und kehre zurück