Dezimalwert einer Bitstelle zuweisen

Harry

Level-1
Beiträge
76
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich stehe vor folgendem Problem, das ich möglichst einfach und elegant lösen möchte:

Der Wochentag steht mir in einem Merkerbyte als Dezimalwert zur Verfügung (1=So, 2=Mo, 3=Di etc...).
Nun möchte ich in Abhängigkeit des Tages in einem zweiten Merkerbyte ein entsprechendes Bit setzen.
Also.. Sonntag M x.1 = 1, Montag M x.2=1, Dienstag Mx.3=1 etc....

Ich grüble nun schon eine ganze Weile, komme aber nur auf ziemlich aufwendige Lösungen.
Hat jemand eine Idee?

Vielen Dank!

Harry
 
Wenn ist das richtig verstehe brauchst könnte das so gehen...

L MB Wochentag
L 1
==I
=Mx.1 /Es ist Sonntag :D

L MB Wochentag
L 2
==I
=Mx.2 /Es ist Montag *stöhn...... :(


Ich denke aber es gibt hier Experten die das "eleganter" hinbekommen :)

Grüsse aus dem Lipperland

Axel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau der Befehl was Du brauchst gibt es für den FM352-5 es heißt FB90 / FB91, BITCAST. Leider ist der Befehl nirgendwo im Standard Library zu finden und wenn Du kein FM352-5 hast dann hilft das auch nicht weiter.

Aber wenn Du ein FM352-5 auftreiben kannst, dann sollte der Befehl auch in einem "normalen" FC oder FB funktionieren, weil beim Testen des FM Programs, wird der Programablauf in der CPU simuliert.
 
hallöchen

allso die schnellste und einfachste ist ein schiebe befehl

Code:
 L     MB   100                    // Wert des tages
      L     1
      SLW   
      T     MB   104                    // Ausgabe als bit
      NOP   0

das einzige was du beachen must ist das es nicht sein darf das im mb 0 steht sonst steht im mx.0 eine 1
 
Hallo Harry,

der nachfolgend Code macht genau das was du suchst.
Code:
      L     P#50.0                      // Pointer auf "MB50"
      L     MB    10                    // WochenTag DEZIMAL
      +D    
      T     MD   100

      L     0
      T     MB    50                    // Alle Merker 50.x auf Null setzen 

      SET   
      =     M [MD   100]

In diesem Beispiel hier sind die Wochentage-Merker auf M50.X gelegt.
Im MerkerByte 10 steht der Wochentag als Dezimalwert.
Zusätlich wird das MD100 gebraucht, um in der letzen Zeile den
entsprechenden Merker "indirekt" auf "1" zu setzen.
Das Beispiel ist bestimmt nicht perfekt, aber es ist kurz und funktioniert!

Gruss
Guido
 
Hallo Guido und Peter,

euch beiden vielen Dank.. ich habe die Lösung von kpeter nun im Einsatz, weil sie wirklich sehr einfach ist.
Nur... ganz ehrlich gesagt, verstehe ich nicht, wie diese funktioniert.
Dachte immer, SLW schiebt alle Bits welche vom Mb100 in den Akku kommen um eine Stelle nach links. Wieso im MB100 mehrere Bits 1 sind und nach SLW im MB104 immer nur 1 Bit aktiv ist, ist mir ein Rätsel.

Also.. funktioniert einwandfrei, aber vielleicht kann mir jemand erklären, was da genau passiert.

Gruss

Harry
 
der befehl slw ohne zahl dahinter nimmt aus akku 2 den wert und dort steht die Tageszahl. geschoben wird die 1, die durch L 1 im akku 1 steht.
 
danke, habs gerafft....


Und wenn man den Befehl SLW genau anschaut, stellt man fest, dass dies sogar genau so beschrieben ist:

"Die Anzahl an Bitstellen, um die geschoben werden soll, wird entweder von dem Operanden <Anzahl> oder von einem Wert in AKKU2-L-L angegeben"
 
Zurück
Oben