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

📄 18b20.lst

📁 18b20温度测量控制程序
💻 LST
字号:
C51 COMPILER V7.50   18B20                                                                 09/02/2006 00:02:24 PAGE 1   


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

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

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

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


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