Schleife / Pointer versuch

online

Level-1
Beiträge
319
Reaktionspunkte
49
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
mal wieder was zu Pointern:confused: . Ich hoffe es gibt noch jemanden, der hierbei ein bisschen unterstützung für den Anfang gibt. Ich versuche über eine positive Flanke einen Schleifendurchlauf zu starten, um dort einen Block von 11 Datenwörtern eins nach dem anderen mit einem Festen DW zu vergleichen. Wenn eins gleich ist soll am Ende ein Merker gesetzt werden, wenn nicht das Netzwerk verlassen werden. Hier meine Idee (SPS geht nicht mal mehr in Stop:D , mein erster Erfolg), der Merker 3.6 wird aber nicht gesetzt.


AUF DB 4
L DBW 1000
L 0
==I
FP M 3.5
SPBN end // Schleife nur einmal bei positiver Flanke durchlaufen

R M 3.6 // Merker auf 0 setzen



L 11 // Anzahl Wörter zum vergleichen (1080-1100)
next: T #Schleifen_Zaehler

L 1180 // DBW1180
SLD 3 // Pointer erzeugen
LAR1 // in das Adressregister 1 laden

L DBW [AR1,P#0.0]
L DBW 1002 // Vergleichen mit DBW1002
==I
SPB func // wenn ja ENDE

TAK
L P#2.0 // DBW1180 auf 1182 erhöhen
+AR1

L #Schleifen_Zaehler
L 0
==I
SPB end // Wenn Schleifenzähler 0 Ende

LOOP next
func: SET
= M 3.6 // Wenn Vergleich DBW =1 dieses Bit setzen
end: NOP 0


Danke im voraus an alle.
 
[code ] und [/code ] (jeweils ohne space) machen code lesbarer

merker setzen geht mit

Code:
 S   M3.6
du lädst in der schleife immer wieer die selbe position 1180, da hilft auch nicht die erhöhung des Adressregisters mit

Code:
      L     P#2.0                       // DBW1180 auf 1182 erhöhen
      +AR1
versuchs mal vor der schleife mit

Code:
      L     1180                       
      T     #start
in der schleife dann mit

Code:
      L     #start                       
      SLD   3
      LAR1
und

Code:
      L     #start                       
      L     2
      +I
      T     #start
zur erhöhung der adresse


[edit]
ODER

du baust den pointer vor der schleife, dann klappts auch mit
Code:
      L     P#2.0                       // DBW1180 auf 1182 erhöhen
      +AR1
[/edit]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort,
das mit dem S war ein dummer flüchtigkeitsfehler, habe es oben mit R ja richtig gehabt. Das Programm sieht nun so aus:




AUF DB 4
L DBW 1000
L 510
==I
FP M 3.5
SPBN end

R M 3.6

L 1180
T #StartDW

L 11 // Anzahl Wörter zum vergleichen (1080-1100)
next: T #Schleifen_Zaehler

L #StartDW // DBW1180
SLD 3 // Pointer erzeugen
LAR1 // in das Adressregister 1 laden

L DBW [AR1,P#0.0]
L DBW 1002 // Vergleichen mit DBW1002
==I
SPB func // wenn ja ENDE

L #StartDW // DBW1180 auf 1182 erhöhen
L 2
+I
T #StartDW


L #Schleifen_Zaehler
L 0
==I
SPB end // Wenn Schleifenzähler 0 Ende

LOOP next
func: S M 3.6 // Wenn Vergleich =1 dieses Bit setzen
end: NOP 0


Tuts aber leider immer noch nicht so wie es soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du zählst deinen Schleifenzähler nicht runter, stattdessen wird beim ersten Rücksprung eine 0 reingeschrieben, weil die noch im Akku steht.

Grüße von HaDi
 
ohne Pointer gehts auch

AUF DB 4
L DBW 1000
L 510
==I
FP M 3.5
SPBN end

R M 3.6

L 1180
T #StartDW

L 11 // Anzahl Wörter zum vergleichen (1080-1100)
next: T #Schleifen_Zaehler

L DBW [StartDW ]
L DBW 1002 // Vergleichen mit DBW1002
==I
SPB func // wenn ja ENDE

L #StartDW // #StartDW erhöhen
L 2
+I
T #StartDW

L #Schleifen_Zaehler
LOOP next

func: S M 3.6 // Wenn Vergleich =1 dieses Bit setzen
end: NOP 0
 
Also wenn ich das so eintippe kommt L DBW[StartDW ].
Es muß nicht unbedingt Pointer sein, ich will halt mehrere Datenwörter in einer Schleife vergleichen können. Und vor allem will ich neues lernen.
Gruß online:-D
 
Also wenn ich das so eintippe kommt L DBW[StartDW ].
Es muß nicht unbedingt Pointer sein, ich will halt mehrere Datenwörter in einer Schleife vergleichen können. Und vor allem will ich neues lernen.
Gruß online:-D

hast du bei der pointerlösung

Code:
L       #Schleifen_Zaehler
LOOP    next

eingefügt?
 
ok, ok, dann halt mit Pointern

AUF DB 4
L DBW 1000
L 510
==I
FP M 3.5
SPBN end

R M 3.6

L 1180
SLD 3
LAR1

L 11 // Anzahl Wörter zum vergleichen (1080-1100)
next: T #Schleifen_Zaehler

L DBW [AR1, P#0.0 ]
L DBW 1002 // Vergleichen mit DBW1002
==I
SPB func // wenn ja ENDE

+AR1 P#2.0 // AR1 erhöhen/ auf naechsten Datensatz

L #Schleifen_Zaehler
LOOP next

func: S M 3.6 // Wenn Vergleich =1 dieses Bit setzen
end: NOP 0
 
Jau, der Merker wird gesetzt, funktioniert. Wenn aber keine übereinstimmung da ist geht die CPU in Stopp!
 
Zurück
Oben