Doppelwort im DB schieben

Revave

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich suche eine möglichkeit um z.b. 7 doppelworter zu schieben.
Die wirkung muss dann gleich sein wie ein standard schiebregister, aber dann nicht mit ein bit aber ein db-adresse.

adressen: z.b.
DB10.DBD0 //REAL
DB10.DBD4 //REAL
DB10.DBD8//REAL
DB10.DBD12 //REAL
DB10.DBD16 //REAL
DB10.DBD20 //REAL
DB10.DBD24 //REAL

So, wann ein bit auf 1 (positieven flank) gesetst werde muss dbd0 nach dbd4, dbd4 nach dbd8 etc. kopiert werden.
[/b]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
Dieses Netzwerk schiebt die Teileinformationen für einen Rundtisch mit X
Nestern. Dabei werden die Informationen nach rechts im Kreis verschoben, d.h.
die Info aus Nest N erscheint in Nest N+1, die Info aus Nest X im Nest 1 !!!
Als Informationseinheit dient eine DInt-Variable.

      U     #Rundtisch_in_POS
      FP    L     10.0
      SPBN  ENDI

      AUF   #Info_DB
      L     #Anzahl_Nester              //Intitialisierung der
      T     #Nest_Counter               //Schleifenvariable

      L     #Start_Addr                 //Bei diesem Datenwort beginnt der Ringpuffer (in diesem Bsp. muß Start-Addr >= 4 sein!!!)
      L     4
     -I                                
      T     #T_Start_addr

      L     #Nest_Counter
      SLW   2                           //Nest_Counter mit 4 Multipl., wegen 2xDoppelwort !!
      L     #T_Start_addr               //letzte Nest-Variable sichern
      +I    
      ITD   
      SLD   3                           //Adreßregister 1 mit Adresse laden
      LAR1  
      L     DBD [AR1,P#0.0]
      T     #Schmiervariable            //in der Schmiervariable steht Inhalt vom letzten Nest 

      L     #Nest_Counter               //Schleife beginnt mit lestzem Nest -1
      L     1
      -I                                //das Ergebnis muß im Nest_Counter landen

//hier beginnt die Schleife

NEXT: T     #Nest_Counter               //der dekrementierte Akku muß wieder in Nest_Counter landen
      SLW   2                           //Nest_Counter mit 4 Multipl., wegen Doppelwort !!

      L     #T_Start_addr
      +I    
      ITD   
      SLD   3                           //Adreßregister 1 mit Adresse laden
      LAR1  
      L     DBD [AR1,P#0.0]             //es wird immer von Nest in Nest + 1 geschoben
      T     DBD [AR1,P#4.0]

      L     #Nest_Counter               //wenn Counter = 0, dann Ende der Schleife
      LOOP  NEXT

//zum Schluß noch gesicherte letzte Variable in erste Variable schreiben
      L     #Start_Addr
      ITD   
      SLD   3                           //Adreßregister 1 mit Adresse laden
      LAR1  
      L     #Schmiervariable
      T     DBD [AR1,P#0.0]

ENDI: NOP   0

Das ist mal aus einem Baustein rauskopiert und kann dir als Anregeung dienen.
 
Hallo,

Volker, sie haben mir sehr froh gemacht!!
Nach ein kleines anderung lauft das programm sehr gut!!

Vielen dank!!
 
Zurück
Oben