Negative Exponenten

Onkel Dagobert

Level-3
Beiträge
5.816
Reaktionspunkte
1.444
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich bekomme von einem DP-Teilnehmer einen codierten Wert zurück.

Die Bits haben folgende Bedeutung:
Bit 0 == 2^-5 == 0,03125
Bit 1 == 2^-4 == 0,06250
Bit 2 == 2^-3 == 0,12500
Bit 3 == 2^-2 == 0,25000
Bit 4 == 2^-1 == 0,50000
Bit 5 == 2^-0 == 1,00000

Die Summe der Werte entspricht einem Prozentwert von 0 bis ca. 197 den ich verarbeiten muss.

Gelöst habe ich es erst einmal wie folgt:

Code:
//*** Motorstrom berechnen
      L     2#0
//+++ Bit 0 == 2^-5
      U     #SF.IN.MOTORSTROM_BIT_0
      SPBN  M0
      L     3125                        // 0,03125
      +D    
//+++ Bit 1 == 2^-4
M0:   U     #SF.IN.MOTORSTROM_BIT_1
      SPBN  M1
      L     6250                        // 0,06250
      +D    
//+++ Bit 2 == 2^-3
M1:   U     #SF.IN.MOTORSTROM_BIT_2
      SPBN  M2
      L     12500                       // 0,12500
      +D    
//+++ Bit 3 == 2^-2
M2:   U     #SF.IN.MOTORSTROM_BIT_3
      SPBN  M3
      L     25000                       // 0,25000
      +D    
//+++ Bit 4 == 2^-1
M3:   U     #SF.IN.MOTORSTROM_BIT_4
      SPBN  M4
      L     L#50000                     // 0,50000
      +D    
//+++ Bit 5 == 2^0
M4:   U     #SF.IN.MOTORSTROM_BIT_5
      SPBN  M5
      L     L#100000                    // 1,00000
      +D    
M5:   T     #TEMP_DINT

Es muss doch aber auch etwas eleganter gehen. Hat jemand eine Idee?


Gruß, Onkel
 
Also, so wie mich das anschaut, Ist Bit 1 immer das doppelt von Bit 0, Bit 2 das doppelte von Bit 1 usw.
Bei Binärzahlen verhält es sich genau gleich - Bit 1 (2) ist das doppelt von Bit 0 (1) - Bit 2 (4) is das doppelte von Bit 1 usw.

Das heißt, dass Du eigentlich nur das Eingangsbyte (oder Wort) * 3125 multiplizieren musst:

Code:
L    SF.IN.MOTORSTROM
L    2#11111
UW
ITD
L    L#3125
*D
T    #TEMP_DINT
Aus dem Wort werden alle Bits außer den untersten 6 ausmaskiert, anschließend mal 3125 multipliziert - fertig!


mfg
Maxl
 
Zuletzt bearbeitet:
Hallo Maxl,

genau das habe ich gesucht, danke!
Die letzte Woche war wohl doch etwas zu stressig :( . Und morgen muss ich nochmal ran :twisted: .


Gruß, Onkel
 
Zurück
Oben