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

📄 ds18b20.lst

📁 使用51单片机作为控制器
💻 LST
字号:
C51 COMPILER V7.06   DS18B20                                                               05/14/2007 22:03:39 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //////////////////////////////////温度检测DS18B20////////////////////////////////////
   2          //晶振由原来的11.059M变为32M
   3          #include<at89x52.h>
   4          #include<intrins.h>
   5          #define uchar unsigned char
   6          #define uint  unsigned int
   7          
   8          sbit TMPort=P3^4;
   9          uchar TempH,TempL,TempInt,TempDec;
  10          
  11          unsigned char code TemTab[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9}; 
  12          
  13          bit flag;
  14          void TempDelay (uchar us)
  15          {
  16   1        while(us--);
  17   1      }
  18          
  19          void Init18b20 (void)
  20          {
  21   1               EA=0;
  22   1           flag=0;
  23   1           do
  24   1           {
  25   2                       TMPort=1;       //拉高数据线TMPort
  26   2                   _nop_(); _nop_(); _nop_();//保持一个周期
  27   2                       TMPort=0;       //发送530us的低电平复位脉冲
  28   2                       TempDelay(154);   //delay 530 uS
  29   2                       TMPort=1;        //释放TMPort
  30   2                       TempDelay(29);   //delay 100 uS
  31   2                      
  32   2                       if(TMPort==0)        //如果TMPort为低电平则复位成功
  33   2                        flag = 1;   //detect 1820 success!
  34   2                       else
  35   2                        flag = 0;    //detect 1820 fail!
  36   2                       TempDelay(34); //应答脉冲时间140us
  37   2                       TMPort = 1;
  38   2           }
  39   1           while(!flag);
  40   1               EA=1;
  41   1      }
  42          
  43          uchar ReadByte (void)     //读取单字节
  44          {
  45   1               uchar i,u=0;
  46   1               EA=0;
  47   1               for(i=0;i<8;i++)
  48   1               {
  49   2                        TMPort = 0;          //保持低电平1us以上
  50   2                        u >>= 1;
  51   2                        TMPort = 1;          //释放总线
  52   2                TempDelay (6);       //在15us以后18B20输出才有效
  53   2                        if(TMPort==1)
  54   2                        u |= 0x80;
  55   2                        TempDelay (10);       //读时候间隔
C51 COMPILER V7.06   DS18B20                                                               05/14/2007 22:03:39 PAGE 2   

  56   2                        EA=1;
  57   2               }
  58   1               return(u);
  59   1      }
  60          
  61          void WriteByte (uchar wr)  //单字节写入
  62          {
  63   1               uchar i;
  64   1           EA=0;
  65   1               for (i=0;i<8;i++)
  66   1               {
  67   2                        TMPort = 0;
  68   2                        _nop_();_nop_();_nop_();
  69   2                        TMPort=wr&0x01;
  70   2                        TempDelay(21);   //delay 45 uS //5
  71   2                        TMPort=1;
  72   2                        wr >>= 1;
  73   2               }
  74   1               EA=1;
  75   1      }
  76          void convert(void)    //启动温度检测
  77          {
  78   1              Init18b20();
  79   1          WriteByte(0xCC);//跳过ROM
  80   1          WriteByte(0x44);//温度转换 
  81   1      }
  82          
  83          void readtemp(void)
  84          {
  85   1              Init18b20();
  86   1          WriteByte(0xCC);//跳过ROM
  87   1          WriteByte(0xbe);//读取温度
  88   1          TempL=ReadByte();//温度低字节,(低4位为二进制的小数部分)
  89   1          TempH=ReadByte();//温度高字节,(高5位为符合位)
  90   1      }
  91          
  92          void tempconform(void)
  93          {  
  94   1              TempInt=(TempL>>4&0x0f)|(TempH<<4&0xf0);//整数部分   
  95   1          TempDec=TemTab[TempL&0x0f];
  96   1      }
  97          
  98          void TempDetect(void)                  //测量温度函数
  99          {
 100   1         convert();
 101   1         readtemp();
 102   1         tempconform();
 103   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    209    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =      4    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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