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

2019-03-24 18:05发布

发送:        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条回答
tianshuihu
1楼-- · 2019-03-24 19:21
 精彩回答 2  元偷偷看……
xiangbinlvcha
2楼-- · 2019-03-24 20:36
tianshuihu 发表于 2015-3-20 16:49
先用串口调试助手观察一下第一个单片机发送的数据是否是对的,完整的
如果没问题再用单片机去接收数据

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

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



谢谢,我试一下,你说的挺有道理的,谢谢指教

一周热门 更多>