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

📄 18b20_crc.lst

📁 18B20温度测量
💻 LST
字号:
C51 COMPILER V8.08   18B20_CRC                                                             10/28/2008 16:44:07 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 18B20_CRC
OBJECT MODULE PLACED IN .\18b20crc\18b20_crc.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20_crc.c BROWSE DEBUG OBJECTEXTEND TABS(2) OBJECT(.\18b20crc\18b20_crc.o
                    -bj)

line level    source

   1          /*DQ为数据口,接于P2.1
   2          /*18B20采用三线接法,上拉4.7K电阻,11.0592M*/
   3          /*Author:xiaohua  */
   4          /*Date:05/10/1 */
   5          
   6          #include <reg52.h>
   7          #include <intrins.h>
   8          
   9          #define uchar unsigned char
  10          #define uint unsigned int
  11          
  12          //
  13          sbit dq=P2^1;
  14          bit flag;
  15          uint temp;
  16          uchar temp_buff[9];
  17          uchar id_buff[8];
  18          uchar *p;
  19          uchar crc_data;
  20          uchar code crc_table[256]={
  21          
  22            0, 94,188,226, 97, 63,221,131,  194,156,126, 32,163,253, 31, 65,   //  0-- 15
  23          
  24          157,195, 33,127,252,162, 64, 30,   95,  1,227,189, 62, 96,130,220,   // 16-- 31
  25          
  26           35,125,159,193, 66, 28,254,160,  225,191, 93,  3,128,222, 60, 98,   // 32-- 47
  27          
  28          190,224,  2, 92,223,129, 99, 61,  124, 34,192,158, 29, 67,161,255,   // 48-- 63
  29          
  30           70, 24,250,164, 39,121,155,197,  132,218, 56,102,229,187, 89,  7,   // 64-- 79
  31          
  32          219,133,103, 57,186,228,  6, 88,   25, 71,165,251,120, 38,196,154,   // 80-- 95
  33          
  34          101, 59,217,135,  4, 90,184,230,  167,249, 27, 69,198,152,122, 36,   // 96--111
  35          
  36          248,166, 68, 26,153,199, 37,123,   58,100,134,216, 91,  5,231,185,   //112--127
  37          
  38          140,210, 48,110,237,179, 81, 15,   78, 16,242,172, 47,113,147,205,   //128--143
  39          
  40           17, 79,173,243,112, 46,204,146,  211,141,111, 49,178,236, 14, 80,   //144--159
  41          
  42          175,241, 19, 77,206,144,114, 44,  109, 51,209,143, 12, 82,176,238,   //160--175
  43          
  44           50,108,142,208, 83, 13,239,177,  240,174, 76, 18,145,207, 45,115,   //176--191
  45          
  46          202,148,118, 40,171,245, 23, 73,    8, 86,180,234,105, 55,213,139,   //192--207
  47          
  48           87,  9,235,181, 54,104,138,212,  149,203, 41,119,244,170, 72, 22,   //208--223
  49          
  50          233,183, 85, 11,136,214, 52,106,   43,117,151,201, 74, 20,246,168,   //224--239
  51          
  52          116, 42,200,150, 21, 75,169,247,  182,232, 10, 84,215,137,107, 53 }; //240--255
  53          
  54          //
C51 COMPILER V8.08   18B20_CRC                                                             10/28/2008 16:44:07 PAGE 2   

  55          
  56          void delay(uchar us)
  57          {
  58   1        while(us--);
  59   1      }
  60          //
  61          
  62          void init_18b20(void)
  63          {
  64   1        dq=1;
  65   1        _nop_();
  66   1        dq=0;
  67   1        delay(80);          //delay 530uS
  68   1        dq=1;
  69   1        delay(14);          //delay 100uS    
  70   1        if(dq==0)
  71   1           flag=1;          //detect 1820 success!
  72   1        else
  73   1           flag=0;          //detect 1820 fail!
  74   1        delay(20);
  75   1        dq=1;
  76   1      }
  77          //
  78          
  79          void write(uchar wr)  //单字节写入
  80          {
  81   1      uchar i;
  82   1      for(i=0;i<8;i++)
  83   1       {
  84   2        dq=0;
  85   2        _nop_();
  86   2        dq=wr&0x01;
  87   2        delay(5);           //delay 45 uS
  88   2        dq=1;
  89   2        wr>>=1;
  90   2       }
  91   1      }
  92          //
  93          
  94          uchar read_byte(void) //读取单字节
  95          { 
  96   1      uchar i,u=0;
  97   1      for(i=0;i<8;i++)
  98   1       {
  99   2        dq=0;
 100   2        u>>=1;
 101   2        dq=1;
 102   2        if(dq==1)
 103   2           u|=0x80;
 104   2        delay(4);
 105   2       }
 106   1      return(u);
 107   1      }
 108          //
 109          
 110          void read_bytes(uchar j)//读取多字节
 111          {
 112   1      uchar i;
 113   1      for(i=0;i<j;i++)
 114   1       {
 115   2        *p=read_byte();
 116   2        p++;
C51 COMPILER V8.08   18B20_CRC                                                             10/28/2008 16:44:07 PAGE 3   

 117   2       }
 118   1      }
 119          //
 120          
 121          uchar crc(uchar j)
 122          {
 123   1      uchar i,crc_data=0;
 124   1      for(i=0;i<j;i++)         //查表校验
 125   1        crc_data=crc_table[crc_data^temp_buff[i]];
 126   1      return(crc_data);
 127   1      }
 128          //
 129          
 130          void get_temp(void)
 131          {
 132   1      read_bytes(9);
 133   1      if(crc(9)==0)            //校验正确
 134   1       {
 135   2        temp=temp_buff[1]*0x100+temp_buff[0];
 136   2        temp*=0.625;
 137   2       }
 138   1      }
 139          //
 140          
 141          void config(void)        //重新配置报警限定值和分辨率
 142          {
 143   1      init_18b20();
 144   1      write(0xcc);             //skip rom 
 145   1      write(0x4e);             //write scratchpad
 146   1      write(0x19);             //上限
 147   1      write(0x1a);             //下限
 148   1      write(0x7f);             //set 11 bit (0.125)
 149   1      init_18b20();
 150   1      write(0xcc);             //skip rom
 151   1      write(0x48);             //保存设定值
 152   1      init_18b20();
 153   1      write(0xcc);             //skip rom
 154   1      write(0xb8);             //回调设定值
 155   1      }
 156          //
 157          
 158          void read_id(void)       //读取器件 id
 159          {
 160   1      init_18b20();
 161   1      write(0x33);             //read rom
 162   1      read_bytes(8);
 163   1      }
 164          //
 165          
 166          main()               //演示程序
 167          {
 168   1      p=id_buff;
 169   1      read_id();
 170   1      config();
 171   1      for(;;)
 172   1       {
 173   2        init_18b20();
 174   2        write(0xcc);           //skip rom
 175   2        write(0x44);           //temp convert
 176   2        init_18b20();
 177   2        write(0xcc);           //skip rom
 178   2        write(0xbe);           //read temp
C51 COMPILER V8.08   18B20_CRC                                                             10/28/2008 16:44:07 PAGE 4   

 179   2        p=temp_buff;
 180   2        get_temp();
 181   2       }
 182   1      }
 183          //
 184          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    311    ----
   CONSTANT SIZE    =    256    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       2
   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 + -