-> Hier kostenlos registrieren
huhu
ich bin gerade dabei ein kleines Schieberegister für eine Anlage zu programmieren.Leider macht er nicht das was ich vorhabe..
FUNCTION FC 1 : VOID
TITLE =Schieberegister
AUTHOR :
VERSION : 0.1
VAR_INPUT
DB_NR : INT ; //DB_NR des Schieberegisters
Laenge : INT ; //Länge des Schieberegisters
Eingabe : BYTE ; //Aktueller Wert
Schiebetakt : BOOL ; //Schiebetakt
END_VAR
VAR_IN_OUT
HM_Flanke : BOOL ;
END_VAR
VAR_TEMP
DB_Nummer : INT ; //Hilfsnummer
Schleifenzaehler : INT ;
Zeiger_lesen : DWORD ;
Zeiger_schreiben : DWORD ;
Adresse_erster_DS : DWORD ; //Adresse des Datensatzes
END_VAR
BEGIN
NETWORK
TITLE =DB aufschlagen
L #DB_NR;
T #DB_Nummer;
AUF DB [#DB_Nummer];
NETWORK
TITLE =Länge des Schieberegister prüfen
L #Laenge;
L 1;
==I ;
SPB Lae1;
NETWORK
TITLE =Länge des Schieberegisters berechnen
L #Laenge;
+ -1;
SLD 3;
T #Adresse_erster_DS;
// Lesezeiger initialisieren
L P#1.0;
T #Zeiger_lesen;
// Schiebetakt generieren
U #Schiebetakt;
FP #HM_Flanke;
SPBN Ende;
NETWORK
TITLE =Schleife für Schieberegister
L #Laenge;
+ -1;
schl: T #Schleifenzaehler;
L #Zeiger_lesen;
SRD 3;
+ 1;
SLD 3;
T #Zeiger_schreiben;
L DBB [#Zeiger_lesen];
T DBB [#Zeiger_schreiben];
// neuen Lesezeiger berechnen (1 Byte erhöhen)
L #Zeiger_lesen;
SRD 3;
+ 1;
SLD 3;
T #Zeiger_lesen;
L #Schleifenzaehler;
LOOP schl;
Ende: NOP 0;
NETWORK
TITLE =Aktuellen Wert ins Schieberegister schreiben
Lae1: L #Eingabe;
T DBB [#Adresse_erster_DS];
END_FUNCTION
Vielleicht hat hier jemand eine Idee was ich falsch gemacht habe...
danke im voraus
ciao
klaus.ka
ich bin gerade dabei ein kleines Schieberegister für eine Anlage zu programmieren.Leider macht er nicht das was ich vorhabe..
FUNCTION FC 1 : VOID
TITLE =Schieberegister
AUTHOR :
VERSION : 0.1
VAR_INPUT
DB_NR : INT ; //DB_NR des Schieberegisters
Laenge : INT ; //Länge des Schieberegisters
Eingabe : BYTE ; //Aktueller Wert
Schiebetakt : BOOL ; //Schiebetakt
END_VAR
VAR_IN_OUT
HM_Flanke : BOOL ;
END_VAR
VAR_TEMP
DB_Nummer : INT ; //Hilfsnummer
Schleifenzaehler : INT ;
Zeiger_lesen : DWORD ;
Zeiger_schreiben : DWORD ;
Adresse_erster_DS : DWORD ; //Adresse des Datensatzes
END_VAR
BEGIN
NETWORK
TITLE =DB aufschlagen
L #DB_NR;
T #DB_Nummer;
AUF DB [#DB_Nummer];
NETWORK
TITLE =Länge des Schieberegister prüfen
L #Laenge;
L 1;
==I ;
SPB Lae1;
NETWORK
TITLE =Länge des Schieberegisters berechnen
L #Laenge;
+ -1;
SLD 3;
T #Adresse_erster_DS;
// Lesezeiger initialisieren
L P#1.0;
T #Zeiger_lesen;
// Schiebetakt generieren
U #Schiebetakt;
FP #HM_Flanke;
SPBN Ende;
NETWORK
TITLE =Schleife für Schieberegister
L #Laenge;
+ -1;
schl: T #Schleifenzaehler;
L #Zeiger_lesen;
SRD 3;
+ 1;
SLD 3;
T #Zeiger_schreiben;
L DBB [#Zeiger_lesen];
T DBB [#Zeiger_schreiben];
// neuen Lesezeiger berechnen (1 Byte erhöhen)
L #Zeiger_lesen;
SRD 3;
+ 1;
SLD 3;
T #Zeiger_lesen;
L #Schleifenzaehler;
LOOP schl;
Ende: NOP 0;
NETWORK
TITLE =Aktuellen Wert ins Schieberegister schreiben
Lae1: L #Eingabe;
T DBB [#Adresse_erster_DS];
END_FUNCTION
Vielleicht hat hier jemand eine Idee was ich falsch gemacht habe...
danke im voraus
ciao
klaus.ka