论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-8-6 22:15:52
|
显示全部楼层
本帖最后由 likunxue 于 2016-8-6 22:17 编辑
以下程序是玩51时为一个工厂写的,你可以试试
/***************************************************************************************************
函数名:步进电机正反转一步
调 用:MOTOR()
参 数:Mot=0,电机反转一步 ,Mot=1电机正转
返回值:无
结 果:电机坐标 Motor 自动加一或减一,电机走一步
bdata bit Motz=0; //定义电机标志,初始化设为Y轴电机
***************************************************************************************************/
void MOTOR(void){ //步进电机正反转一步子程序
code unsigned char MOTOR_DB[]={0x00,0xb0,0x90,0xd0,0x50,0x70,0x60,0xe0,0xa0,0x00};//定义电机输出编码
code unsigned char MOTOR_DA[]={0x00,0xa0,0xe0,0x60,0x70,0x50,0xd0,0x90,0xb0,0x00};//定义电机输出编码
unsigned char i,k;
i=0; //电机输出编码初值设00
CBB=30; //设减小电机电流时间设为30
if(Mot==1)Mo_data++;
else{if(Mo_data!=0)Mo_data--;}//如果电机反转,并且当前电机坐标不小于1时,坐标减一
while(1)
{
if(Mot)Motor_t ++;//当前电机输出编码加一指向下一编码
else Motor_t --;//电机输出编码减一
if(Motz)i=MOTOR_DA[Motor_t]; //取电机输出编码 (R轴电机)
else i=MOTOR_DB[Motor_t]; //取电机输出编码 (Y轴电机)
if(i!=0)break;
else{
if(Mot)Motor_t=0;
else Motor_t=9;
}
}
i=i&0xf8; //屏蔽低3位,高5位不变
k=M_data; //取端口数据
k&=0x07; //屏蔽P1口的高5位,低3位不变
M_data=k|i; //高5位送P1口,P1口的低3位不变
DELAY(20);
}
|
|