- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 4 von 4

Thema: Von dezimal zu dual Umrechnung

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209

    Von dezimal zu dual Umrechnung

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    Bin gerade dabei mir 2 kleine Programme zu schreiben, einmal für die Umrechnung von dual->dezimal und einmal von dezimal->dual.
    Ersteres klappt prima nur dezimal-> dual läuft nicht. Möchte ich jetzt zum Beispiel die Zahl 255 in 8 Dualzahlen zerlegen (was ja eigendlich 11111111 also 8x1 ergeben müsste), kommt der Simulator aber auf 11111110!!!!! Woran kann das liegen??? Ich hoffe der Code ist einigermaßen verständlich

    Code:
     Dim Dual1 As Bit
    Dim Dual2 As Bit
    Dim Dual3 As Bit
    Dim Dual4 As Bit
    Dim Dual5 As Bit
    Dim Dual6 As Bit
    Dim Dual7 As Bit
    Dim Dual8 As Bit
    
    Dim Dezi1 As Byte
    Dim Dezi2 as byte
    Dim Dezi3 as byte
    Dim Dezi4 as byte
    Dim Dezi5 as byte
    Dim Dezi6 as byte
    Dim Dezi7 as byte
    Dim Dezi8 As Byte
    
    Dim Dezidualtimer As Byte
    Dezidualtimer = 0
    
    Dezi1 = 255
    
    
    
    
    
    
    Dezimal_dual:
    Dezidualtimer = Dezidualtimer + 1
    Dezi2 = Dezi1 / 2                                           '127
    Dezi3 = Dezi2 + Dezi2                                       '254
    Dezi4 = Dezi3 + 1                                           '255
    Select Case Dezidualtimer
       Case 1 : Goto Dezimal_dual_1
       Case 2 : Goto Dezimal_dual_2
       Case 3 : Goto Dezimal_dual_3
       Case 4 : Goto Dezimal_dual_4
       Case 5 : Goto Dezimal_dual_5
       Case 6 : Goto Dezimal_dual_6
       Case 7 : Goto Dezimal_dual_7
       Case 8 : Goto Dezimal_dual_8
    End Select
    Dezimal_dual_1:
    If Dezi4 = Dezi1 Then
       Dual8 = 1
       Else
          Dual8 = 0
       End If
       Goto Dezimal_dual_schleife
    Dezimal_dual_2:
    If Dezi4 = Dezi1 Then
       Dual7 = 1
       Else
          Dual7 = 0
       End If
       Goto Dezimal_dual_schleife
    Dezimal_dual_3:
    If Dezi4 = Dezi1 Then
       Dual6 = 1
       Else
          Dual6 = 0
       End If
       Goto Dezimal_dual_schleife
    Dezimal_dual_4:
    If Dezi4 = Dezi1 Then
       Dual5 = 1
       Else
          Dual5 = 0
       End If
       Goto Dezimal_dual_schleife
    Dezimal_dual_5:
    If Dezi4 = Dezi1 Then
       Dual4 = 1
       Else
          Dual4 = 0
       End If
       Goto Dezimal_dual_schleife
    Dezimal_dual_6:
    If Dezi4 = Dezi1 Then
       Dual3 = 1
       Else
          Dual3 = 0
       End If
       Goto Dezimal_dual_schleife
    Dezimal_dual_7:
    If Dezi4 = Dezi1 Then
       Dual2 = 1
       Else
          Dual3 = 0
       End If
       Goto Dezimal_dual_schleife
    Dezimal_dual_8:
    If Dezi4 = Dezi1 Then
       Dual1 = 1
       Else
          Dual1 = 0
       End If
       Goto Dezimal_dual_schleife
    
    Dezimal_dual_schleife:
    Dezi1 = Dezi2
    If Dezidualtimer > 8 Then
       'Ende und Funktion
       Print Dual1 ; Dual2 ; Dual3 ; Dual4 ; Dual5 ; Dual6 ; Dual7 ; Dual8
       Wait 300
       End If
    Goto Dezimal_dual
    MfG Killer

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.01.2004
    Ort
    64367 Mühltal bei Darmstadt
    Alter
    60
    Beiträge
    337
    Mir wäre da so zu umständlich

    Habe jetzt zwar kein Bascom zur Hand, aber folgender QuickBasic-code sollte sich einfach anpassen lassen.
    Code:
    DIM erg AS STRING
    DIM a AS INTEGER, b AS INTEGER, c AS INTEGER, d AS INTEGER, e AS INTEGER
    erg = ""
    a = 0'zahl die konvertiert wird
    b = 256 'bei 8 bit umwandlung (2 hoch 8)+1=256
    e = a 'Arbeitsvariable, a bleibt erhalten fr ausgabe
    DO
    	c = b / 2
    	'c hat bei 8 bit nacheinander die werte 128,64,32,16,8,4,2,1
    	d = e \ c'Modulare Division
    	IF d >= 1 THEN
    		erg = erg + "1"'erzeuge ausgabe fr bitposition
    		e = e - c 'reduziere arbeitsvariable um den der position entsprechenden wert
    	ELSE
    		erg = erg + "0"
    	END IF
    	b = c'setze neuen anfangswert fr b
    LOOP UNTIL b = 1
    PRINT "dezimal " + STR$(a) + " entspricht dual " + erg
    MfG

    Michael
    ______________________________________________
    F: Glauben Sie an außerirdische Intelligenz?
    A: Natürlich, ich gebe die Hoffnung nicht auf, daß es irgendwo Intelligenz gibt.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Du kannst aber doch ganz einfach alle 8 Bits Deines Bytes einzeln als Byte.0 bis Byte.7 ansprechen bzw. abfragen.

    Wenn ich die Variable "Zahl" in ihre 8 Bits zerlegen müsste, würde ich das vielleicht so machen:

    Code:
    Dim Zahl as Byte
    
    Dim Dual0 as Bit
    Dim Dual1 as Bit
    Dim Dual2 as Bit
    Dim Dual3 as Bit
    Dim Dual4 as Bit
    Dim Dual5 as Bit
    Dim Dual6 as Bit
    Dim Dual7 as Bit
    
    Do
    
    Zahl = ...  (0-255)
    
    Dual0 = Zahl.0
    Dual1 = Zahl.1
    Dual2 = Zahl.2
    ...
    Dual7 = Zahl.7
    
    Print Dual0,;Dual1; Dual2;...; Dual7
    
    Loop
    Man könnte natürlich versucht sein, Dual(N) als Array anzulegen und eine Schleife mit einem Zähler N von 1-8 durchlaufen zu lassen. Arrays gehen aber leider mit Bit-Variablen nicht...

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Gut danke. Ich denke das ist die einfachste Lösung!

    MfG Killer

Berechtigungen

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

LiFePO4 Speicher Test