⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.lst

📁 自己的平时一些制作 现在整理一下 与大家一起分享
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   DS18B20                                                               05/03/2007 09:16:11 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN ds18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds18b20.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************
   2          **函数功能:ds18b20的驱动函数                                                                     **
   3          **创建人:xingyuegu                                                                                               **
   4          **创建日期:2006-7-12                                                                                     **
   5          **版本:1.0                                                                                                               **
   6          **修改日期:2006-10-30                                                                                    **
   7          **版本:2.0                                                                                                               **
   8          *******************************************************************/
   9          #include <reg51.h>
  10          #include <intrins.h>
  11          #include <math.h>
  12          #include <stdio.h>
  13          #include <lcd1602.h>
  14          
  15          #define uchar unsigned char
  16          #define uint  unsigned int
  17          void serial_set(void);
  18          void process(unsigned char,unsigned char);
  19          char volatile xiaoshu_temp[5],zhen_temp[4];             //
  20          bit flag;
  21          bit dot_dis=1;
  22          sbit DQ=P1^0;
  23          //sbit DQ=P2^1;
  24          unsigned char temp[5];
  25          uchar timeout=20;
  26          bit ds18b20_over=0;
  27          /*************************************************************
  28          **功能:延时600us                                                                                       **
  29          **参数:无                                                                                              **
  30          *************************************************************/
  31          void delay600us(void)
  32          {
  33   1              uchar i;
  34   1              for(i=0;i<255;i++);
  35   1      
  36   1      }
  37          
  38          void delay(unsigned int time)
  39          {
  40   1              unsigned int i,j;
  41   1              for(i=0;i<time;i++)
  42   1                      for(j=0;j<200;j++);
  43   1      }
  44          /*************************************************************
  45          **功能:延时60us                                                                                        **
  46          **参数:无                                                                                              **
  47          *************************************************************/
  48          void delay60us(void)
  49          {
  50   1              uchar i;
  51   1              for(i=0;i<20;i++);
  52   1      }
  53          /*************************************************************
  54          **功能:延时240us                                                                                       **
  55          **参数:无                                                                                              **
C51 COMPILER V8.02   DS18B20                                                               05/03/2007 09:16:11 PAGE 2   

  56          *************************************************************/
  57          /*void delay240us(void)
  58          {
  59                  uchar i;
  60                  for(i=0;i<80;i++);
  61          }*/
  62          /*************************************************************
  63          **功能:延时18us                                                                                        **
  64          **参数:无                                                                                              **
  65          *************************************************************/
  66          void delay15us(void)
  67          {
  68   1              uchar i;
  69   1              for(i=0;i<2;i++);
  70   1      }
  71          /*************************************************************
  72          **功能:复位脉冲                                                                                        **
  73          **参数:bool                                                                                            **
  74          *************************************************************/
  75          bit resetpulse(void)
  76          {
  77   1              
  78   1              DQ=0;
  79   1              delay600us();                   //延时500us
  80   1              DQ=1;
  81   1              delay60us();                    // 延时60us
  82   1              return(DQ);                             //读取P1.0的状态
  83   1      }
  84          /*************************************************************
  85          **功能:ds18b20的初始化                                                                         **
  86          **参数:无                                                                                              **
  87          *************************************************************/
  88          void ds18b20_init(void)
  89          {
  90   1              while(1)
  91   1              {
  92   2                      if(!resetpulse())       //收到ds18b20的应答信号
  93   2                      {       
  94   3                              //printf("reset successful!");
  95   3      
  96   3                              //delay240us(); //延时240us
  97   3                              DQ=1;
  98   3                              delay600us();   //延时240us
  99   3                              break;          
 100   3                      }
 101   2                      else
 102   2                              resetpulse();    //否则再发复位信号
 103   2              }
 104   1      }
 105          
 106          /*************************************************************
 107          **功能:向ds18b20写命令                                                                         **
 108          **参数:无                                                                                              **
 109          *************************************************************/
 110          void ds18b20_writecommand(uchar command)
 111          {       
 112   1      
 113   1              uchar   i;
 114   1              for(i=0;i<8;i++)
 115   1              {
 116   2                      if((command & 0x01)==0)
 117   2                      {
C51 COMPILER V8.02   DS18B20                                                               05/03/2007 09:16:11 PAGE 3   

 118   3                              DQ=0;                                   //写0
 119   3                              delay60us();                    //延时60us
 120   3                              DQ=1;                           
 121   3                              _nop_();
 122   3                              _nop_();
 123   3      
 124   3                      }
 125   2              
 126   2                      else                                            //写1
 127   2                      {
 128   3                              DQ=0;
 129   3                              _nop_();
 130   3                              _nop_();                                //延时2us
 131   3                              DQ=1;
 132   3                              delay60us();                    //延时60us
 133   3                      }
 134   2                      command=_cror_(command,1); // 右移1位
 135   2               }
 136   1        
 137   1        
 138   1      }
 139          
 140          /*************************************************************
 141          **功能:读ds18b20数据                                                                           **
 142          **参数:返回读到的数据                                                                          **
 143          *************************************************************/
 144          uchar ds18b20_readdata(void)
 145          {
 146   1              uchar readdata;
 147   1              uchar i;
 148   1              for(i=0;i<8;i++)
 149   1              {
 150   2                      DQ=0;
 151   2                      _nop_();
 152   2                      _nop_();
 153   2                      _nop_();
 154   2                      DQ=1;             //释放总线
 155   2                      //delay15us();  注意不需要
 156   2                      if(DQ==0)          //如果读到的是0
 157   2                      {
 158   3                              readdata=readdata&0x7f;
 159   3                              delay60us();
 160   3                      }
 161   2                      else                    //读到的是1
 162   2                      {
 163   3                              readdata=readdata|0x80;
 164   3                              delay60us();
 165   3                      }
 166   2                      if(i<7)
 167   2                      
 168   2                      readdata=_cror_(readdata,1);
 169   2              }
 170   1              return readdata;
 171   1      }
 172          
 173          /*************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -