/********************************************************
串口驱动步进电机(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 反转
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>