我想用串口发送命令控制
开发板上的步进电机,但是没反应,请大家帮忙看看。下面是程序:
/*-----------------------------------------------
名称:四相五线步进电机的PC机简单控制
------------------------------------------------*/
#include <reg52.h>
sbit WELA=P2^7;//数码管位选锁存器信号
unsigned char k;
unsigned char code F_Rota
tion[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;
}
一周热门 更多>