为啥一有while循环 串口中断就接不到数据了
只要前进 就停止不了了 只要一前进 任何操作都执行不了了
求大神帮助
完整程序代码:
#include<reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
//小车轮子接线方式:in1=p1.2 in2=p1.3 in3=p1.6 in4=p1.7
sbit wleft0=P1^2;sbit wleft1=P1^3;//左轮
sbit wright0=P1^6;sbit wright1=P1^7;//右轮
sbit d0=P1^4;sbit d1=P1^5;//右轮
bit startBit = 0; //串口接收开始标志位
bit newLineReceived = 0; //串口一帧协议包接收完成
unsigned char inputString[50]; //接收数据协议
uchar f=1;//0为前进 1为后退
uchar al=0;
uchar ar=0;
uchar l=10; //左轮速度 0~20内调节,控制输出电压,参数过低轮子不动,注意调试。
uchar r=10; //右轮速度 0~20内调节,控制输出电压,参数过低轮子不动,注意调试。
/******************************************************************/
/* 串口中断程序*/
/******************************************************************/
void UART_SER () interrupt 4
{
unsigned char n; //定义临时变量
static int num = 0;
if(RI) //判断是接收中断产生
{
RI = 0; //标志位清零
n = SBUF; //读入缓冲区的值
//control=n;
if(n == '$')
{
startBit = 1;
num = 0;
}
if(startBit == 1)
{
inputString[num] = n;
}
if (n == '#')
{
newLineReceived = 1;
startBit = 0;
}
num++;
if(num >= 50)
{
num = 0;
startBit = 0;
newLineReceived = 0;
}
}
}
//WIFI、蓝牙初始化
void WifiInit(void)
{
SCON = 0x50; // SCON: 模式1, 8-bit UART, 使能接收
TMOD |= 0x20;
TH1=0xfd; //波特率9600 初值
TL1=0xfd;
TR1= 1;
EA = 1; //开总中断
ES= 1; //打开串口中断
}
void delay_ms(uint k)//延时函数
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<113;j++)
{
;
}
}
}
uint a=0;
uint i=0;
void turn_left(){ //2.5v
while(a<15){
wleft0=1;
delay_ms(10);
wleft0=0;
delay_ms(10);
a++;
}
if(wright1==1){
wleft0=1;
}else{
wleft0=0;
}
a=0;
}
void round_left(){//原地左转
P1=0x77;
}
void round_right(){//原地右转
P1=0xbb;
}
void stop(){
P1 = 0xff; //关闭所有LED和风扇
}
void run(uint r){//前进
while(r){
P1=0x7b;
}
}
void retreat(){//后退
P1=0xb7;;
}
main(){
P1 = 0xff; //关闭所有LED和风扇
WifiInit();
//循环接收蓝牙数据
while(1){
if (newLineReceived)
{
switch(inputString[1])
{
case '0': run(0);break;//停止
case '1': run(1);break;//前进
case '2': retreat();break;//后退
case '3': round_left();break;//原地左转
case '4': round_right();break;//原地右转
case '5': turn_left();break;
case '6': ;break;//开灯
default:P1 = 0xff;break;
}
newLineReceived = 0;
}
}
}
|