51单片机串口通讯,可以接收与返回数据为什么不能执行程序中的语句?

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit EN1=P1^4;
sbit EN2=P1^5;

sbit IN1=P1^2;
sbit IN2=P1^3;

sbit IN3=P1^6;
sbit IN4=P1^7;

void RUN()
{
EN1=1;
EN2=1;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}

void BACK()
{
EN1=1;
EN2=1;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}

void LEFT()
{
EN1=1;
EN2=0;
IN1=1;
IN2=0;

}

void RIGHT()
{
EN1=0;
EN2=1;
IN3=0;
IN4=1;
}

void STOP()
{
EN1=0;
EN2=0;
}

void UartConfiguration()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
SCON=0x50;
EA=1;
ES=1;
TR1=1;
}

void main()
{
UartConfiguration();
while(1)
{

}
}

void Uart() interrupt 4
{
unsigned char date;
date=SBUF;
RI=0;
if(date==0x01)
{
RUN();
}
else if(date==0x02)
{
BACK();
}
SBUF=date;
while(!TI);
TI=0;

}

你说的是不能执行RUN和BACK吗,据我在protues上仿真,你的这个程序是可以的追问

对的,不能执行这两个语句

但是烧录入开发版没有反应

追答

在开发板上没反应,并不一定是程序的问题,也有可能是你硬件的问题,你可以将其他硬件断开,给开发板发送你需要的数据,用万用表量一下相应管脚电平的高低。

你的程序是不是用L298N控制电机的???

追问

好的,我测试一下

电机是用L293D驱动的

追答

一些51单片机驱动能力很弱的,对于功率稍大的器件是需要加上上拉电阻的

追问

问题已经解决了,重新烧录程序后没有问题

是这样的,我把程序里面换成了switch()语句,结果发现发送数据时,小车要接受到停止信号才能做其他动作,这可能是什么原因呢

就是说执行了RUN语句后,必须执行STOP语句后才能做下一个动作

温馨提示:答案为网友推荐,仅供参考
相似回答