单片机接收手机蓝牙传出的数据程序出现问题,求解答!蓝牙模块是HC-06从机,这有这些财富值了
#include<STC12C5A60S2.h>//#include<reg52.h>#defineucharunsignedchar#defineuintunsigne...
#include<STC12C5A60S2.h>
//#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint ma,mb,mc;
sbit led1 = P0^0 ;//1
sbit led2 = P0^1 ;//2
sbit led3 = P0^2 ;//3
sbit led4 = P0^3 ;//4
sbit led5 = P0^4 ;//5
sbit led6 = P0^5 ;//6
sbit led7 = P0^6 ;//7
sbit led8 = P0^7 ;//8
void init()
{
TMOD=0x20;//设置定时器1为工作方式2
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(1)
{ ;
while(RI==0);
RI=0;
ma=SBUF;
switch(ma)
{
case '1':led1=0;break; //1
case '2':led2=0;break; //2
case '3':led3=0;break; //3
case '4':led4=0;break; //4
case '5':led5=0;break; //5
case '6':led6=0;break; //6
case '7':led7=0;break; //7
case '8':led8=0;break; //8
case 'a':led1=1;break; //停
case 'b':led2=1;break; //停
case 'c':led3=1;break; //停
case 'd':led4=1;break; //停
case 'e':led5=1;break; //停
case 'f':led6=1;break; //停
case 'g':led7=1;break; //停
case 'h':led8=1;break; //停
}
}
} 展开
//#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint ma,mb,mc;
sbit led1 = P0^0 ;//1
sbit led2 = P0^1 ;//2
sbit led3 = P0^2 ;//3
sbit led4 = P0^3 ;//4
sbit led5 = P0^4 ;//5
sbit led6 = P0^5 ;//6
sbit led7 = P0^6 ;//7
sbit led8 = P0^7 ;//8
void init()
{
TMOD=0x20;//设置定时器1为工作方式2
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(1)
{ ;
while(RI==0);
RI=0;
ma=SBUF;
switch(ma)
{
case '1':led1=0;break; //1
case '2':led2=0;break; //2
case '3':led3=0;break; //3
case '4':led4=0;break; //4
case '5':led5=0;break; //5
case '6':led6=0;break; //6
case '7':led7=0;break; //7
case '8':led8=0;break; //8
case 'a':led1=1;break; //停
case 'b':led2=1;break; //停
case 'c':led3=1;break; //停
case 'd':led4=1;break; //停
case 'e':led5=1;break; //停
case 'f':led6=1;break; //停
case 'g':led7=1;break; //停
case 'h':led8=1;break; //停
}
}
} 展开
展开全部
有3个明显的问题:
1,你的程序已经开放了串口中断EA=1;ES = 1,为什么还用查询的方式读取串口数据?这样,蓝牙模块向单片机发送数据,单片机的程序就会发生中断,你的程序没有对中断进行任何处理,怎能不出错呢!
2, init();
while(1)
{ ;这里不应该有这个分号
3,你用uint定义了ma,mb,mc,然后ma = SBUF;switch(ma),从串口接收的是字符类型数据,而你定义的uint类型的ma是错误的,而应该是uchar ma。
你的程序这样修改后试试:
#include<STC12C5A60S2.h>
//#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar ma;//这样修改
uint mb,mc;
sbit led1 = P0^0 ;//1
sbit led2 = P0^1 ;//2
sbit led3 = P0^2 ;//3
sbit led4 = P0^3 ;//4
sbit led5 = P0^4 ;//5
sbit led6 = P0^5 ;//6
sbit led7 = P0^6 ;//7
sbit led8 = P0^7 ;//8
void init()
{
TMOD=0x20;//设置定时器1为工作方式2
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=0;//关闭全局中断
ES=0;//关闭串口中断
}
void main()
{
init();
while(1)
{ //去掉这里的分号
while(RI==0);
RI=0;
ma=SBUF;
switch(ma)
{
case '1':led1=0;break; //1
case '2':led2=0;break; //2
case '3':led3=0;break; //3
case '4':led4=0;break; //4
case '5':led5=0;break; //5
case '6':led6=0;break; //6
case '7':led7=0;break; //7
case '8':led8=0;break; //8
case 'a':led1=1;break; //停
case 'b':led2=1;break; //停
case 'c':led3=1;break; //停
case 'd':led4=1;break; //停
case 'e':led5=1;break; //停
case 'f':led6=1;break; //停
case 'g':led7=1;break; //停
case 'h':led8=1;break; //停
}
}
}
先这样试试,有问题继续追问。
1,你的程序已经开放了串口中断EA=1;ES = 1,为什么还用查询的方式读取串口数据?这样,蓝牙模块向单片机发送数据,单片机的程序就会发生中断,你的程序没有对中断进行任何处理,怎能不出错呢!
2, init();
while(1)
{ ;这里不应该有这个分号
3,你用uint定义了ma,mb,mc,然后ma = SBUF;switch(ma),从串口接收的是字符类型数据,而你定义的uint类型的ma是错误的,而应该是uchar ma。
你的程序这样修改后试试:
#include<STC12C5A60S2.h>
//#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar ma;//这样修改
uint mb,mc;
sbit led1 = P0^0 ;//1
sbit led2 = P0^1 ;//2
sbit led3 = P0^2 ;//3
sbit led4 = P0^3 ;//4
sbit led5 = P0^4 ;//5
sbit led6 = P0^5 ;//6
sbit led7 = P0^6 ;//7
sbit led8 = P0^7 ;//8
void init()
{
TMOD=0x20;//设置定时器1为工作方式2
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=0;//关闭全局中断
ES=0;//关闭串口中断
}
void main()
{
init();
while(1)
{ //去掉这里的分号
while(RI==0);
RI=0;
ma=SBUF;
switch(ma)
{
case '1':led1=0;break; //1
case '2':led2=0;break; //2
case '3':led3=0;break; //3
case '4':led4=0;break; //4
case '5':led5=0;break; //5
case '6':led6=0;break; //6
case '7':led7=0;break; //7
case '8':led8=0;break; //8
case 'a':led1=1;break; //停
case 'b':led2=1;break; //停
case 'c':led3=1;break; //停
case 'd':led4=1;break; //停
case 'e':led5=1;break; //停
case 'f':led6=1;break; //停
case 'g':led7=1;break; //停
case 'h':led8=1;break; //停
}
}
}
先这样试试,有问题继续追问。
更多追问追答
追问
我试了一下,还是有问题。。
追答
你的追问太简单了,既没说修改了以后有没有什么变化,也没说是什么问题,比如,不能通信,还是能通信但LED显示不正常等,光靠那些连注释都很模糊的程序去查找问题有些困难,万一硬件连接也有问题呢,所以很难回答你的问题。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询