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.
Lg
#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
}
} |