串口控制步进电机

2019-07-16 01:25发布

/********************************************************
串口驱动步进电机(9600波特率)
注:
*********************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer[2] = {0}; //从串口接收的数据
uint i,t,port1,port3;
void delay(uint z);
//void Init(void);
void moterGo(void);
void moterBack(void);

void main()
{
//P0=0xff;
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;//9600波特率 (11.0592MHza晶振)
TR1=1;//定时器1打开
REN=1;//串口允许接受
SM0=0;//串口工作方式1
SM1=1;//串口工作方式1
EA=1;//总中断打开
ES=1;//串口中断打开
while(1)
  {
  switch(Buffer[0])
   {
   case 1: moterGo();P1=0x7f;break;
   case 2: moterBack();P1=0xbf; break;
   //case 3: P2=0xfb; break;   
   default:break;
   }
  }  
}
void ser() interrupt 4
{
if(RI==1)  //RI接收中断标志位
{
Buffer[0] = SBUF - 97;
RI=0;
}
// P2=0xbf;
}

void moterGo(void)
{
while(1)
  {
   port3=0x01;
   //port1=0x01;//第一个二极管灭
   delay(5);
   P3=port3;
   //P1=port1;
   for(i=0;i<=3;i++)
    {
       delay(5);
    //P1=port1<<i;
    P3=port3<<i;
   }
   
  }  
}
void moterBack(void)
{
while(1)
  {
   port3=0x08;
   //port1=0x08;//第一个二极管灭
   delay(5);
   P3=port3;
  // P1=port1;
   for(i=0;i<=3;i++)
    {
       delay(5);
   // P1=port1>>i;
    P3=port3>>i;
   }
  
  }
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

现在问题是检测到数据后   进入moterGo()的循环 不能跳出  但我还想接收到a 电机就能连续转动  检测到b  反转

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