# Im DB Bit bestimmen



## Move (17 März 2010)

Hallo Leute,

eine Frage, gibt es einen Baustein, der mir sagen kann welches Bit innerhalb eines Array gesetzt ist. 
Beispiel: DB20.DBX0.0 WORD 4, also DBW0, DBW2, DBW4
Wenn jetzt hier ein Bit gesetzt wird müsste ich wissen es ist z.b das 20igste Bit (zählweise müsste man dann noch klären).

Gruß
Move


----------



## Ralle (17 März 2010)

Sollte schon gehen.

Variante 1:

Du legst das AR1 auf das erste Word und incrementierst in einer Schleife das AR1 um jeweils P#0.1. Zusätzlich zählst du die Schleifendurchläufe.

Variante 2:

Du legst das AR1 auf das erste Word incrementierst in einer Schleife das AR1 um jeweils P#0.1. Wenn dann das indirekt adressierte Bit 1 ist, errechnest du aus dem Pointer das Word und das Bit. Die Bitadresse ergibt sich aus Bit 0+1+2 des Pointers, die Wordadresse hast du, nachdem du den Pointer um 3 nach rechts geschoben hast. (SRD 3)


----------



## vierlagig (17 März 2010)

```
*
      AUF   DB    20                    //Quell-DB
      AUF   DI    30                    //Ablage DB für Nummern gesetzter Bits

      L     0                           //Adressregister
      LAR1                              // 
      LAR2                              //vorbereiten

      L     64                          //Anzahl der zu Überprüfenden Bits
next: T     MW    10                    //in Schleifenzähler
      U     DBX [AR1,P#0.0]                //ist Bit true
      SPBN  not
      L     MW    10                    //dann die Stelle des Bits
      L     -1
      *I    
      L     64
      +I    
      T     DIW [AR2,P#0.0]             //in Ablage-DB schreiben
      +AR2  P#2.0                       //für nächstes Ablagefach vorbereiten
not:  +AR1  P#0.1                       //nächstes Bit vorbereiten
      L     MW    10
      LOOP  next                        //und LOOOOOOOOOP
```


----------



## Move (17 März 2010)

Hi,

also mit Thematik tue ich mich immer schwer.
Was muss ich jetzt machen?
Habe deine AWL so übernommen
Habe einen DB20 angelegt und einen DB30
Setzte im DB20 DW0 ein Bit und dann....?
Da tut sich erstmal nix

Gruß
Move


----------



## vierlagig (17 März 2010)

Move schrieb:


> Hi,
> 
> also mit Thematik tue ich mich immer schwer.
> Was muss ich jetzt machen?
> ...



ein kleiner fehler hat sich eingeschlichen ... es muß natürlich DBX heißen... hab ich oben geändert...

der DB30 enthält ein ARRAY[0..63] of INT, darin werden die einzelnen bit nummern gespeichert ... siehe anhang...


----------



## Move (18 März 2010)

Hi,

jo jetzt funzt es, ist genau das was ich gesucht habe.
Danke.
:TOOL:


----------



## vierlagig (18 März 2010)

Move schrieb:


> Hi,
> 
> jo jetzt funzt es, ist genau das was ich gesucht habe.
> Danke.
> :TOOL:



mußt halt für eine neue zählung den DB30 inhalt wieder nullen ... ich würd ja -1 vorschlagen...



> in einer welt, die mit 1 beginnt will ich nicht existieren!


----------

