3 Byte in eine Structur laden

INST

Level-2
Beiträge
272
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
ich möchte 3 Bytes von Peripherieeingänge einlesen und in eine Structur laden. Es muss Multiinstanzfähig sein, also das ganze wird 4 mal aufgerufen.

Würde es einfacher gehen ?



Code:
 L     #Adr_PAE                    // Anfangsadresse in der Hardwarekonfig
      SLD   3                           // Die 3 Kommastellen des Pointerformats ausgleichen
      LAR1  
      L     PEW [AR1,P#0.0]
      T     #Eingangsword
      L     PEB [AR1,P#2.0]
      T     #Eingangsbyte
      L     #Adr_PAE
      L     272
      ==I   
      SPBN  m001
      L     DID   20
      T     #Temp_Kanal_In
      SPA   m004
m001: NOP   0
      L     #Adr_PAE
      L     275
      ==I   
      SPBN  m002
      L     DID   44
      T     #Temp_Kanal_In
      SPA   m004
m002: NOP   0
      L     #Adr_PAE
      L     278
      ==I   
      SPBN  m003
      L     DID   68
      T     #Temp_Kanal_In
      SPA   m004
m003: NOP   0
      L     #Adr_PAE
      L     281
      ==I   
      SPBN  m004
      L     DID   92
      T     #Temp_Kanal_In
m004: NOP   0
      CALL  "BLKMOV"
       SRCBLK :=#Temp_Kanal_In          // Daten aus PAE in den Struct In_Zykluskanal schreiben
       RET_VAL:=#Temp_Int
       DSTBLK :=#In_DP
      NOP   0
 
hmm, ungetestet, aber müßte gehen:

Code:
*
      TAR1  #dAR1temp                   //ARs
      TAR2  #dAR2temp                   //retten
      L     #Adr_PAE                    //PED
      SLD   3
      LAR1                              //adressieren
      L     PED [AR1,P#0.0]             //lesen
      T     #dtemp                      //und speichern
      LAR1  P##dTemp                    //auf dTemp zeigen
      L     #dAR2temp                   //MI-fähig
      +AR1                              //machen
      LAR2  P##InDP                     //auf InDP zeigen
      L     #dAR2temp                   //MI-fähig
      +AR2                              //machen
      L     3                           //die 3
next: T     #iCounter
      L     B [AR1,P#0.0]               //bytes
      T     B [AR2,P#0.0]               //ins struct schreiben
      +AR1  P#1.0
      +AR2  P#1.0
      L     #iCounter
      LOOP  next
      LAR1  #dAR1temp                   //ARs
      LAR2  #dAR2temp                   //wiederherstellen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die schleife ist als beispiel für viele bytes gedacht :rolleyes:

bei den drei bytes gehts so hier schneller:

Code:
*
      L     W [AR1,P#0.0]               //bytes
      T     W [AR2,P#0.0]               //ins struct schreiben
      L     B [AR1,P#2.0]
      T     B [AR2,P#2.0]

:-D
 
Hi

danke für die Antwort, leider geht es nicht, da das Gerät nur 3 Bytes ausgibt und daher in der Hardwarekonfig nur 3 Bytes vorhanden sind.
Wenn wir das PED laden, dann bringt die CPU Peripherieeingang nicht vorhanden da das letzte Byte fehlt.

Hast du noch einen andern Vorschlag?
 
Code:
*
      TAR2  #dAR2temp                   //retten
      L     #Adr_PAE                    //PED
      SLD   3
      LAR1                              //adressieren
      L     PEW [AR1,P#0.0]             //lesen
      T     #wtemp                      //und speichern
      L     PEB [AR1,P#2.0]             //lesen
      T     #btemp                      //und speichern
      LAR1  P##InDP                     //auf InDP zeigen
      L     #dAR2temp                   //MI-fähig
      +AR1                              //machen
      L     #wtemp               
      T     W [AR1,P#0.0]               //ins struct schreiben
      
      L     #btemp
      T     B [AR1,p#2.0]
      
      LAR2  #dAR2temp                   //wiederherstellen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für was wird das AR2 gespeichert und was steht im AR2 drin wenn ein Bausteinaufruf geschieht ?

Könntest du es bitte mal durchspielen mit Adr_PAE 272 und 275 ?
 
Zurück
Oben