TIA BIT verschieben

kradolas

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Experten,

ich habe ein riesen Problem. Ich hänge dort schon einige Tage und mir fällt nichts ein.
Hier mal meine Aufgabe:

Eine Operation in unserer Anlage wird durchgeführt, wenn das Bit in einem DB (DB1.DBX220.3) eine 1 hat.
Dieses Signal soll jetzt variabel werden.

In einem anderen DB steht der Wert, um wie viele Bit´s verschoben werden soll (DB8.dbw2)
Dieser Wert kann von -20 - +20 sein.

Z.B: Wenn ich von dem Ursprung ausgehe also DBX220.3 und in dem DB8.DBW2 der Wert -4 steht, dann soll das Signal nun der DBX220.7 sein.

Ich hoffe ich konnte das so irgendwie deutlich machen.

Es handelt sich um eine 315 2DP.

Ich hoofe es kann mir jemand helfen.
 
Das lässt sich mit indirekter Adressierung lösen. Gib das mal als Suchbegriff hier im Forum ein. Das Thema ist deutlich zu komplex, um es mit einem Post zu beantworten. Lies Dir mal durch, was Du in den Suchergebnissen findest und die Fragen, die dann auftauchen, kannst Du hier wieder stellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie sieht das gesamte DBW220 oder DBD220 aus?
Sind dort noch andere Bits gesetzt oder nur dieses eine?

Wenn es nur diese eine Bit ist, kann man SLW, SRW, SLD, SRD verwenden. Das verschiebt alle Bits im Word/DWord um X Stellen nach rechts oder links.
Aber du mußt natürlich sebst dafür sorgen, dass die Grenzen nicht überschritten werden. Wenn dein Bit in DBX220.3 steht, kannst du es ja nur bis zur 220.0 schieben, danach fällt es raus.
Oder du arbeitest mit DBD218, dann hast du auch Rechts noch mehr Platz.

Mir scheint aber, du solltest über das AR1 gehen, da kann man das auch gezielt auf genau das richtige Bit machen.

Code:
      L     P#220.3                     //Pointer auf Adresse 220.3
      L     DB8.DBW    2                //wie weit soll verschoben werden
      ITD
      +D                                //auf den Pointer addieren
      LAR1                              //ins AR 1 laden
      AUF   DB     1                    //den richtigen DB in DB-Register
      U     DB1.DBX  220.3              //Bit gesetzt?
      =     DBX [AR1,P#0.0]             //Bit setzen
 
Zuletzt bearbeitet:
Hier noch eine Kurzform:

Code:
      L     DB8.DBW    2                //wie weit soll verschoben werden
      ITD
      LAR1                              //Ins AR 1 laden
      U     DB1.DBX  220.3              //Bit gesetzt?
      =     DBX [AR1,P#220.3]           //Bit setzen
 
Zuletzt bearbeitet:
Zurück
Oben