Schrittmotor
-
Guten Morgen,
ich möchte gerne meinen Schrittmotor mittels Taster z.B in den Linkslauf bringen dies soll z.B. über den Port1 Pin0 geschehen ich habe es mittels Polling versucht zu verwirklichen nur leider bin ich kläglich gescheitert. Er fängt zwar an zu laufen bei der Simulation, nur leider lässt er sich nicht mehr mittels Taster anhalten. Sehe ich da was falsch Es wär sehr nett wenn mir jemand weiterhelfen könnte.#include <t89c51ac2.h> // Header für Controller "AT89C51AC3" #include <stdio.h> /*------------------------------------------------------------------- Deklarationen von Variablen und Konstanten --------------------------------------------------------------------*/ //unsigned char x; bit reslo; bit lislo; sfr eingang = 0x90; /*-------------------------------------------------------------------- Hauptprogramm ----------------------------------------------------------------------*/ void re_slow(void); void li_slow(void); void zeit(int i, int k); //Prototypen-Anmeldung void main(void) { P2=0x00; eingang=255; reslo = 0; lislo = 0; while(1) { switch(eingang) { case 0xFE: re_slow(); break; case 0xFB: li_slow(); break; default: //P4=0xFF; break; } } } /*----------------------------------------------------------------------- Zusatzfunktionen -------------------------------------------------------------------------*/ void re_slow(void) // Funktion Rechtslauf langsam { reslo=1; while(reslo) { if(P1_0==0){ // Hier komme ich nicht weiter !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????????????????????????? P2=0x0C; // Bitmuster 1 Rechtslauf zeit(5,3000); // Zeitverzögerung P2=0x09; // Bitmuster 2 Rechtslauf zeit(5,3000); P2=0x03; // Bitmuster 3 Rechtslauf zeit(5,3000); P2=0x06; // Bitmuster 4 Rechtslauf zeit(5,3000); if (eingang == 0xEF) { //P2=0x00; while(P1_0==0){} // Hier komme ich nicht weiter ich habe es mit Polling versucht!!!!!!!!!!!!!!!!!!!!!!!!!!!!?????????????????????????? reslo = 0; } } } } void li_slow(void) // Funktion Linkslauf langsam { lislo=1; while(lislo) { if(P1_2==0){ P2=0x06; // Bitmuster 1 Linkslauf zeit(5,3000); P2=0x03; // Bitmuster 2 Linkslauf zeit(5,3000); P2=0x09; // Bitmuster 3 Linkslauf zeit(5,3000); P2=0x0C; // Bitmuster 4 Linkslauf zeit(5,3000); if (eingang == 0xEF) { P2=0x00; while(P1_2==0){} lislo = 0; } } } } void zeit(int i,int k) // Funktion Zeit { unsigned int x; unsigned int y; for(y=0;y<=i;y++) { for(x=0;x<=k;x++); //Int-Wert 62 ergibt 500 Mikrosekunden Delay } }
-
Auch guten Morgen, auch wenn sich das evtl jetzt ein bisschen schroff anhört:
Obwohl du schon Code-Tags (cpp-Tags wären hübscher) verwendest, hast du überhaupt keine Formatierung in dem Code.
Da sieht man überhaupt nicht, wo Blöcke und Schleifen enden.Was ist denn sfr? Was ist P2?
ist irgendetwas davonvolatile
?Zeit über Schleifen zu bestimmen ist Schrott.
Die kann der Compiler auch mal wegoptimieren.
-
DirkB schrieb:
Auch guten Morgen, auch wenn sich das evtl jetzt ein bisschen schroff anhört:
Obwohl du schon Code-Tags (cpp-Tags wären hübscher) verwendest, hast du überhaupt keine Formatierung in dem Code.
Da sieht man überhaupt nicht, wo Blöcke und Schleifen enden.Was ist denn sfr? Was ist P2?
ist irgendetwas davonvolatile
?Zeit über Schleifen zu bestimmen ist Schrott.
Die kann der Compiler auch mal wegoptimieren.P2 ist der ausgang
sfr der eingang
-
So, ich habe mal den Code für dich eingerückt:
#include <t89c51ac2.h> // Header für Controller "AT89C51AC3" #include <stdio.h> /*------------------------------------------------------------------- Deklarationen von Variablen und Konstanten --------------------------------------------------------------------*/ //unsigned char x; bit reslo; bit lislo; sfr eingang = 0x90; /*-------------------------------------------------------------------- Hauptprogramm ----------------------------------------------------------------------*/ void re_slow(void); void li_slow(void); void zeit(int i, int k); //Prototypen-Anmeldung void main(void) { P2=0x00; eingang=255; reslo = 0; lislo = 0; while(1) { switch(eingang) { case 0xFE: re_slow(); break; case 0xFB: li_slow(); break; default: //P4=0xFF; break; } } } /*----------------------------------------------------------------------- Zusatzfunktionen -------------------------------------------------------------------------*/ void re_slow(void) // Funktion Rechtslauf langsam { reslo=1; while(reslo) { if(P1_0==0){ // Hier komme ich nicht weiter !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????????????????????????? P2=0x0C; // Bitmuster 1 Rechtslauf zeit(5,3000); // Zeitverzögerung P2=0x09; // Bitmuster 2 Rechtslauf zeit(5,3000); P2=0x03; // Bitmuster 3 Rechtslauf zeit(5,3000); P2=0x06; // Bitmuster 4 Rechtslauf zeit(5,3000); if (eingang == 0xEF) { //P2=0x00; while(P1_0==0){} // Hier komme ich nicht weiter ich habe es mit Polling versucht!!!!!!!!!!!!!!!!!!!!!!!!!!!!?????????????????????????? reslo = 0; } } } } void li_slow(void) // Funktion Linkslauf langsam { lislo=1; while(lislo) { if(P1_2==0){ P2=0x06; // Bitmuster 1 Linkslauf zeit(5,3000); P2=0x03; // Bitmuster 2 Linkslauf zeit(5,3000); P2=0x09; // Bitmuster 3 Linkslauf zeit(5,3000); P2=0x0C; // Bitmuster 4 Linkslauf zeit(5,3000); if (eingang == 0xEF) { P2=0x00; while(P1_2==0){} lislo = 0; } } } } void zeit(int i,int k) // Funktion Zeit { unsigned int x; unsigned int y; for(y=0;y<=i;y++) { for(x=0;x<=k;x++); //Int-Wert 62 ergibt 500 Mikrosekunden Delay } }
-
Kann mir jemand verraten weshalb ich nicht von dem Linkslauf in den Rechtslauf umschalten kann. Hab ich die bedingungen falsch gesetzt. Ich bitte dringend um Hilfe!!
#include <t89c51ac2.h> // Header für Controller "AT89C51AC3" #include <stdio.h> /*------------------------------------------------------------------- Deklarationen von Variablen und Konstanten --------------------------------------------------------------------*/ //unsigned char x; bit reslo; bit lislo; sfr eingang = 0x90; /*-------------------------------------------------------------------- Hauptprogramm ----------------------------------------------------------------------*/ void re_slow(void); void li_slow(void); void zeit(int i, int k); //Prototypen-Anmeldung void main(void) { P2=0x00; eingang=255; reslo = 0; lislo = 0; while(1) { switch(eingang) { case 0xFE: re_slow(); break; case 0xFB: li_slow(); break; default: //P4=0xFF; break; } } } /*----------------------------------------------------------------------- Zusatzfunktionen -------------------------------------------------------------------------*/ void re_slow(void) // Funktion Rechtslauf langsam { reslo=1; while(reslo) { if(P1_0==0){ // Hier komme ich nicht weiter !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????????????????????????? P2=0x0C; // Bitmuster 1 Rechtslauf zeit(5,3000); // Zeitverzögerung P2=0x09; // Bitmuster 2 Rechtslauf zeit(5,3000); P2=0x03; // Bitmuster 3 Rechtslauf zeit(5,3000); P2=0x06; // Bitmuster 4 Rechtslauf zeit(5,3000); if (eingang == 0xEF) { //P2=0x00; while(P1_0==0){} // Hier komme ich nicht weiter ich habe es mit Polling versucht!!!!!!!!!!!!!!!!!!!!!!!!!!!!?????????????????????????? reslo = 0; } } } } void li_slow(void) // Funktion Linkslauf langsam { lislo=1; while(lislo) { if(P1_2==0){ P2=0x06; // Bitmuster 1 Linkslauf zeit(5,3000); P2=0x03; // Bitmuster 2 Linkslauf zeit(5,3000); P2=0x09; // Bitmuster 3 Linkslauf zeit(5,3000); P2=0x0C; // Bitmuster 4 Linkslauf zeit(5,3000); if (eingang == 0xEF) { P2=0x00; while(P1_2==0){} lislo = 0; } } } } void zeit(int i,int k) // Funktion Zeit { unsigned int x; unsigned int y; for(y=0;y<=i;y++) { for(x=0;x<=k;x++); //Int-Wert 62 ergibt 500 Mikrosekunden Delay } }
[/quote]
-
Jetzt haben wir hier 3 mal deinen Code, davon 2 * hübsch formatiert, aber gegenüber deinem ersten Post noch keine weiteren Informationen.
Da es hier in dem Forum um Standard-C (wie es von der ISO genormt ist) geht, dein Compiler (welcher eigentlich) aber anscheinend Erweiterungen wie bit oder sfr hat, werden dir hier wenige helfen können.
Da du aber mit so gut wie keiner Information rüberkommst, werden dir hier auch wenige helfen wollen.
Die Schnittmenge ist entsprechen gering.
Frag doch mal bei http://www.mikrocontroller.net/ nach. Die sind auf sowas spezialisiert.
Mach aber von Anfang an ein paar mehr Angaben.