问个串行口接收的问题?

[复制链接]
2274|6
 楼主| nudf0009 发表于 2012-8-3 21:23 | 显示全部楼层 |阅读模式
这段程序如下:
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不清零?
 楼主| nudf0009 发表于 2012-8-3 21:41 | 显示全部楼层
本帖最后由 nudf0009 于 2012-8-3 22:33 编辑

for这个循环语句不好理解,循环复合语句里没有清除RI的语句,不清零RI,能够继续接收数据吗?这个不好理解。
 楼主| nudf0009 发表于 2012-8-3 21:51 | 显示全部楼层
本帖最后由 nudf0009 于 2012-8-3 21:53 编辑

每接收完一个字节,需要软件清零RI,以便于接收下一个字节,但这个for语句接收10字节的?怎么理解?各位大虾能回答下吗?
 楼主| nudf0009 发表于 2012-8-3 22:13 | 显示全部楼层
在线等,有人解答下吗?
 楼主| nudf0009 发表于 2012-8-3 22:26 | 显示全部楼层
各位高手能够解答下吗?
wjzx111056 发表于 2012-8-3 22:36 | 显示全部楼层
LZ,你怎么老是要用while(RI==0);RI=0;呢?用直接用RI=0,这样不够简洁吗?还有,你怎么老是在判断RI是否为0啊?困惑!
 楼主| nudf0009 发表于 2012-8-4 18:33 | 显示全部楼层
这函数的FOR语句连续接收10字节数据,需要判断是否已经接收1 字节,  再从SBUF接收, 所以需要while判断,有那位高手,给我判断下这程序是否有错,怎样重写?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

157

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部