51单片机中如何用串口控制电机运行
时间:10-02
整理:3721RD
点击:
小女子一边看视频,一边学单片机串口的实验,下面是视频中没有问题的程序,可以成功地发送和接收相关的值:
void usartconfiguration()
{
SCON=0x50;
TMOD=0x20;
PCON=0x80;//波特率加倍
TH1=0xFA;
TL1=0xFA;
TR1=1;
ES=1;
EA=1;
}
void usart() interrupt 4
{
unsigned char receive,i;
receive=SBUF;
RI=0;
SBUF=receive;
while(!TI);
TI=0;
}
void main()
{
usartconfiguration();
while(1);
{
}
}
在此想自己在电脑中输入参数,实现对电机运动的控制,如输入1,电机正转,输入2,电机反转;于是将usart()函数改为:
void usart() interrupt 4
{
unsigned char receive,i;
receive=SBUF;
RI=0;
SBUF=receive;
if(receive==1)
{
for(i=0;i<8;i++)
{
P1=tap1;//tap1控制电机正转
delay(50);//已定义了delay函数
}
}
if(receive==2)
{
for(i=0;i<8;i++)
{
P1=tap2;//tap2控制电机反转
delay(50);
}
}
while(!TI);
TI=0;
}
红色部分是后面添加用于控制电机,但是这样下来,发送数值,不仅电机不会转动,而且电脑中也不能接收到数值,请问这是为什么?
我看单片机例程,其中一个介绍输入数字用来控制LED灯,但用的是RS232串口,请问有什么区别?
小女子菜鸟一枚,希望大家赐教!
void usartconfiguration()
{
SCON=0x50;
TMOD=0x20;
PCON=0x80;//波特率加倍
TH1=0xFA;
TL1=0xFA;
TR1=1;
ES=1;
EA=1;
}
void usart() interrupt 4
{
unsigned char receive,i;
receive=SBUF;
RI=0;
SBUF=receive;
while(!TI);
TI=0;
}
void main()
{
usartconfiguration();
while(1);
{
}
}
在此想自己在电脑中输入参数,实现对电机运动的控制,如输入1,电机正转,输入2,电机反转;于是将usart()函数改为:
void usart() interrupt 4
{
unsigned char receive,i;
receive=SBUF;
RI=0;
SBUF=receive;
if(receive==1)
{
for(i=0;i<8;i++)
{
P1=tap1;//tap1控制电机正转
delay(50);//已定义了delay函数
}
}
if(receive==2)
{
for(i=0;i<8;i++)
{
P1=tap2;//tap2控制电机反转
delay(50);
}
}
while(!TI);
TI=0;
}
红色部分是后面添加用于控制电机,但是这样下来,发送数值,不仅电机不会转动,而且电脑中也不能接收到数值,请问这是为什么?
我看单片机例程,其中一个介绍输入数字用来控制LED灯,但用的是RS232串口,请问有什么区别?
小女子菜鸟一枚,希望大家赐教!
小弟也是菜鸟一枚,,帮顶!
你把条件判断里的1、2都换成字符型的试试。我猜想串口没有返回可能是延时的问题,你把延时去掉,直接改变某个IO口的电平,然后外接一个LED指示看看是不是这个问题。
没什么问题
串口控制电机?
很有想象力的啊?
注意一下发送和接收的数是ASSIC码还是十六进制数,还有红色程序语句放到主程序while循环里,中断程序只做简单的数据传递和处理就好,不要有太多操作。
晕16年的帖子。