跪求大神看一下程序解答一下。我的程序是单片机接收上位机发来的数字,后对应不同的数字指令通过两个电机做出上下左右的模拟转动。程序语法都没问题,没有错误和警告,也能正常接收上位机的数据,但是就是不执行命令。能看到上位机发送命令后单片机接收灯闪烁一下,但是单片机接的步进电机不动。程序单独拿出去无限循环都能执行。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned 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[i];
Delay_xms(15);//转速调节
}
}
//X逆时针转动
void Motor1CCW(void)
{
uchar i;
for(i=0;i<4;i++)
{
Motor1Data=phaseccw[i];
Delay_xms(15);//转速调节
}
}
//Y顺时针转动
void Motor2CW(void)
{
uchar i;
for(i=0;i<4;i++)
{
Motor2Data=phasecw[i];
Delay_xms(15);//转速调节
}
}
//Y逆时针转动
void Motor2CCW(void)
{
uchar i;
for(i=0;i<4;i++)
{
Motor2Data=phaseccw[i];
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;
}