芯片解密,芯片破解,IC解密,单片机解密,MCU解密,STM解密

飞芯科技提供芯片解密,芯片破解,IC解密,单片机解密,MCU解密,STM解密逆向服务

单片机解密DS18B20的C51程序及DS18b20.h头文件下

 单片机解密DS18B20复位和初始化函数: DS18B20_Reset(void)
// 单片机解密 功能: 8051发出时间长度>=480us的低电平到数据线,然后拉高数据线维持15~60us
// 单片机解密 输入: 无
//  单片机解密输出: DS18B20被复位
//  返回: 无
//******************************************************************************
void DS18B20_Reset(void)
{
  uchar i;
  DQ = 0;                                                         //拉低数据线DQ
  i = 80;                     //使用12MHz晶体时用80,根据晶体频率按比例增减i的值
  while(i--);   //软件延时,"while(i--);"的反汇编代码单次循环消耗6us,80*6us=480us
  
  DQ = 1;
  i = 5;                         //使用12MHz晶体时用5,根据晶体频率按比例增减
  while(i--);     //软件延时,"while(i--);"的反汇编代码单次循环消耗6us,5*6us=30us
}
//******************************************************************************
//  读取一位数据函数: bit bitread(void)
//  功能: 51发长3us的低电平到数据线, 然后拉高数据线7us,再读回数据线,最后由软件延
//        时消耗掉60us位时间的剩余部分.
//  输入: 无
//  输出: 无
//  返回: 位值
//******************************************************************************
bit bitread(void)
{
  uchar i;
  bit dat;
  DQ = 0;                                                  //拉低数据线DQ
  i++;                                 //模拟1~15us的延时,反汇编显示实际延时3us
  DQ = 1;                                               //拉高数据线DQ
  i++;  i++;                                    //适当延时,反汇编显示实际延时7us
  dat = DQ;                            //至此,DS18B20会在DQ上给出位值,读回此位值
  i = 8;              //从DQ拉低至此,反汇编显示已耗时13us, 60us-13us=47us约=48us
  while(i--);     //软件延时,"while(i--);"的反汇编代码单次循环消耗6us,8*6us=48us
  return(dat);                                                        //返回位值
}
//******************************************************************************
//  读取一个字节数据函数: uchar byteread(void)
//  功能: 通过8次调用读取一位函数, 从DS18B20读回一个字节值,注意先读的是最低位
//  输入: 无
//  输出: 无
//  返回: 字节值
//******************************************************************************
uchar byteread(void)
{
  uchar i, j, dat;
  dat = 0;
  for(i=1; i<=8; i++)
  {
    j = bitread();                                                 //顺序读8个位
    dat >>= 1;
    dat |= (j<<7);                                              //组装成一个字节
  }
  return(dat);                                               //返回字节值
}
//******************************************************************************
//  写一个字节数据或命令函数: bytewrite(uchar dat)
//  功能: 写一个字节数据或命令到DS18B20中
//  输入: dat是准备写入DS18B20的一个命令字节或数据字节
//  输出: 命令字节或数据字节被写入DS18B20中
//  返回: 无
//  按位写入: 位值1写法:在DQ上发 1~ 15us低电平后跟高电平,应使位时间>=60us
//            位值0写法:在DQ上发60~120us低电平后跟高电平,应使位时间>=60us
//  注意:延时时间的统计计算需要浏览反汇编代码
//******************************************************************************
void bytewrite(uchar dat)
{
  uchar i, j;
  for(j=0; j<8; j++)
  {
    if(dat&0x01)          //如果当前位的值为1,发1~15us低电平后跟高电平到数据线DQ
    {
   DQ = 0;                                                   //拉低数据线DQ
   DQ = 0;                                //延时1us
   DQ = 0;                                      //到此共延时2us, 1us<2us<15us
      DQ = 1;                                                     //拉高数据线DQ
      i = 7;                               //自DQ拉低后到此语句执行完毕共耗时4us  
   while(i--);                    //每次循环耗时8us,7*8us=56us, 56us+4us=60us
    }
    else                //如果当前位的值为0,发60~120us低电平后跟高电平到数据线DQ
    {
   DQ = 0;                                        //拉低数据线DQ
      i = 8;  while(i--);                          //延时约65us, 60us<65us<120us
      DQ =1;                                                      //拉高数据线DQ
      DQ =1;                                                           //延时1us
      DQ =1;                                                           //延时2us
    }
    dat = dat>>1;                                           //右移,准备下一个位
  }
}


联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.taihedz.cn
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信