关于串口多字节通信

2019-07-15 17:51发布

关于串口多字节通信,这个是2个字节的,只能读到前面的,按快的有时候会只读到后面的。。求原因啊



#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit wela=P2^3;
sbit dula=P2^2;
uchar num,flag,a,j=0;
uint temp=0;
uchar r_table[2];

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code w_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void display(uchar num1);




void delay(uchar x)
{
uint i,j;
for(i=x;i>0;i--)
        for(j=110;j>0;j--);
}

void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}

void main()
{
        init();
        //RI=1;
        while(1)
                {
                        if(flag==1)
                                {
                                 ES=0;
                               
                                 temp=0;
                                 
                                 for(j=0;j<2;j++)
                                 {
                                 SBUF=r_table[j];
                                 //ti=1;
                                 while(!TI);
                                 TI=0;
                                 }
                                 j=0;
                                 ES=1;
                                 flag=0;
                                }
                                display(a);
                }

}

void display(uchar num1)
{

dula=1;
P0=table[num1/4096];
dula=0;
P0=0xff;
wela=1;
P0=w_table[0];
wela=0;
delay(2);

dula=1;
P0=table[num1%4096/256];
dula=0;
P0=0xff;
wela=1;
P0=w_table[1];
wela=0;
delay(2);

dula=1;
P0=table[num1%16/16];
dula=0;
P0=0xff;
wela=1;
P0=w_table[2];
wela=0;
delay(2);

dula=1;
P0=table[num1%16];
dula=0;
P0=0xff;
wela=1;
P0=w_table[3];
wela=0;
delay(2);


}

void sc() interrupt 4
{

   RI=0;
         for(j=0;j<2;j++)
         {
         r_table[j]=SBUF;
         }
         flag=1;
       
        /* a=SBUF;
         temp++;
         
       
         a=a*256+SBUF;       
         flag=1;*/
         

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
Golf_research
1楼-- · 2019-07-15 20:57
 精彩回答 2  元偷偷看……
曹铁军
2楼-- · 2019-07-15 22:22
如何做一个packet,我想要51单片机发送一个大于255的数值。
曹铁军
3楼-- · 2019-07-15 23:39
Golf_research 发表于 2015-6-5 17:48
接收数据的时候用的是中断,每次中断发生,只能是接收到一个字节的数据,不应该在中断中做循环去接受数据,这样的话,只能接收到一个字节的数据。多字节数据传输要进行校验,做成一个packet,接收到这个packet后去做处理. ...

怎么做一个packet,我想用51单片机发一个大于255的数值。
曹铁军
4楼-- · 2019-07-16 01:50
51单片机如何发送多字节
Golf_research
5楼-- · 2019-07-16 02:19
曹铁军 发表于 2015-7-1 15:35
怎么做一个packet,我想用51单片机发一个大于255的数值。

那就是多字节传输,如果不进行数据的校验,那就是和单字节传输一样的。如果叫校验,自己可以定协议,比如自己定义开始位是0x99,那设备接收到0x99就知道是数据传送开始了,这是个简单的比喻,具体的情况具体以分析,比如0x99不能和数据位重合,要不然就会乱掉,总之数据传输的协议你可以自己设定。
Golf_research
6楼-- · 2019-07-16 03:25
 精彩回答 2  元偷偷看……

一周热门 更多>