发个步进电机的程序,顺便问一下问题。
#define Motor_PORT P3 //定义步进电机控制端口为P2 如果修改此端口,必须也同时修改初始化端口,(默认为低四位,也可由地下A_Line来控制)#define A_Line 4 //A相接端口0
#define B_Line 5 //B相接端口1
#define C_Line 6 //C相接端口2
#define D_Line 7 //D相接端口3
unsigned char code Rotation = {0xE0,0xA0,0xB0,0x90,0xD0,0x50,0x70,0x60}; //步进电机旋转编码表
//----------------------------------------------------------------
// dir = 1 正转,dir = 0 反转
// 步进电机单步正反转函数
//----------------------------------------------------------------
void Step_Motor(unsigned char dir) //步进电机单步正反转函数
{
static unsigned char Motor_Num = 0; //静态变量步进电机走了几步
if(dir == 1) //正转
{
if(Motor_Num >= 7)
Motor_Num = 0;
else
Motor_Num ++ ;
}
else //反转
{
if(Motor_Num == 0)
Motor_Num = 7;
else
Motor_Num -= 1;
}
Motor_PORT =(Motor_PORT & ~((1 << A_Line) | (1 << B_Line) |(1 << C_Line)|(1 << D_Line))) | Rotation ; //屏蔽ABCD三项以外的端口,并且把编码赋值给步进电机
}
因为P3口接步进电机,同时也接串口1,当步进电机工作的时候,串口1就无法正常工作,
纠其原因,发现问题出现在
Motor_PORT =(Motor_PORT & ~((1 << A_Line) | (1 << B_Line) |(1 << C_Line)|(1 << D_Line))) | Rotation ;
把这句替换成下面这个就好了。
switch(Motor_Num)
{
case 0:
Step_A = 0;
Step_B = 1;
Step_C = 1;
Step_D = 1;
break;
case 1:
Step_A = 0;
Step_B = 1;
Step_C = 0;
Step_D = 1;
break;
case 2:
Step_A = 1;
Step_B = 1;
Step_C = 0;
Step_D = 1;
break;
case 3:
Step_A = 1;
Step_B = 0;
Step_C = 0;
Step_D = 1;
break;
case 4:
Step_A = 1;
Step_B = 0;
Step_C = 1;
Step_D = 1;
break;
case 5:
Step_A = 1;
Step_B = 0;
Step_C = 1;
Step_D = 0;
break;
case 6:
Step_A = 1;
Step_B = 1;
Step_C = 1;
Step_D = 0;
break;
case 7:
Step_A = 0;
Step_B = 1;
Step_C = 1;
Step_D = 0;
break;
}
问题:如果用查表法,怎样屏蔽那几个不是接步进电机的接口。 Step_A = 1;
Step_B = 1;
Step_C = 0;
Step_D = 1;
................用Px=0x?? 不是更快 就是写成相位数组了 很简单的 回复【1楼】jrcsh邪恶的小会会
-----------------------------------------------------------------------
俺这个就是数组啊
unsigned char code Rotation = {0xE0,0xA0,0xB0,0x90,0xD0,0x50,0x70,0x60}; //步进电机旋转编码表
然后这个就是px=0x啊
Motor_PORT =(Motor_PORT & ~((1 << A_Line) | (1 << B_Line) |(1 << C_Line)|(1 << D_Line))) | Rotation ;
但是问题就出现在这一句啊。。。步进电机可以动,但是串口的收发会出现问题。
请问我这句写错了嘛??? 或 学习学习前辈们的经验!!! 发帖子之前建议搜索一下,坛子中这样的问题很多,并且都有高人做了回答;
页:
[1]