打印

问个串行口接收的问题?

[复制链接]
1598|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 | 只看该作者
在线等,有人解答下吗?

使用特权

评论回复
5
nudf0009|  楼主 | 2012-8-3 22:26 | 只看该作者
各位高手能够解答下吗?

使用特权

评论回复
6
wjzx111056| | 2012-8-3 22:36 | 只看该作者
LZ,你怎么老是要用while(RI==0);RI=0;呢?用直接用RI=0,这样不够简洁吗?还有,你怎么老是在判断RI是否为0啊?困惑!

使用特权

评论回复
7
nudf0009|  楼主 | 2012-8-4 18:33 | 只看该作者
这函数的FOR语句连续接收10字节数据,需要判断是否已经接收1 字节,  再从SBUF接收, 所以需要while判断,有那位高手,给我判断下这程序是否有错,怎样重写?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

157

帖子

0

粉丝