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

📄 ds18b20_xin.lst

📁 这是一个用keil-51编写的C51程序
💻 LST
字号:
C51 COMPILER V8.01   DS18B20_XIN                                                           06/14/2008 14:27:06 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE DS18B20_XIN
OBJECT MODULE PLACED IN ds18b20_xin.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds18b20_xin.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*************************DS18B20温度计******************************/
   2          #include "reg51.h"
   3          #include "intrins.h"
   4          
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          
   8          sbit DQ=P3^7;   //温度输出管脚定义
   9          
  10          /**************************温度小数部分查表****************************/
  11          
  12          
  13          uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,
  14                                0x06,0x07,0x08,0x08,0x09,0x09};
  15          uchar data temp_data[2]={0x00,0x00};
  16          extern unsigned char Data[5]={0x00,0x00,0x00,0x00,0x00};
  17          
  18          uint h;
  19          /**********************************************************************/
  20          
  21          /**************************函数申明部分********************************/
  22          void delay(uint t);
  23          ow_reset(void);
  24          void write_byte(uchar val);
  25          uchar read_byte(void);
  26          void read_temp();
  27          void work_temp();
  28          /**********************************************************************/
  29          
  30          /***************************11US延时函数*******************************/
  31          void delay(uint t)       
  32          {
  33   1              for(;t>0;t--);
  34   1      }
  35          /**********************************************************************/
  36          
  37          /***************************DS18B20复位函数****************************/
  38          ow_reset(void)           
  39          {
  40   1              char presence=1;
  41   1              while(presence)
  42   1              {
  43   2                      while(presence)
  44   2                      {
  45   3                              DQ=1;_nop_();_nop_();
  46   3                              DQ=0;
  47   3                              delay(50);
  48   3                              DQ=1;
  49   3                              delay(6);
  50   3                              presence=DQ;
  51   3                      }
  52   2              delay(45);
  53   2              presence=~DQ;
  54   2              }
  55   1              DQ=1;
C51 COMPILER V8.01   DS18B20_XIN                                                           06/14/2008 14:27:06 PAGE 2   

  56   1      }
  57          /**********************************************************************/
  58          
  59          /*****************************DS18B20写命令函数************************/
  60          void write_byte(uchar val)               
  61          {
  62   1              uchar i;
  63   1              for(i=8;i>0;i--)
  64   1              {
  65   2                      DQ=1;_nop_();_nop_();
  66   2                      DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
  67   2                      DQ=val&0x01;
  68   2                      delay(6);
  69   2                      val=val/2;
  70   2              }
  71   1              DQ=1;
  72   1              delay(1);
  73   1      }
  74          /**********************************************************************/
  75          /*****************************DS18B20读1字节函数**********************/
  76          uchar read_byte(void)     
  77          {
  78   1              uchar i;
  79   1              uchar value=0;
  80   1              for(i=8;i>0;i--)
  81   1              {
  82   2                      DQ=1;_nop_();_nop_();
  83   2                      value>>=1;
  84   2                      DQ=0;
  85   2                      _nop_();_nop_();_nop_();_nop_();
  86   2                      DQ=1;_nop_();_nop_();_nop_();_nop_();
  87   2                      if(DQ)value|=0x80;
  88   2                      delay(6);
  89   2              }
  90   1              DQ=1;
  91   1              return(value);
  92   1      }
  93          /**********************************************************************/
  94          /**************************读取温度*************************************/
  95          void read_temp()
  96          {
  97   1              ow_reset();
  98   1              write_byte(0xcc);
  99   1              write_byte(0xbe);
 100   1              temp_data[0]=read_byte();
 101   1              temp_data[1]=read_byte();
 102   1              ow_reset();
 103   1              write_byte(0xcc);
 104   1              write_byte(0x44);
 105   1      }
 106          /**********************************************************************/
 107          /***************************温度数据处理函数**************************/
 108          void work_temp()                 
 109          {
 110   1              uchar n=0;
 111   1              if(temp_data[1]>127)
 112   1              {
 113   2                      temp_data[1]=(256-temp_data[1]);
 114   2                      temp_data[0]=(256-temp_data[0]);n=1;
 115   2              }
 116   1      
 117   1              Data[4]=temp_data[0]&0x0f;
C51 COMPILER V8.01   DS18B20_XIN                                                           06/14/2008 14:27:06 PAGE 3   

 118   1              Data[0]=ditab[Data[4]];  //0.1位
 119   1              Data[4]=((temp_data[0]&0xf0) >> 4)|((temp_data[1]&0x0f)<<4);
 120   1              Data[3]=Data[4] / 100;
 121   1              Data[1]=Data[4] % 100;
 122   1              Data[2]=Data[1] / 10;    //十位
 123   1              Data[1]=Data[1] % 10;    //个位
 124   1              
 125   1              if(!Data[3])
 126   1              {
 127   2                      Data[3]=0x0a;
 128   2                      if(!Data[2]) Data[2]=0x0a;
 129   2              }
 130   1              if(n) Data[3]=0x0b;
 131   1      
 132   1      
 133   1      }
 134          /**********************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    290    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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