谁能看出来下面程序有什么问题。
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar buf[10]=0; //接收缓存数组
uchar r_x=0;//接收计数
uchar r_flag=0;//接收成功标志
sbit DA = P2^7;//继电器1
sbit DB = P2^6;//继电器2
sbit DC = P2^5;//继电器3
sbit DD = P2^4;//继电器4
sbit FM = P0^4;//蜂鸣器
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar read_data(void)//读取接收数据
{
uchar temp = 0;
if(r_flag == 1)
{
r_flag = 0;
temp = buf[2];
FM = 0;//蜂鸣器响
delay(50);
FM = 1;//蜂鸣器关
}
return temp;
}
void uart_init()
{
TMOD=0x20;
TH1=0xfd; //波特率9600
TL1=0xfA;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void main()
{
uchar key=0;
uart_init(); //串口初始化
FM = 1;//蜂鸣器关
DA=1;
DB=1;
DC=1;
DD=1;
while(1)
{
key = read_data();//读取接收数据
if(key == 'A') DA =0;//打开A
else if(key == 'B') DA =1;//关闭A
else if(key == 'C') DB =0;//打开B
else if(key == 'D') DB =1;//关闭B
else if(key == 'E') DC =0;//打开C
else if(key == 'F') DC =1;//关闭C
else if(key == 'G') DD =0;//打开D
else if(key == 'H') DD =1;//关闭D
}
}
void ser()interrupt 4 //接收中断
{
RI=0; //清除接收标志
buf[r_x] = SBUF;//接收数据至缓存区
r_x++;
if(buf[0]!='O'){r_x=0;}
if(r_x == 3) //接收完成
{
r_x=0;
r_flag=1;
}
}
#define uchar unsigned char
#define uint unsigned int
uchar buf[10]=0; //接收缓存数组
uchar r_x=0;//接收计数
uchar r_flag=0;//接收成功标志
sbit DA = P2^7;//继电器1
sbit DB = P2^6;//继电器2
sbit DC = P2^5;//继电器3
sbit DD = P2^4;//继电器4
sbit FM = P0^4;//蜂鸣器
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar read_data(void)//读取接收数据
{
uchar temp = 0;
if(r_flag == 1)
{
r_flag = 0;
temp = buf[2];
FM = 0;//蜂鸣器响
delay(50);
FM = 1;//蜂鸣器关
}
return temp;
}
void uart_init()
{
TMOD=0x20;
TH1=0xfd; //波特率9600
TL1=0xfA;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void main()
{
uchar key=0;
uart_init(); //串口初始化
FM = 1;//蜂鸣器关
DA=1;
DB=1;
DC=1;
DD=1;
while(1)
{
key = read_data();//读取接收数据
if(key == 'A') DA =0;//打开A
else if(key == 'B') DA =1;//关闭A
else if(key == 'C') DB =0;//打开B
else if(key == 'D') DB =1;//关闭B
else if(key == 'E') DC =0;//打开C
else if(key == 'F') DC =1;//关闭C
else if(key == 'G') DD =0;//打开D
else if(key == 'H') DD =1;//关闭D
}
}
void ser()interrupt 4 //接收中断
{
RI=0; //清除接收标志
buf[r_x] = SBUF;//接收数据至缓存区
r_x++;
if(buf[0]!='O'){r_x=0;}
if(r_x == 3) //接收完成
{
r_x=0;
r_flag=1;
}
}
小编可以补充一下,你的代码功能吗?
是编译不了还是不实现不了功能,能具体把问题描述清楚吗
是功能。用手机发字符ONA没反回值。但用其它程序有反回值得。不知道是字符没有对上,没是什么。?
手机蓝牙控制继电器。编译上没有出错了,但是用手机发字符ONA,ONB, ONC等都没有反应。用的是安卓蓝牙串口发的。不知道是那里出了问题。
会不会是手机发字符有错?不太明白?
先把串口接收到的数据打印出来看看啊
