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

📄 mainfun.lst

📁 通过单片机一个I/O进行1线通信控制温度传感器程序。
💻 LST
字号:
C51 COMPILER V7.10   MAINFUN                                                               12/14/2006 21:31:11 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE MAINFUN
OBJECT MODULE PLACED IN mainfun.OBJ
COMPILER INVOKED BY: d:\Program Files\Keil\C51\BIN\C51.EXE mainfun.c BROWSE DEBUG OBJECTEXTEND

line level    source

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

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

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

 180   1           WriteByte(0x19);  //上限
 181   1           WriteByte(0x1a);  //下限
 182   1           WriteByte(0x7f);     //set 11 bit (0.125)
 183   1           Init18b20();
 184   1           WriteByte(0xcc);  //skip rom
 185   1           WriteByte(0x48);  //保存设定值
 186   1           Init18b20();
 187   1           WriteByte(0xcc);  //skip rom
 188   1           WriteByte(0xb8);  //回调设定值
 189   1      }
 190          /************************************************************
 191          *Function:读18B20ID
 192          *parameter:
 193          *Return:
 194          *Modify:
 195          *************************************************************/
 196          void ReadID (void)//读取器件 id
 197          {
 198   1              Init18b20();
 199   1              WriteByte(0x33);  //read rom
 200   1              read_bytes(8);
 201   1      }
 202          /************************************************************
 203          *Function:18B20ID全处理
 204          *parameter:
 205          *Return:
 206          *Modify:
 207          *************************************************************/
 208          void TemperatuerResult(void)
 209          {
 210   1              p = id_buff;
 211   1              ReadID();
 212   1              Config18b20();
 213   1              Init18b20 ();
 214   1              WriteByte(0xcc);   //skip rom
 215   1              WriteByte(0x44);   //Temperature convert
 216   1              Init18b20 ();
 217   1              WriteByte(0xcc);   //skip rom
 218   1              WriteByte(0xbe);   //read Temperature
 219   1              p = temp_buff;
 220   1              GemTemp();
 221   1      }
 222          
 223          void sercon(void)
 224          {
 225   1              SCON   = 0x50;          /* SCON: mode 1, 8-bit UART, enable rcvr        */
 226   1              TMOD  |= 0x20;          /* TMOD: timer 1, mode 2, 8-bit reload          */
 227   1              TH1     = 0xFD;             /* TH1:  reload value for 9600 baud @ 11.0592MHz    */
 228   1              TR1     = 1;                    /* TR1:  timer 1 run                                            */
 229   1              TI         = 1;                 /* TI:   set TI to send first char of UART              */
 230   1      }
 231          
 232          void main(void)
 233          {
 234   1          uint cnt = 0;
 235   1      
 236   1              sercon();
 237   1      
 238   1              printf("Starting---\r\n");
 239   1      
 240   1              do
 241   1              {
C51 COMPILER V7.10   MAINFUN                                                               12/14/2006 21:31:11 PAGE 5   

 242   2                      TemperatuerResult();
 243   2      
 244   2                      printf("TemperatuerResult: %d\r\n",Temperature);
 245   2                      cnt = 10000;
 246   2                      for(;cnt > 0;cnt--)
 247   2                      {};             
 248   2              }while(1);
 249   1      }
 250          
 251          
 252          


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