有3个明显的问题:
1,你的程序已经开放了串口中断EA=1;ES = 1,为什么还用查询的方式读取串口数据?这样,蓝牙模块向单片机发送数据,单片机的程序就会发生中断,你的程序没有对中断进行任何处理,怎能不出错呢!
2, init();
while(1)
{ ;这里不应该有这个分号
3,你用uint定义了ma,mb,mc,然后ma = SBUF;switch(ma),从串口接收的是字符类型数据,而你定义的uint类型的ma是错误的,而应该是uchar ma。
你的程序这样修改后试试:
#include
//#include
#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; //停
}
}
}
先这样试试,有问题继续追问。