[求助] 求教,大神们,看看我这个串口采集数据发送和另一个机子接收显示的程序哪里不对啊!

xiangbinlvcha   2015-3-20 14:24 楼主
发送:        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.

回复评论 (2)

先用串口调试助手观察一下第一个单片机发送的数据是否是对的,完整的
如果没问题再用单片机去接收数据

第二个单片机的while循环太长,很可能数据发过来了而没有得到及时处理,所以收到的数据不全

建议开启接收中断,中断里面只把数据存入接收数组,并更新指针;
在主函数的while循环中判断接收数组满了之后再统一处理显示
点赞  2015-3-20 16:49
引用: tianshuihu 发表于 2015-3-20 16:49
先用串口调试助手观察一下第一个单片机发送的数据是否是对的,完整的
如果没问题再用单片机去接收数据

第二个单片机的while循环太长,很可能数据发过来了而没有得到及时处理,所以收到的数据不全

建议开启接收中断,中断里面只把数据存入接收数组,并更新指针;
在主函数的while循环中判断接收数组满了之后再统一处理显示



谢谢,我试一下,你说的挺有道理的,谢谢指教
点赞  2015-3-20 20:50
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复