搜索
bottom↓
回复: 14

51单片机串口通信,接收端显示的数码管最后两位数字一直...

[复制链接]

出0入0汤圆

发表于 2019-11-27 18:10:00 | 显示全部楼层 |阅读模式
本帖最后由 yuguoyu123456 于 2019-11-27 20:00 编辑

我用串口通信使两个单片机的8位数码管各显示时间,一个显示时间,并发数据,一个收到数据显示,现在的问题是:后面数据覆盖了一部分前面的数据,使小时位置一直在波动,我应该怎么解决

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-11-27 18:15:56 | 显示全部楼层
描述的很不通顺,理解的不是太清楚,要不上个图看下现象,是程序问题吧

出0入0汤圆

 楼主| 发表于 2019-11-27 18:20:50 | 显示全部楼层
这是从机接收中断的void ser_isr() interrupt 4
{
static unsigned char tou = 0x00;

static unsigned char flag = 0;





RI=0;
tou = SBUF;


       
if(flag == 1 )
{
        buf[num]=SBUF;
        num++;

        if(num == 6 )
        {
                num = 0;
                flag = 0;
        }
                if(tou == 0x60 )
        {
                num = 0;
                flag = 0;
        }
}
if ( tou == 0x55 )
flag = 1;






}



出0入0汤圆

 楼主| 发表于 2019-11-27 18:23:19 | 显示全部楼层
这是主机发送的发送函数
                               
                                send(0x55); //数据头
                                for(i=0;i<6;i++)               
                                {
                                send(fasong[i]);
                                display(miao,fen,shi);
                                }


                                send(0x60);         //数据尾
               

出0入0汤圆

 楼主| 发表于 2019-11-27 18:25:54 | 显示全部楼层
两个数码管应该一样才对

出0入0汤圆

发表于 2019-11-27 18:32:35 | 显示全部楼层
你先发送不变的数字试试,比如发送端显示12-34-56,并发送数组123456,看看接收端显示的是不是12-34-56

出0入0汤圆

 楼主| 发表于 2019-11-27 19:23:52 | 显示全部楼层
hill123 发表于 2019-11-27 18:32
你先发送不变的数字试试,比如发送端显示12-34-56,并发送数组123456,看看接收端显示的是不是12-34-56 ...

是的,他不会变

出0入0汤圆

 楼主| 发表于 2019-11-27 19:59:42 | 显示全部楼层
就是后面数据覆盖了一部分前面的数据

出0入0汤圆

 楼主| 发表于 2019-11-27 21:17:32 | 显示全部楼层

您能说仔细一点吗

出0入0汤圆

发表于 2019-11-28 13:33:15 | 显示全部楼层
这种开发板很多IO口都是复用的。你去看看原理图。把复用的电路断开。

出0入0汤圆

发表于 2019-12-1 01:14:16 来自手机 | 显示全部楼层
这是从机接收中断的void ser_isr() interrupt 4 { static unsigned char tou = 0x00;  static unsigned char flag = 0;   中断里声明变量?   RI=0; tou = SBUF;            if(flag == 1 ) {          buf[num]=SBUF;         num++;          if(num == 6 )         {                 num = 0;                 flag = 0;         }   二次复位?              if(tou == 0x60 )         {                 num = 0;                 flag = 0;         } } if ( tou == 0x55 ) flag = 1;你需要两个flag,一个是中断内判断的,应该是显示扫描用的。或者你需要两个buff,应该是中断内写的,应该是给显示用的。不然你这边显示,那边中断给覆盖了

出0入0汤圆

发表于 2019-12-1 01:15:40 来自手机 | 显示全部楼层
接收buff检验完无误,拷贝给显示buff,拷贝完打开中断再接收

出0入0汤圆

 楼主| 发表于 2019-12-1 16:11:29 | 显示全部楼层
谢谢,已经解决

出0入0汤圆

 楼主| 发表于 2019-12-1 16:12:28 | 显示全部楼层
我主机发送的是shi、fen、miao,应该变成shishi、shige、fenshi、fenge、miaoshi、miaoge
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 12:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表