-         

Ergebnis 1 bis 2 von 2

Thema: variable umwandeln

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373

    variable umwandeln

    Anzeige

    hallo,
    ich würde gerne meinen wert vom analogeingang messen und per RS232 an den pc senden leider weiß ich nicht wie ich den binären code in einen ascII code umwandeln soll das ist doch notwendig oder.
    mfg franzl

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •