打印

菜鸟求助,执行if语句时,有时候被执行两次

[复制链接]
1573|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jizzll|  楼主 | 2008-7-21 22:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char DS_ReadByte(void)
{
  volatile unsigned char presen;
  unsigned char i=0;
  volatile unsigned char temp=0;

    for (i=0;i<8;i++)
     {
                  temp=temp>>1; //右移位等待接收一位数据

                  Delay_short(2);   //延时3us
                  P0DIR=0xff;//输出方式
          DQ = 0;               //给脉冲信号
                  Delay_short(3);   //延时4us
                  P0DIR=0xfd;//输入方式
                  Delay_short(7);   //延时8us
                   presen = P0;
                   presen =presen&0x02;
                   
        if(presen == 0x02)  //从低位开始接收数据
                  {                    
                    temp|=0x80;
                    countflag= countflag+1;
                  }        
                   Delay_short(20);   //延时21us
           Delay_short(20);   //等待复位延时21us
                   P0DIR=0xfd;           //拉升电压
                   Delay_short(25);   //延时26us
      }
   return(temp);
}
如果前面一次判断if不符合的话,而这次符合if的话会写成11,而不是01
 ,怎么回事情呀

相关帖子

沙发
jizzll|  楼主 | 2008-7-22 23:51 | 只看该作者

盖楼

等待

使用特权

评论回复
板凳
太阳之母| | 2008-7-23 00:51 | 只看该作者

嘿嘿

晕,又一个描述不清晰的问题。
猜测:        DQ是P0的bit1?
隐隐约约感觉:是1线协议通信?
猜不出:      哪儿01/11?谁01/11呢?

使用特权

评论回复
地板
quakegod| | 2008-7-23 00:53 | 只看该作者

貌似

你那样定义temp
volatile unsigned char temp=0;
只会在程序初始化的时候清零,而不是每次进入程序都清零

使用特权

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

本版积分规则

5

主题

37

帖子

0

粉丝