8bit Schieberegisterin einer S5-95U

christianhabeler

New member
Beiträge
2
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo. Ich versuche gerade Schieberegister zu programmieren. und zwar hätte ich gern das im sekundentakt die Merkerbytes weitergeschoben werden. Startbyte MB10 - nach einer sekunde sollte der wert ins MB11 geschoben werden und danach das MB10 auf 0 gesetzt werden. nach einer weiteren sekunde sollte das MB11 ins MB12 geschoben werden und mb11 wieder auf null gesetzt werden. dieser vorgang soll sich bis MB20 wiederholen. kann mir da jemand helfen? Herzlichen dank im voraus
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Mit jeder Flanke des Sekundentaktes einen Zähler weiterzählen.
Wenn der Zählerstand 11 ist wieder auf 0 reseten
In Abhängigkeit des Zählerstandes und der Flanke (SPB) an eine Sprungmarke springen wo Deine Operation (L MBx / T MBy / L 0 / T MBx) ausgeführt wird.
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
19.495
Punkte Reaktionen
5.876
Zuviel Werbung?
->Hier kostenlos registrieren
Wo hast Du da Dein Problem? Bei der Erzeugung des Schiebetaktimpulses oder beim Schieben/Kopieren?
Weil nur wenige Byte zu schieben sind würde ich keine Schleife mit indirekter Adressierung programmieren, sondern einfach die nötigen paar Operationen hintereinanderweg schreiben. (Und das müßte man auch in Step5 in FUP/KOP programmieren können.)

Präzisierung nötig: Willst Du tatsächlich nur je 1 Byte in 10 Schritten weiterschieben oder jeweils das ganze Schieberegister um 1 Byte höherschieben?

Harald
 
OP
C

christianhabeler

New member
Beiträge
2
Punkte Reaktionen
0
An die sache mit dem Zähler habe ich am anfang auch gedacht. das ist aber in diesem fall nicht optimal.
Ich brauche das Schieberegister um auf einem Sägewerg Brettdaten( Länge,breite und Dicke) über eine ca 200 m lange förderstrecke zu schicken damit die Steuerung am ende die brettdaten hat und die bretter richtig sortiert. auf dieser Strecke kann nur ein brett oder auch mehrere Bretter unterwegs sein. das heißt wenn daten im MByte 14 sind muss ich im MByte 10 Daten wegschicken können . und im MB 20 werden die daten dann ausgewertet und entschieden wo das Brett das gerade auf den Sortierförderer geschoben wird hingworfen wird.
 

Ralle

Supermoderator
Teammitglied
Beiträge
15.103
Punkte Reaktionen
3.820
Hallo. Ich versuche gerade Schieberegister zu programmieren. und zwar hätte ich gern das im sekundentakt die Merkerbytes weitergeschoben werden. Startbyte MB10 - nach einer sekunde sollte der wert ins MB11 geschoben werden und danach das MB10 auf 0 gesetzt werden. nach einer weiteren sekunde sollte das MB11 ins MB12 geschoben werden und mb11 wieder auf null gesetzt werden. dieser vorgang soll sich bis MB20 wiederholen. kann mir da jemand helfen? Herzlichen dank im voraus

Ich verstehe nicht, wieso MB11 in MB12 geschoben werden soll und danach MB11 Null gesetzt wird. Vielmehr sollte danach MB10 in MB11 geschoben werden. Wenn zu dieser Zeit in MB10 nichts eingestellt wurde, dann ist da ja ohnehin eine Null drin.

Den Sekundentakt bildest du als Flanke!
Code dann etwa so:

Code:
UN Sek_Takt
SPB M001

L MB19
T MB20

L MB18
T MB19

L MB17
T MB18

...

L MB 11
T MB12

L MB10
T MB11

L KF 0
T MB10

M001: NOP 0
 

volker

Supermoderator
Teammitglied
Beiträge
5.622
Punkte Reaktionen
976
Zuviel Werbung?
->Hier kostenlos registrieren
Ich brauche das Schieberegister um auf einem Sägewerg Brettdaten( Länge,breite und Dicke) über eine ca 200 m lange förderstrecke zu schicken damit die Steuerung am ende die brettdaten hat und die bretter richtig sortiert. auf dieser Strecke kann nur ein brett oder auch mehrere Bretter unterwegs sein.
also eine teileverfolgung.
da stell ich mir die frage warum alle sekunde geschoben werden soll. das schieben sollte ehr ereignisgesteuert sein.
also in etwas so.
brett verläßt säge-> daten in mb10 schieben
brett erreicht posit 1->mb10 nach mb11
.....
brett am sortierer angekommen->mb19 nach mb20
 

volker

Supermoderator
Teammitglied
Beiträge
5.622
Punkte Reaktionen
976
solltest du aber nur anfang und ende haben mußt du die sache anders angehen.

1. brett verläßt säge
alle daten um 1 nach unten schieben (ein baustein der das für datenworte macht liegt auf meiner hp (FiLo,LiFo)
einen zähler (MW100) um 1 erhöhen (dieser sagt wieviel bretter unterwegs sind)
2. neue daten in mb10 eintragen.

das wiederholt sich jetzt oder eben auch nicht.

3. brett kommt am ende an.
in abhängigkeit des zählerstandes weißt du in welchem byte sich die daten des ältesten bretts befinden.

hier ist jetzt indirekte adressierung gefragt.
l mw100 //zb 3
l 9 //+9 da dein erster datensatz im byte 10 liegt
+F
t mw102
B mw102
l mb 0 //hier wird jetzt nicht mb0 geladen sondern die adresse des wertes im akku1. also 3+9=12. also mb 12

nun zähler um 1 verringern da ja jetzt ein brett weniger unterwegs ist.
 
Zuletzt bearbeitet:
Oben