السلام عليكم
تم تعديل الكود
اذا كان سويج dir==0 فمحرك يدور عكس اتجاه عقارب الساعه
اذا كان سويج dir==1 فمحرك يدور مع اتجاه عقارب الساعه
كود:
sbit sw_puls at Rb1_bit;
sbit sw_dir at Rb0_bit;
sbit sw_speed_inc at Rb2_bit;
sbit sw_speed_dec at Rb3_bit;
sbit sw_speed_cont at Rb4_bit;
bit kk1 , kk2 , kk3 , kk4 , kk5;
unsigned int cont , time=10 ;
char state=0 ,puls1=0, run=0 , state_run=0 , negative=0 , cont_run;
short value=0;
#define motor_stepper porta=(porta &0xF0)
//Timer0
//Prescaler 1:32; TMR0 Preload = 100; Actual Interrupt Time : 4.992 ms
//Place/Copy this part in declaration section
void InitTimer0()
{
TMR0 = 100;
}
void Interrupt()
{
if (TMR0IF_bit)
{
TMR0IF_bit = 0;
TMR0 = 100;
//Enter your code here
cont++;
if(kk5==1)cont_run++;
}
}
void main()
{
//sw_dir_dir=1;
//sw_puls_dir=1;
TRISA.f0=0;
TRISA.f1=0;
TRISA.f2=0;
TRISA.f3=0;
motor_stepper= 0 ;
trisb.f0=1;
trisb.f1=1;
trisb.f2=1;
trisb.f3=1;
trisb.f4=1;
InitTimer0();
INTCON = 0xA0;
OPTION_REG = 0x84;
while(1)
{
if(sw_dir==1)value=-1;
else value=1;
if(sw_speed_inc==1 && kk3==0)kk3=1;
if(sw_speed_dec==1 && kk4==0) kk4=1;
if(!sw_speed_inc && kk3==1){ time++; kk3=0;}
if(!sw_speed_dec && kk4==1){ if(time>=1)time--; kk4=0;}
if(kk1==0 && sw_puls==1)kk1=1;
if(sw_speed_cont==1)kk5=1;
if(!sw_speed_cont && cont_run>25)
{
kk5=0;
cont_run=0;
state_run=~state_run;
if(state_run==255){ run=1;}
}
if( (!sw_puls && kk1==1 ) || run==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;
run=0;
}
if(cont>time && state==1)
{
cont=0;
state=0;
if(state_run==255)run=1;
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( cont>time && state==2)
{
cont=0;
state=0;
if(state_run==255)run=1;
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;
}
}
}
}
ملاحظه // تردد كرستاله 4 ميكا هيرتز
اخي كريم وفق لكلامكم فأنه لاداعي لسويج continue فهل تريدون ألغاءه طالما انتم تعتمدون على منفذ الطابعه
طبعا اذا تريد 10 خطوات اضغط على سويج puls
10 مرات واذا تريد 20 اضعط على سويج 20 مره وهكذا
ممكن سؤال ماهو البرنامج الي تستخدموه في كمبيوتر واين منفذ الطابعه صراحه لم تعامل معه
http://up.top4top.net/downloadf-top4...d7501-rar.html
تحياتي