3471|3

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

18B20ROM搜索的一段代码能否帮忙看看,解释地清除点万分感谢 [复制链接]

uchar search_rom(uchar *p)
{
  uchar dat,i,j,k,n,value,number=1,number_temp=1,clash_number=0;
  bit clash_flag=0;
  for(n=0;n   {
    flag=0;
    while(!flag)  Init18b20();          //复位ds18b20
    write_byte(ds18B20_SEARCH_ROM);     //搜索ROM命令
    for(i=0;i<8;i++)    //8个字节ROM
    {
      dat=0;
      for(j=0;j<8;j++)   //8位数据                                                                                                                     
      {
        value=0;
        for(k=0;k<2;k++)  //一位数据位,一位补码位
        {
          DQ=1;_nop_();_nop_();
          value<<=1;
          DQ = 0;_nop_();_nop_();_nop_();_nop_();   //4us
          DQ = 1;_nop_();_nop_();_nop_();_nop_();   //4us
          if(DQ)  value|=0x01;
          delay_us(60);      //60us
        }
     switch(value)   //根据回复第两位数据来发出相应操作
     {
       case 0x00:    //总线冲突
       if(n==0)  
       {
         number++;
         number_temp=number;
         dat=dat>>1;
         DQ=1;_nop_();_nop_();
         DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
         DQ=0;           //最低位移出
         delay_us(60);     //60us
       }
       else      //第二次以上循环时
       {
         clash_number++;
         if(clash_number>=(number_temp-1))
         {
           if(!clash_flag)
           {
             clash_flag=1;
             dat=dat>>1;
             dat=dat|0x80;
             DQ=1;_nop_();_nop_();
             DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
             DQ=1;       //最低位移出
             delay_us(60);   //60us         
           }
           else
           {      
             clash_flag=0;
             number_temp--;
             dat=dat>>1;
             DQ=1;_nop_();_nop_();
             DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
             DQ=0;       //最低位移出
             delay_us(60);   //60us         
           }
        }     
     }
     break;
     case 0x01:
       dat=dat>>1;
       DQ=1;_nop_();_nop_();
       DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
       DQ=0;          //最低位移出
       delay_us(60);         //66us
       break;
     case 0x02:
       dat=dat>>1;
       dat=dat|0x80;
       DQ=1;_nop_();_nop_();
       DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
       DQ=1;          //最低位移出
       delay_us(60);         //66us
       break;
     case 0x03:
           i=8;
           j=8;
           break;
     default:break;
    }   
   }
   *p++=dat;
  }
}
return number;
}
看懂一部分,主要是(一位数据位,一位补码位)那部分看不懂啊!谢谢

最新回复

像是一个分支结构记录冲突位的搜索程序……还是希望高手指点一下………………自己顶  详情 回复 发表于 2010-4-20 19:32
点赞 关注

回复
举报

23

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己先顶下。看过单总线冲突的一个说明,应该是这个。可是不懂,呵呵
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
帮顶!努力!
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
像是一个分支结构记录冲突位的搜索程序……还是希望高手指点一下………………自己顶
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表