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

📄 ds18b20.lst

📁 基于DS1820温度传感器,单片机控制的单线多路温度检测
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   DS18B20                                                               06/04/2007 09:25:15 PAGE 1   


C51 COMPILER V8.08, 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          
  14          #define uchar unsigned char
  15          #define uint  unsigned int
  16          void serial_set(void);
  17          void process(unsigned char,unsigned char);
  18          char volatile xiaoshu_temp[5],zhen_temp[4];             //
  19          bit flag;
  20          bit dot_dis=1;
  21          sbit DQ=P1^0;
  22          //sbit DQ=P2^3;
  23          extern unsigned char temp[5];
  24          /*************************************************************
  25          **功能:延时600us                                                                                       **
  26          **参数:无                                                                                              **
  27          *************************************************************/
  28          void delay600us(void)
  29          {
  30   1              uchar i;
  31   1              for(i=0;i<255;i++);
  32   1      
  33   1      }
  34          /*************************************************************
  35          **功能:延时60us                                                                                        **
  36          **参数:无                                                                                              **
  37          *************************************************************/
  38          void delay60us(void)
  39          {
  40   1              uchar i;
  41   1              for(i=0;i<20;i++);
  42   1      }
  43          /*************************************************************
  44          **功能:延时240us                                                                                       **
  45          **参数:无                                                                                              **
  46          *************************************************************/
  47          void delay240us(void)
  48          {
  49   1              uchar i;
  50   1              for(i=0;i<80;i++);
  51   1      }
  52          /*************************************************************
  53          **功能:延时18us                                                                                        **
  54          **参数:无                                                                                              **
  55          *************************************************************/
C51 COMPILER V8.08   DS18B20                                                               06/04/2007 09:25:15 PAGE 2   

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

 118   3                              _nop_();
 119   3      
 120   3                      }
 121   2              
 122   2                      else                                            //写1
 123   2                      {
 124   3                              DQ=0;
 125   3                              _nop_();
 126   3                              _nop_();                                //延时2us
 127   3                              DQ=1;
 128   3                              delay60us();                    //延时60us
 129   3                              _nop_();
 130   3                              _nop_();
 131   3                              _nop_();
 132   3                              _nop_();
 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();

⌨️ 快捷键说明

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