51单片机的接收上位机指令,并控制步进电机
跪求大神看一下程序解答一下。我的程序是单片机接收上位机发来的数字,后对应不同的数字指令通过两个电机做出上下左右的模拟转动。程序语法都没问题,没有错误和警告,也能正常接收上位机的数据,但是就是不执行命令。能看到上位机发送命令后单片机接收灯闪烁一下,但是单片机接的步进电机不动。程序单独拿出去无限循环都能执行。[*]#include<reg52.h>
[*]
#define uchar unsigned char
[*]
#define uintunsigned int
[*]
#define Motor1Data P0 //步进电机控制接口定义
[*]
#define Motor2Data P2 //步进电机控制接口定义
[*]
void init(void); //串口初始化
[*]
unsigned char a;
[*]
uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A
[*]
uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D
[*]
//串口初始化,设定传输波特率为9600
[*]
void init(void)
[*]
{
[*]
TMOD = 0x20; //定时器1,模式2工作模式
[*]
SCON = 0x50; //串口工作模式1
[*]
TH1 = 0xfa; //9600
[*]
TL1 = 0xfa;
[*]
ES = 1;
[*]
EA = 1;
[*]
TR1 = 1;
[*]
}
[*]
//jie shou
[*]
void rece(void)
[*]
{
[*]
q1:if(RI==0) goto q1;
[*]
[*]
a=SBUF;
[*]
RI=0;
[*]
[*]
return;
[*]
}
[*]
//ms延时函数
[*]
void Delay_xms(uint x)
[*]
{
[*]
uint i,j;
[*]
for(i=0;i<x;i++)
[*]
for(j=0;j<112;j++);
[*]
}
[*]
//X顺时针转动
[*]
void Motor1CW(void)
[*]
{
[*]
uchar i;
[*]
for(i=0;i<4;i++)
[*]
{
[*]
Motor1Data=phasecw;
[*]
Delay_xms(15);//转速调节
[*]
}
[*]
}
[*]
//X逆时针转动
[*]
void Motor1CCW(void)
[*]
{
[*]
uchar i;
[*]
for(i=0;i<4;i++)
[*]
{
[*]
Motor1Data=phaseccw;
[*]
Delay_xms(15);//转速调节
[*]
}
[*]
}
[*]
//Y顺时针转动
[*]
void Motor2CW(void)
[*]
{
[*]
uchar i;
[*]
for(i=0;i<4;i++)
[*]
{
[*]
Motor2Data=phasecw;
[*]
Delay_xms(15);//转速调节
[*]
}
[*]
}
[*]
//Y逆时针转动
[*]
void Motor2CCW(void)
[*]
{
[*]
uchar i;
[*]
for(i=0;i<4;i++)
[*]
{
[*]
Motor2Data=phaseccw;
[*]
Delay_xms(15);//转速调节
[*]
}
[*]
}
[*]
//停止转动
[*]
void MotorStop(void)
[*]
{
[*]
Motor1Data=0x00;
[*]
Motor2Data=0x00;
[*]
}
[*]
//主函数
[*]
void main(void)
[*]
{
[*]
uint i;
[*]
init();
[*]
q2: rece();
[*]
Delay_xms(50);//等待系统稳定
[*]
switch(a)
[*]
{
[*]
case 1:
[*]
for(i=0;i<100;i++)
[*]
{
[*]
Motor2CW(); //Y顺时针转动
[*]
}
[*]
MotorStop();//停止转动
[*]
Delay_xms(500);
[*]
case 2:
[*]
for(i=0;i<100;i++)
[*]
{
[*]
Motor2CCW();//Y逆时针转动
[*]
}
[*]
MotorStop();//停止转动
[*]
Delay_xms(500);
[*]
case 3:
[*]
for(i=0;i<100;i++)
[*]
{
[*]
Motor1CCW();//X逆时针转动
[*]
}
[*]
MotorStop();//停止转动
[*]
Delay_xms(500);
[*]
case 4:
[*]
for(i=0;i<100;i++)
[*]
{
[*]
Motor1CW();//X顺时针转动
[*]
}
[*]
MotorStop();//停止转动
[*]
Delay_xms(500);
[*]
}goto q2;
[*]
}
页:
[1]