发送: void main()
{
U8 i,j;
TMOD = 0x20;
TH1 = 253;
TL1 = 253;
TR1 = 1;
SCON = 0x40;
while(1)
{ delay1(100);
RH();
str[0]=U8RH_data_H;
str[1]=U8RH_data_L;
str[2]=U8T_data_H;
str[3]=U8T_data_L;
str[4]=U8checkdata;
for(i=0;i<5;i++)
{
SBUF=str[i];
delay1(200);
while(TI==0);
TI=0;
}
}
}
接收: void main()
{ U8 InPut3; U8 i;
Lcd_Init();
TMOD = 0x20;
TH1 = 253;
TL1 = 253;
TR1 = 1;
SCON = 0x50;
TI=0;
RI=0;
while(1)
{ delay(100);
for(i=0;i<5;i++)
{
while(RI==0);
RI=0;
checksum=str[i]+checksum;
str[i]=SBUF;
delay(200);
if(i<=3)
{
checksum=checksum+str[i];
}
}
iscii_change();
display();
}
}
里面的都是一些子函数,第一个是采集数据后通过串口发送到第二个单片机上,第二个就是后面的单片机接收数据然后显示的程序,为什么在实际中不太对呢,显示的不全,而且老是显示0.
先用串口调试助手观察一下第一个单片机发送的数据是否是对的,完整的
如果没问题再用单片机去接收数据
第二个单片机的while循环太长,很可能数据发过来了而没有得到及时处理,所以收到的数据不全
建议开启接收中断,中断里面只把数据存入接收数组,并更新指针;
在主函数的while循环中判断接收数组满了之后再统一处理显示