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

📄 18b20.lst

📁 万年历
💻 LST
字号:
C51 COMPILER V8.02   18B20                                                                 05/04/2002 11:07:14 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: D:\keil\新建文件夹\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<all.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          /*DS18B20功能命令*/
   7          #define SEARCH_ROM                      0xf0    //搜索ROM
   8          #define READ_ROM                        0x33    //读DS18B20序列号
   9          #define MATCH_ROM                       0x55    // 匹配ROM
  10          #define SKIP_ROM                        0xcc    //跳过读序列号的操作
  11          #define ALARM_SEARCH            0xec    // 报警搜索
  12          #define CONVERT_T                       0x44    //启动温度转换
  13          #define WRITE_SCRATCHPAD        0x4e    // 可写3个字节到暂存器,即高温,低温触发器和配置寄存器
  14          #define READ_SCRATCHPAD     0xbe        //读取温度寄存器
  15          #define READ_POWER_SUPPLY       0xb4    //读供电方式,0为寄生方式,1为外部电源
  16          #define COPY_SCRATCHPAD         0x48    //拷贝存储器
  17          
  18          sbit DQ  =P2^7;                                 //模拟1_Wire总线DQ
  19          
  20          uchar Highlimit=30;                     //代表初始上限30
  21          uchar Lowlimit =27;                     //代表初始下限27
  22          uint  temp;
  23          
  24          
  25          void Wire_delay(uint i)                  //延时(15+10i)us
  26          
  27          {
  28   1          while(i--);                                                                                                                       
             -                                                                                        
  29   1          
  30   1      }
  31          
  32          
  33          void Reset_DS18B20( )                    //初始化函数
  34          {
  35   1          uchar Reset_flag=0;
  36   1      
  37   1          DQ = 1;                     //主机拉低DQ至少480us开始时序
  38   1          Wire_delay(8); 
  39   1          DQ = 0;                     //上拉电阻拉高总线
  40   1          Wire_delay(80);             //等待DS18B20响应
  41   1              DQ = 1; 
  42   1          Wire_delay(14);
  43   1              Reset_flag=DQ;      //采样应答信号
  44   1              Wire_delay(20);
  45   1      }
  46          
  47          
  48          
  49          uchar Read_byte( )                      //读一个字节
  50          {
  51   1              uchar i,receive_data;
  52   1      
  53   1          for(i=8;i>0;i--)
  54   1           {
C51 COMPILER V8.02   18B20                                                                 05/04/2002 11:07:14 PAGE 2   

  55   2                      DQ = 0;                         // 给脉冲信号
  56   2                      receive_data>>=1;
  57   2                      DQ = 1;                          // 给脉冲信号
  58   2                      if(DQ)
  59   2                      receive_data|=0x80;
  60   2                      Wire_delay(4);
  61   2           }
  62   1      
  63   1           return(receive_data);
  64   1      
  65   1      }
  66          
  67          
  68          Write_byte(uchar write_data)            //写一个字节
  69          {
  70   1          uchar i;
  71   1      
  72   1          for(i=8;i>0;i--)
  73   1          {
  74   2                      DQ = 0;
  75   2                      DQ = write_data&0x01;            //1_wire低位在前传输
  76   2                      Wire_delay(5);
  77   2                      DQ = 1;
  78   2                      write_data>>=1;
  79   2                              
  80   2          }
  81   1      
  82   1              Wire_delay(4);
  83   1      }
  84          
  85          
  86          DS18B20_Initial( )                                //18b20寄存器初始化
  87          {
  88   1              Reset_DS18B20( );
  89   1              Write_byte(SKIP_ROM );                  //跳过读序列号
  90   1              Write_byte(WRITE_SCRATCHPAD);   // 可连续写3个字节到暂存器,即高温,低温触发器和配置寄存器
  91   1              Write_byte(Highlimit);                  //设置上限温度值
  92   1              Write_byte(Lowlimit);               //设置下限温度值
  93   1              Write_byte(0x7f);               //设置为12位分辨率
  94   1              Reset_DS18B20( );
  95   1              Write_byte(SKIP_ROM );                  //跳过读序列号
  96   1              Write_byte(COPY_SCRATCHPAD);    //拷贝存储器命令????                    
  97   1      }
  98          
  99          
 100          uint Read_temperature( )                 //读取温度
 101          {
 102   1              uint  temp=0;
 103   1              uchar tempL=0;                          //温度值低8位
 104   1              uchar tempH=0;                          //温度值高8位
 105   1      
 106   1          Reset_DS18B20( );
 107   1          Write_byte(0xCC );          // 跳过读序号列号的操作
 108   1          Write_byte(0x44 );          // 启动温度转换
 109   1          Reset_DS18B20( );
 110   1          Write_byte(0xCC );         //跳过读序号列号的操作
 111   1          Write_byte(0xBE);                   //读取温度寄存器(共可读9个寄存器),前两个就是温度值
 112   1          
 113   1          tempL=Read_byte( );                 //读取温度值低8位
 114   1          tempH=Read_byte( );                 //读取温度值高8位
 115   1              
 116   1              temp =  tempH ;    
C51 COMPILER V8.02   18B20                                                                 05/04/2002 11:07:14 PAGE 3   

 117   1              temp<<=8;
 118   1              temp |= tempL;
 119   1              return(temp);
 120   1      
 121   1      }
 122          
 123          
 124          /********************************/
 125          /**********温度显示**************/
 126          /********************************/
 127          
 128           void temperature_display(uint display_data)      //显示函数
 129          {
 130   1          uint Temp,Temp2;
 131   1          uchar t[5];                 //存放温度值数组
 132   1              Temp=display_data*6.25;     //最小分辨率0.0625,在此先放大100倍
 133   1              t[0]=Temp/1000;             //温度十位
 134   1          t[1]=Temp%1000/100;         //温度个位
 135   1          t[2]=11;                                     //小数点
 136   1          t[3]=Temp%1000%100/10;      //温度十分位
 137   1          t[4]=Temp%1000%100%10;      //温度百位
 138   1              Temp2=Temp/100;
 139   1      
 140   1              LCD_write_shu(5,4,t[0]);
 141   1              LCD_write_shu(6,4,t[1]);
 142   1              LCD_write_shu(7,4,t[2]);
 143   1              LCD_write_shu(8,4,t[3]);
 144   1              LCD_write_hanzi(6,4,22);  //℃
 145   1      }
 146          
 147          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    374    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       7
   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 + -