打印

出不来循环

[复制链接]
1315|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
栩栩如生|  楼主 | 2012-5-22 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//接收机程序如下,当接收机确认发射机发送的字符55H后,接收机发送0AAH表示同意接收。但是红色部分  我单步调试时令SBUF=0x55   就是出不来这个循环,执行不了  SBUF=0XAA;  不知道哪里错了,望指点。     
#include<reg51.h>
    unsigned int pf,i;
    unsigned char idata *buf;
  
         void delay()
   { unsigned char i,j;
      for(i=200;i>0;i--)
    for(j=500;j>0;j--);
   }
   void init()
   { P2=0x00;
      SCON=0XD0;
      PCON=0X00;
   TMOD=0X20;
   TH1=0Xf3;
            TL1=0Xf3;
   TR1=1;
   }
   void main()
   {  init();  //初始化
      do{
     while(!RI);
     RI=0;
     }while(SBUF^0x55);
     SBUF=0XAA;
     while(!TI);
     TI=0;
     while(1)
     {  pf=0;     // 开始接收数据
          for(i=0;i<10;i++)
       {   buf=SBUF;
           while(!RI);
        RI=0;
        pf+=buf;
       }
         while(!RI);
      if(SBUF^pf)
      {SBUF=0XEE;
       while(!TI);
       TI=0;
      }
      else
       { SBUF=0XDD;
        for(i=0;i<10;i++)
          { P2=buf;
         delay();
       }
       break;
       }
        
    }
  
   }

相关帖子

沙发
kangzj| | 2012-5-22 20:40 | 只看该作者
SBUF别重复读!它可是一个地址2个寄存器的

使用特权

评论回复
板凳
juventus9554| | 2012-5-22 20:45 | 只看该作者
你无法确定你现在读的是不是刚才读的那个物理寄存器

使用特权

评论回复
地板
chuxh| | 2012-5-22 20:48 | 只看该作者
本帖最后由 chuxh 于 2012-5-22 20:49 编辑

这个寄存的“读”是破坏性的。

使用特权

评论回复
5
llljh| | 2012-5-22 20:52 | 只看该作者
do{
     while(!RI);
     RI=0;
     }while(SBUF^0x55);
这里不对,改成
uchar i;
for(;;){
    while(!RI);
    i = SBUF;
   RI = 0;
  if(i != 0x55) break;
}

使用特权

评论回复
6
栩栩如生|  楼主 | 2012-5-22 20:52 | 只看该作者
嗯,我再思考思考

使用特权

评论回复
7
brucege888| | 2012-5-24 11:20 | 只看该作者
:D 5# llljh

使用特权

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

本版积分规则

310

主题

2657

帖子

0

粉丝