51单片机发送多个字节不能被另一块单片机识别识别
时间:10-02
整理:3721RD
点击:
各位大神帮我看下,为什么我发送5个字节的命令,另外一片单片机没有返回5个值,而我不用程序,直接用
串口调试助手发送相同的5个字节的命令给另一片单片机,有5个返回值呢?而且我用串口给这个单片机发送5个命令也可以接收。 //通信协议如下:波特率19200,8位数据位,一位停止位
#define N 5 //接收字节数
void uart_init();
void delay_ms(uint z);
uchar flag,i; //删除无用变量
uchar code table[]={0xff,0xfe,0x02,0x02,0x03}; //发送5个人字节的命令
uchar table1[N]; //接收缓存数组
uchar j=0;
main()
{
uchar *p;
uint Co2_hi,n;
uart_init();
LCD_INIT(); //
while(1)
{
ES=0;
for(i=0;i<5;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
ES=1;
delay_ms(500);
if(flag==1)
{
ES=0;
p=table1;
Data_Decode(p);
Co2_hi=Co2_Val/1000;
if(Co2_hi!=0)
{write_char(0,1,num[Co2_hi]);}
write_char(0,2,num[Co2_Val/100%10]);
write_char(0,3,num[Co2_Val/10%10]);
write_char(0,4,num[Co2_Val%10]);
ES=1;
flag=0;
}
delay_ms(50);
}
}
void uart_init() //晶振11.0592,波特率19200
{
TMOD = 0x20;
SCON = 0x50; // SM0=0; SM1=1;
REN=1;
TH1 = 0xFD;
TL1 = 0xFD;
PCON=0x80; //波特率加倍
EA = 1;
ES = 1;
TR1 = 1;
}
void ser()interrupt 4
{
RI=0;
table1[j++]=SBUF; //存数据到接收缓存
if(j==N) //数组满时,允许处理
{ flag=1;
j=0;
}
}
串口调试助手发送相同的5个字节的命令给另一片单片机,有5个返回值呢?而且我用串口给这个单片机发送5个命令也可以接收。 //通信协议如下:波特率19200,8位数据位,一位停止位
#define N 5 //接收字节数
void uart_init();
void delay_ms(uint z);
uchar flag,i; //删除无用变量
uchar code table[]={0xff,0xfe,0x02,0x02,0x03}; //发送5个人字节的命令
uchar table1[N]; //接收缓存数组
uchar j=0;
main()
{
uchar *p;
uint Co2_hi,n;
uart_init();
LCD_INIT(); //
while(1)
{
ES=0;
for(i=0;i<5;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
ES=1;
delay_ms(500);
if(flag==1)
{
ES=0;
p=table1;
Data_Decode(p);
Co2_hi=Co2_Val/1000;
if(Co2_hi!=0)
{write_char(0,1,num[Co2_hi]);}
write_char(0,2,num[Co2_Val/100%10]);
write_char(0,3,num[Co2_Val/10%10]);
write_char(0,4,num[Co2_Val%10]);
ES=1;
flag=0;
}
delay_ms(50);
}
}
void uart_init() //晶振11.0592,波特率19200
{
TMOD = 0x20;
SCON = 0x50; // SM0=0; SM1=1;
REN=1;
TH1 = 0xFD;
TL1 = 0xFD;
PCON=0x80; //波特率加倍
EA = 1;
ES = 1;
TR1 = 1;
}
void ser()interrupt 4
{
RI=0;
table1[j++]=SBUF; //存数据到接收缓存
if(j==N) //数组满时,允许处理
{ flag=1;
j=0;
}
}