Word Bit auslesen

Zuviel Werbung?
-> Hier kostenlos registrieren
Man könnte auch einen FC nehmen und diesen dann von außen beschalten.
So wäre die Funktion wiederverwendbar und im Programm ev. etwas aufgeräumter.


Code:
######
FC1:
######
      TAR1  #_dTempAR1
      TAR2  #_dTempAR2

      L     P##in_dword1
      LAR1  
      L     P##in_dword2
      LAR2  
      L     #bitnr
      +AR1  
      +AR2  
      //TAR1  MD    40  //Diagnose Doppelwort fuer Zeigeransicht in VAT
      U      [AR1,P#0.0]
      U      [AR2,P#0.0]
      =     #RET_VAL

      LAR1  #_dTempAR1
      LAR2  #_dTempAR2

#####
OB1:
#####

      L     MD    20
      TAD   
      T     MD    60

      L     MD    24
      TAD   
      T     MD    64

      CALL  FC     1
       in_dword1:=MD60
       in_dword2:=MD64
       bitnr    :=MW2
       RET_VAL  :=M1.1

gruß
roadrunner
 
Zuletzt bearbeitet:
Man könnte auch einen FC nehmen ...
Code:
######
FC1:
######
...
      L     P##in_dword1
      LAR1  
      L     P##in_dword2
      LAR2  
...
#####
OB1:
#####
...
     CALL  FC     1
       in_dword1:=MD60
       in_dword2:=MD64
       bitnr    :=MW2
       RET_VAL  :=M1.1
...
Hast Du nicht getestet, stimmt's?
Sonst hättest Du gemerkt, das L P##in_dword# nicht funktioniert, weil das in einem FC nicht zum Lokaldatenbereich gehört. Deshalb müssen die IN_(D)Wörter erst in den Temp-Bereich kopiert werden.

EDIT: Ich nehm's zurück, aber warum ging das bei mir gestern nicht? Was hab' ich da falsch gemacht?


Ansonsten bin ich, und ich vermute Joe und Limette auch, eh' von einem gekapselten Baustein ausgegangen, aber Danke für den Hinweis.
...
Das L in der UND Zeile steht übrigens nicht für LADEN sondern für den Lokaldatenbereich, im FC also eine Temp-Variable!
...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
... aber warum ging das bei mir gestern nicht? Was hab' ich da falsch gemacht?
...
Der Grund ist offensichtlich, daß ich den Pointer auf das IN-DWORD direkt ins Adressregister laden wollte und nicht wie bei roadrunner erst in den Accu1.

Warum ist dem so?
 
Der Grund ist offensichtlich, daß ich den Pointer auf das IN-DWORD direkt ins Adressregister laden wollte und nicht wie bei roadrunner erst in den Accu1.

Warum ist dem so?

Hi,
ja das hatte ich auch festgestellt.

mit LAR1 P##in_dword1 geht's nicht !

Aber zuerst in den Akku und dann ins Register geht.
 
Ansonsten bin ich, und ich vermute Joe und Limette auch, eh' von einem gekapselten Baustein ausgegangen, aber Danke für den Hinweis.

Da ich das umkopieren im Code nicht gesehen habe und der für mich logischerweise mit TAR1 dTemp1 beginnt, habe ich nicht so weit gedacht, das es eh' ein gekapselter Baustein sein soll. ;)


Nicht's für ungut.
Wollte hiermit nur zeigen dass es auch ohne dem TEMP Bereich funktioniert.

...
Das L in der UND Zeile steht übrigens nicht für LADEN sondern für den Lokaldatenbereich, im FC also eine Temp-Variable!
...

Das L kann man somit auch weglassen, da die Bereichskennung bei der Parameterübergabe dem Zeiger P##in_dword mitgegeben wird.
(Ist das so korrekt ausgedrückt:confused:)
 
Zurück
Oben