用PC机简单控制四相五线步进电机问题

2019-07-16 05:56发布

我想用串口发送命令控制开发板上的步进电机,但是没反应,请大家帮忙看看。下面是程序:
/*-----------------------------------------------
  名称:四相五线步进电机的PC机简单控制
------------------------------------------------*/
#include <reg52.h>
sbit WELA=P2^7;//数码管位选锁存器信号
unsigned char k;
unsigned char code F_Rotation[4]={0x20,0x10,0x08,0x04}; //正转表格,换算成二进制 0010 0000,0001 0000,0000 1000,0000 0100
unsigned char code B_Rotation[4]={0x04,0x08,0x10,0x20}; //反转表格,换算成二进制 0000 0100,0000 1000,0001 0000,0010 0000
/******************************************************************/
/*                    延时函数                                    */
/******************************************************************/
void Delay(unsigned int i)//延时
{
while(--i);
}
void delay1(unsigned int xms)
  {
   unsigned int a,b;
for(a=110;a>0;a--)
  for(b=xms;b>0;b--);
  }
/******************************************************************/
/*                    串口初始化                                      */
/******************************************************************/
void init_serial()
{
TMOD=0x20;   //定时器1方式2   自动重装模式
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;   //串口中断允许;
SM1=1;
REN=1;
ES=1;      //  开串口中断
EA=1;    //总中断允许
    PCON=0x80;     //设置SMOD=1  速率翻倍
}
/******************************************************************/
/*                   正转                                       */
/******************************************************************/
void clockwise()
{
  unsigned char i;
  for(i=0;i<4;i++)      //4相
     {
      P0=F_Rotation[i];  //输出对应的相 可以自行换成反转表格
      Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
  }
}
/******************************************************************/
/*                   反转                                       */
/******************************************************************/
void cclockwise()
{
unsigned char i;
for(i=0;i<4;i++)      //4相
     {
      P0=B_Rotation[i];  //输出对应的相 可以自行换成反转表格
      Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
  }
}
/******************************************************************/
/*                   接收处理函数                                 */
/******************************************************************/
void dwith()
{
  if(k=='w')
{delay1(10);clockwise();}
  else if(k=='s')
   {delay1(10);cclockwise();}
}
/******************************************************************/
/*                   主函数                                       */
/******************************************************************/
main()
{
init_serial();
    P0=0XFF;//关掉数码管的位选信号。阻止数码管受到P0口信号的影响。
Delay(500);
WELA=1;
Delay(500);
WELA=0;
while(1)
   {
   dwith();
   }
}
void ser_inter() interrupt 4
{
while(!RI);
k=SBUF;
RI=0;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。