0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

问个串行口接收的问题?

这段程序如下:
void receive(uchar idata *data_buffer)
{
    uchar i;
    do{
        while(RI==0);RI=0;
        }while(SBUF^0xAA!=0);             //接收发送方的联络信号0xAA
    SBUF=0xBB;                           //接收到联络信号0xAA,则发送联络信号0xBB
    while(TI==0);TI=0;
    while(1)
        {    cheak_sum=0;
              for(i=0;i<10;i++){                       //用for循环接收10Bytes数据
                   data_buffer[i]=SBUF;              //接收1Byte数据
                   cheak_sum+=data_buffer[i];}  //计算校验和
              while(RI==0);RI=0;               //接收10Bytes数据后,继续接收校验和
              if((SBUF^cheak_sum==0)
                   {SBUF=0x00;break;}
              else
                   {SBUF=0xFF;while(TI==0);TI=0;}
}
}

疑问是,用for循环接收10字节数据的过程,为什么RI不清零?
提问者:sunsiyi92 地点:- 浏览次数:8962 提问时间:04-12 08:53
我有更好的答案
提 交
6条回答
60user73 04-12 09:19


for这个循环语句不好理解,循环复合语句里没有清除RI的语句,不清零RI,能够继续接收数据吗?这个不好理解。
dsgfa 04-16 23:03


每接收完一个字节,需要软件清零RI,以便于接收下一个字节,但这个for语句接收10字节的?怎么理解?各位大虾能回答下吗?
何必太在意 04-20 08:32
在线等,有人解答下吗?
nmcxkwqjhd 04-13 22:04
各位高手能够解答下吗?
ziding56 04-19 00:52
LZ,你怎么老是要用while(RI==0);RI=0;呢?用直接用RI=0,这样不够简洁吗?还有,你怎么老是在判断RI是否为0啊?困惑!
tutu12 04-21 01:15
这函数的FOR语句连续接收10字节数据,需要判断是否已经接收1 字节,  再从SBUF接收, 所以需要while判断,有那位高手,给我判断下这程序是否有错,怎样重写?
撰写答案
提 交
1 / 3
1 / 3