2321|2

31

帖子

0

TA的资源

一粒金砂(中级)

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

发送:        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.
此帖出自51单片机论坛

最新回复

先用串口调试助手观察一下第一个单片机发送的数据是否是对的,完整的 如果没问题再用单片机去接收数据 第二个单片机的while循环太长,很可能数据发过来了而没有得到及时处理,所以收到的数据不全 建议开启接收中断,中断里面只把数据存入接收数组,并更新指针; 在主函数的while循环中判断接收数组满了之后再统一处理显示  详情 回复 发表于 2015-3-20 16:49

回复
举报

1658

帖子

1

TA的资源

纯净的硅(高级)

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

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

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

点评

谢谢,我试一下,你说的挺有道理的,谢谢指教  详情 回复 发表于 2015-3-20 20:50

回复

31

帖子

0

TA的资源

一粒金砂(中级)

tianshuihu 发表于 2015-3-20 16:49
先用串口调试助手观察一下第一个单片机发送的数据是否是对的,完整的
如果没问题再用单片机去接收数据

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

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



谢谢,我试一下,你说的挺有道理的,谢谢指教
此帖出自51单片机论坛

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表