طبعا هذا التعديل ربما ليس فيه أضافه كبيره على كود وانما قمت فقط بتغير ربط سويج puls وجعلته على RB0 و دايركشن على RB1 وفعلت انتربت عبر RB0 لغرض الضمان حصول على النبضه من كمبيوتر
كود:
sbit sw_puls at Rb0_bit;
sbit sw_dir at Rb1_bit;
bit kk1 , kk2 ;
char state=0 ,puls1=0, state_run=0 , negative=0 ;
short value=0;
#define motor_stepper porta=(porta &0xF0)
void interrupt()
{
if(INTF_bit==1)
{
INTF_bit=0;
kk1=1;
}
}
void main()
{
TRISA.f0=0;
TRISA.f1=0;
TRISA.f2=0;
TRISA.f3=0;
motor_stepper= 0 ;
trisb.f0=1;
trisb.f1=1;
GIE_bit=1;
INTE_bit=1;
INTF_bit=0;
INTEDG_bit=1;
while(1)
{
if(sw_dir==1)value=-1;
else value=1;
if( kk1==1 )
{
kk1=0;
GIE_bit=0;
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;
GIE_bit=1;
}
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;
}
}
}
}
اذا ردت هذا الكود لــ 16f628a
فقط أضيف هذا الكود الى داله الرئيسيه void main