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

📄 ds18b20.lst

📁 单总线通信协议
💻 LST
字号:
C51 COMPILER V8.02   DS18B20                                                               02/18/2008 14:19:10 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 ..\c语言程序\ds18b20.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ds18b20.lst) OBJEC
                    -T(.\ds18b20.obj)

line level    source

   1          #include<reg51.h>
   2          #include<intrins.h>
   3          #include<absacc.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          #define nop _nop_()
   7          #define TURE 1 
   8          sbit DQ = P0^0;     //定义DS18B20端口DQ  
   9          sbit BEEP =P0^1;
  10          sbit RS=P3^5;
  11          sbit RW=P3^6;
  12          sbit E=P3^7;
  13          uchar presence ;
  14          void init();
  15          void write(uchar tempdata);
  16          void writeDDR();
  17          void delay(uint N);
  18          void delay_18B20(int i);
  19          void Write_byte(uchar val);
  20          void write_bit(uchar bitval);
  21          uchar read_byte(void);
  22          uchar read_bit(void);
  23          
  24          unsigned char code  LCDData[]   = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x77};
  25          unsigned char code  buffdis[]   = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
  26          unsigned char data  temp_data[2] = {0x0D0,0x07};
  27          unsigned char data  display[5] =  {0x00,0x00,0x00,0x00,0x00};
  28          unsigned char code  ditab[16] =   {0x30,0x31,0x31,0x32,0x33,0x33,0x34,0x34,0x35,0x36,0x36,0x37,0x38,0x38,0
             -x39,0x39};
  29          static const uchar code table2[]={0x74,0x65,0x6d,0x70,0x65,0x72,0x61,0x74,0x75,0x72,0x65,0x20,0x69,0x53,0x
             -20,0x3a};
  30          void beep(); 
  31          bit  flash=0;          //显示开关标记
  32          
  33           Init_DS18B20(void)//初始化ds1820
  34          {        DQ=1;
  35   1           delay_18B20(8);
  36   1           DQ = 0;      //单片机将DQ拉低
  37   1           delay_18B20(80);   //精确延时 大于 480us
  38   1           DQ = 1;       //拉高总线
  39   1           delay_18B20(14);
  40   1           presence = DQ;    //如果=0则初始化成功 =1则初始化失败
  41   1           delay_18B20(20);
  42   1           return(presence); //返回信号,0=presence,1= no presence
  43   1      }
  44          
  45          
  46          void delay_18B20(uint i)
  47          {
*** WARNING C235 IN LINE 47 OF ..\C语言程序\DS18B20.C: parameter 1: different types
  48   1              while(i--);
  49   1      }
  50          
  51          
C51 COMPILER V8.02   DS18B20                                                               02/18/2008 14:19:10 PAGE 2   

  52          Read_Temperature(void)//读取温度
  53          {
  54   1        Init_DS18B20();
  55   1        if(presence==1)//DS18B20不正常,蜂鸣器报警        
  56   1         {
  57   2              BEEP=1;   //开启指示灯
  58   2              flash=1;
  59   2              }      
  60   1         else 
  61   1         {
  62   2           flash=0;
  63   2           Write_byte(0xCC);  // 跳过读序号列号的操作
  64   2           Write_byte(0x44);  // 启动温度转换
  65   2           Init_DS18B20();
  66   2           Write_byte(0xCC);  //跳过读序号列号的操作
  67   2           Write_byte(0xBE);  //读取温度寄存器
  68   2      
  69   2           temp_data[0] = read_byte();   //温度低8位
  70   2           temp_data[1] = read_byte();   //温度高8位 
  71   2         }
  72   1      }
  73          
  74          Disp_Temperature()//显示温度
  75          {
  76   1        unsigned char  n=0;
  77   1        display[4]=temp_data[0]&0x0f;
  78   1        display[0]=ditab[display[4]];     //查表得小数位的值
  79   1        display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
  80   1        display[3]=LCDData[display[4]/100];
  81   1        display[1]=display[4]%100;
  82   1        display[2]=LCDData[display[1]/10];
  83   1        display[1]=LCDData[display[1]%10];
  84   1         write(0x0c0);
  85   1         P1=display[3];
  86   1         writeDDR();
  87   1         write(0x0c1);
  88   1         P1=display[2];
  89   1         writeDDR();
  90   1         write(0x0c2);
  91   1         P1=display[1];
  92   1         writeDDR();
  93   1         write(0x0c3);
  94   1         P1=0x2e;
  95   1         writeDDR();
  96   1         write(0x0c4);
  97   1         P1=display[0];
  98   1         writeDDR();
  99   1         write(0x0c5);
 100   1         P1=0x0df;
 101   1         writeDDR();
 102   1         write(0x0c6);
 103   1         P1=0x43;
 104   1         writeDDR();
 105   1      }
 106          
 107          void main(void)
 108          {
 109   1        uint i;
 110   1        BEEP=0;
 111   1        init();
 112   1       
 113   1        write(0x80);
C51 COMPILER V8.02   DS18B20                                                               02/18/2008 14:19:10 PAGE 3   

 114   1        for(i=0;i<=16;i++)
 115   1        {
 116   2        write(0x80+i);
 117   2        P1=table2[i];
 118   2        writeDDR();
 119   2        }
 120   1        while(TURE)
 121   1        {
 122   2          Read_Temperature();
 123   2       if(flash==0)             
 124   2       {Disp_Temperature();}
 125   2       else write(0x01) ;           //DS18B20不正常,关闭显示
 126   2        }
 127   1      }
 128          
 129          
 130          void init()
 131          {
 132   1       RS=0;
 133   1       RW=0;
 134   1       E=1;
 135   1       write(0x01);
 136   1       write(0x38);
 137   1       write(0x01);
 138   1       write(0x0f);
 139   1       write(0x06);
 140   1       write(0x01);
 141   1       }
 142          
 143          void write(uchar tempdata)
 144          {
 145   1       P1=tempdata;
 146   1       RS=0;
 147   1       RW=0;
 148   1       E=0;
 149   1       nop;
 150   1       E=1;
 151   1       nop;
 152   1       delay(150);
 153   1       }
 154          
 155          
 156          void writeDDR(void)
 157          {
 158   1       RS=1;
 159   1       nop;
 160   1       RW=0;
 161   1       E=0;
 162   1       nop;
 163   1       E=1;
 164   1       nop;
 165   1       }
 166          
 167           void delay(uint N)
 168           {
 169   1        int i;
 170   1        for(i=0;i<N;i++);
 171   1        }
 172          
 173          
 174          uchar read_byte(void)
 175          {
C51 COMPILER V8.02   DS18B20                                                               02/18/2008 14:19:10 PAGE 4   

 176   1       uchar i,m,receive_data;
 177   1       m=1;
 178   1       receive_data=0;
 179   1       for(i=0;i<8;i++)
 180   1       {
 181   2        if(read_bit())
 182   2        {
 183   3         receive_data=receive_data+(m<<i);
 184   3         }
 185   2         delay(6);
 186   2         }
 187   1        return(receive_data);
 188   1      }
 189          
 190          uchar read_bit(void)
 191          {
 192   1        uchar i;
 193   1        DQ=0;
 194   1        DQ=1;
 195   1        for(i=0;i<3;i++);
 196   1        return(DQ);
 197   1       }
 198          
 199          void Write_byte(uchar val)
 200          {
 201   1       uchar i,temp;
 202   1       for(i=0;i<8;i++)
 203   1       {
 204   2        temp=val>>i;
 205   2        temp=temp&0x01;
 206   2        write_bit(temp);
 207   2        delay(5);
 208   2        }
 209   1      }
 210          
 211          void write_bit(uchar bitval)
 212          {
 213   1       DQ=0;
 214   1       if(bitval==1)
 215   1       DQ=1;
 216   1       delay(5);
 217   1       DQ=1;
 218   1       }
 219          
 220          /*uchar read_byte(void)
 221          {
 222          unsigned char i=0,j;
 223          unsigned char dat = 0;
 224          for (i=8;i>0;i--)
 225          {
 226             DQ = 0; // 给脉冲信号
 227             dat>>=1;
 228             DQ = 1; // 给脉冲信号
 229             for(j=0;j<3;j++);
 230             if(DQ)
 231              dat|=0x80;
 232             delay(4);
 233          }
 234          return(dat);
 235          } */
 236          
 237          
C51 COMPILER V8.02   DS18B20                                                               02/18/2008 14:19:10 PAGE 5   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    537    ----
   CONSTANT SIZE    =     52    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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