51单片机串口通信,接收端显示的数码管最后两位数字一直...
本帖最后由 yuguoyu123456 于 2019-11-27 20:00 编辑我用串口通信使两个单片机的8位数码管各显示时间,一个显示时间,并发数据,一个收到数据显示,现在的问题是:后面数据覆盖了一部分前面的数据,使小时位置一直在波动,我应该怎么解决 描述的很不通顺,理解的不是太清楚,要不上个图看下现象,是程序问题吧 这是从机接收中断的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;
}
这是主机发送的发送函数
send(0x55); //数据头
for(i=0;i<6;i++)
{
send(fasong);
display(miao,fen,shi);
}
send(0x60); //数据尾
两个数码管应该一样才对 你先发送不变的数字试试,比如发送端显示12-34-56,并发送数组123456,看看接收端显示的是不是12-34-56 hill123 发表于 2019-11-27 18:32
你先发送不变的数字试试,比如发送端显示12-34-56,并发送数组123456,看看接收端显示的是不是12-34-56 ...
是的,他不会变 就是后面数据覆盖了一部分前面的数据 jswd0810 发表于 2019-11-27 20:37
数码管扫描周期
您能说仔细一点吗 这种开发板很多IO口都是复用的。你去看看原理图。把复用的电路断开。 这是从机接收中断的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,应该是中断内写的,应该是给显示用的。不然你这边显示,那边中断给覆盖了 接收buff检验完无误,拷贝给显示buff,拷贝完打开中断再接收 谢谢,已经解决 我主机发送的是shi、fen、miao,应该变成shishi、shige、fenshi、fenge、miaoshi、miaoge
页:
[1]