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

📄 18b20.lst

📁 用89C51单片机,LCD1602,建成的数字温度计.
💻 LST
字号:
C51 COMPILER V7.50   18B20                                                                 04/26/2007 22:01:21 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18B20.c BROWSE DEBUG OBJECTEXTEND

line level    source

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

  56   1              dq=1;
  57   1              _nop_();
  58   1              dq=0;
  59   1              TempDelay(86);   //delay 530 uS//80
  60   1              _nop_();
  61   1              dq=1;
  62   1              TempDelay(14);   //delay 100 uS//14
  63   1              _nop_();
  64   1              _nop_();
  65   1              _nop_();
  66   1              
  67   1              if(dq==0)
  68   1                      flag = 1;   //detect 1820 success!
  69   1              else
  70   1                      flag = 0;    //detect 1820 fail!
  71   1              TempDelay(20);       //20
  72   1              _nop_();
  73   1              _nop_();
  74   1              dq = 1;
  75   1      }
  76          /************************************************************
  77          *Function:向18B20写入一个字节
  78          *parameter:
  79          *Return:
  80          *Modify:
  81          *************************************************************/
  82          void WriteByte (uchar wr)  //单字节写入
  83          {
  84   1              uchar i;
  85   1              for (i=0;i<8;i++)
  86   1              {
  87   2                      dq = 0;
  88   2                      _nop_();
  89   2                      dq=wr&0x01;
  90   2                      TempDelay(5);   //delay 45 uS //5
  91   2                      _nop_();
  92   2                      _nop_();
  93   2                      dq=1;
  94   2                      wr >>= 1;
  95   2              }
  96   1      }
  97          /************************************************************
  98          *Function:读18B20的一个字节
  99          *parameter:
 100          *Return:
 101          *Modify:
 102          *************************************************************/
 103          uchar ReadByte (void)     //读取单字节
 104          {
 105   1              uchar i,u=0;
 106   1              for(i=0;i<8;i++)
 107   1              {
 108   2                      dq = 0;
 109   2                      u >>= 1;
 110   2                      dq = 1;
 111   2                      if(dq==1)
 112   2                      u |= 0x80;
 113   2                      TempDelay (4);
 114   2                      _nop_();
 115   2              }
 116   1              return(u);
 117   1      }
C51 COMPILER V7.50   18B20                                                                 04/26/2007 22:01:21 PAGE 3   

 118          /************************************************************
 119          *Function:读18B20
 120          *parameter:
 121          *Return:
 122          *Modify:
 123          *************************************************************/
 124          void read_bytes (uchar j)
 125          {
 126   1               uchar i;
 127   1               for(i=0;i<j;i++)
 128   1               {
 129   2                        *p = ReadByte();
 130   2                        p++;
 131   2               }
 132   1      }
 133          /************************************************************
 134          *Function:CRC校验
 135          *parameter:
 136          *Return:
 137          *Modify:
 138          *************************************************************/
 139          uchar CRC (uchar j)
 140          {
 141   1              uchar i,crc_data=0;
 142   1              for(i=0;i<j;i++)  //查表校验
 143   1              crc_data = CrcTable[crc_data^temp_buff[i]];
 144   1          return (crc_data);
 145   1      }
 146          /************************************************************
 147          *Function:读取温度
 148          *parameter:
 149          *Return:
 150          *Modify:
 151          *************************************************************/
 152          void GemTemp (void)
 153          {
 154   1         read_bytes (9);
 155   1         if (CRC(9)==0) //校验正确
 156   1         {
 157   2                  Temperature = temp_buff[1]*0x100 + temp_buff[0];
 158   2                      Temperature /= 16;
 159   2                      TempDelay(1);
 160   2          }
 161   1      }
 162          /************************************************************
 163          *Function:内部配置
 164          *parameter:
 165          *Return:
 166          *Modify:
 167          *************************************************************/
 168          void Config18b20 (void)  //重新配置报警限定值和分辨率
 169          {
 170   1           Init18b20();
 171   1           WriteByte(0xcc);  //skip rom
 172   1           WriteByte(0x4e);  //write scratchpad
 173   1           WriteByte(0x19);  //上限
 174   1           WriteByte(0x1a);  //下限
 175   1           WriteByte(0x7f);     //set 11 bit (0.125)
 176   1           Init18b20();
 177   1           WriteByte(0xcc);  //skip rom
 178   1           WriteByte(0x48);  //保存设定值
 179   1           Init18b20();
C51 COMPILER V7.50   18B20                                                                 04/26/2007 22:01:21 PAGE 4   

 180   1           WriteByte(0xcc);  //skip rom
 181   1           WriteByte(0xb8);  //回调设定值
 182   1      }
 183          /************************************************************
 184          *Function:读18B20ID
 185          *parameter:
 186          *Return:
 187          *Modify:
 188          *************************************************************/
 189          void ReadID (void)//读取器件 id
 190          {
 191   1              Init18b20();
 192   1              WriteByte(0x33);  //read rom
 193   1              read_bytes(8);
 194   1      }
 195          /************************************************************
 196          *Function:18B20ID全处理
 197          *parameter:
 198          *Return:
 199          *Modify:
 200          *************************************************************/
 201          void TemperatuerResult(void)
 202          {
 203   1              p = id_buff;
 204   1              ReadID();
 205   1              Config18b20();
 206   1              Init18b20 ();
 207   1              WriteByte(0xcc);   //skip rom
 208   1              WriteByte(0x44);   //Temperature convert
 209   1              TempDelay(60000); 
 210   1              TempDelay(60000); 
 211   1              Init18b20 (); 
 212   1              WriteByte(0xcc);   //skip rom
 213   1              WriteByte(0xbe);   //read Temperature
 214   1              p = temp_buff;
 215   1              GemTemp();
 216   1      }
 217          
 218          
 219          
 220          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    328    ----
   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 + -