yuguoyu123456 发表于 2019-11-27 18:10:00

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

本帖最后由 yuguoyu123456 于 2019-11-27 20:00 编辑

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

hill123 发表于 2019-11-27 18:15:56

描述的很不通顺,理解的不是太清楚,要不上个图看下现象,是程序问题吧

yuguoyu123456 发表于 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=SBUF;
        num++;

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






}



yuguoyu123456 发表于 2019-11-27 18:23:19

这是主机发送的发送函数
                               
                                send(0x55); //数据头
                                for(i=0;i<6;i++)               
                                {
                                send(fasong);
                                display(miao,fen,shi);
                                }


                                send(0x60);         //数据尾
               

yuguoyu123456 发表于 2019-11-27 18:25:54

两个数码管应该一样才对

hill123 发表于 2019-11-27 18:32:35

你先发送不变的数字试试,比如发送端显示12-34-56,并发送数组123456,看看接收端显示的是不是12-34-56

yuguoyu123456 发表于 2019-11-27 19:23:52

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

是的,他不会变

yuguoyu123456 发表于 2019-11-27 19:59:42

就是后面数据覆盖了一部分前面的数据

yuguoyu123456 发表于 2019-11-27 21:17:32

jswd0810 发表于 2019-11-27 20:37
数码管扫描周期

您能说仔细一点吗

w71057178 发表于 2019-11-28 13:33:15

这种开发板很多IO口都是复用的。你去看看原理图。把复用的电路断开。

1826772880 发表于 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=SBUF;         num++;          if(num == 6 )         {               num = 0;               flag = 0;         }   二次复位?            if(tou == 0x60 )         {               num = 0;               flag = 0;         } } if ( tou == 0x55 ) flag = 1;你需要两个flag,一个是中断内判断的,应该是显示扫描用的。或者你需要两个buff,应该是中断内写的,应该是给显示用的。不然你这边显示,那边中断给覆盖了

1826772880 发表于 2019-12-1 01:15:40

接收buff检验完无误,拷贝给显示buff,拷贝完打开中断再接收

yuguoyu123456 发表于 2019-12-1 16:11:29

谢谢,已经解决

yuguoyu123456 发表于 2019-12-1 16:12:28

我主机发送的是shi、fen、miao,应该变成shishi、shige、fenshi、fenge、miaoshi、miaoge
页: [1]
查看完整版本: 51单片机串口通信,接收端显示的数码管最后两位数字一直...