تم الالغاء سويجي سبيد وكونتينو ايضا لاأحتاج الى تايمر0 لان كنت أستخدمه مع مفتاح سبيد لضبط الزمن ولكن بما انا نبضات الي ترسل من كمبيوتر يجب هناك محاوله تحكم في نبضات مثلا زمن بين نبضه واخرى 100ms لتقليل السرعه يتم زياده مده نبضه طبعا يجب ان تكون من كمبيوتر
كود:
sbit sw_puls at Rb1_bit;
sbit sw_dir at Rb0_bit;
bit kk1 , kk2 ;
char state=0 ,puls1=0, state_run=0 , negative=0 ;
short value=0;
#define motor_stepper porta=(porta &0xF0)
void main()
{
TRISA.f0=0;
TRISA.f1=0;
TRISA.f2=0;
TRISA.f3=0;
motor_stepper= 0 ;
trisb.f0=1;
trisb.f1=1;
while(1)
{
if(sw_dir==1)value=-1;
else value=1;
if(kk1==0 && sw_puls==1)kk1=1;
if( !sw_puls && kk1==1 )
{
if(value==1)
{
if(puls1>0 && negative==2){puls1--;state=2;}
else {puls1++;state=1; negative=1;}
}
else if(value==-1)
{
if(puls1>0 && negative==1){puls1--;state=1;}
else {puls1++;state=2; negative=2;}
}
if(puls1>=8)puls1=0;
kk1=0;
}
if( state==1)
{
state=0;
switch(puls1)
{
case 0:motor_stepper |=9;break;
case 1:motor_stepper |=1;break; //-45
case 2:motor_stepper |=3;break; //-90
case 3:motor_stepper |=2;break; //-135
case 4:motor_stepper |=6;break; //-180
case 5:motor_stepper |=4;break; //-225
case 6:motor_stepper |=12;break;//-270
case 7:motor_stepper |=8;break;//-315
default:break;
}
}
else if( state==2)
{
state=0;
switch(puls1)
{
case 0:motor_stepper |=9;break; //0
case 1:motor_stepper |=8;break; //45
case 2:motor_stepper |=12;break; //90
case 3:motor_stepper |=4;break; //135
case 4:motor_stepper |=6;break; //180
case 5:motor_stepper |=2;break; //225
case 6:motor_stepper |=3;break; //270
case 7:motor_stepper |=1;break;//315
default:break;
}
}
}
}