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

📄 main3.lst

📁 STC12C54XX 下 DS18B20 温度传感器控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   MAIN3                                                                03/20/2008 09:46:54 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN3
OBJECT MODULE PLACED IN main3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main3.c BROWSE DEBUG OBJECTEXTEND

line level    source

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

  56          
  57          
  58          //主函数
  59          main()
  60          { uchar TMP[10];
  61   1        uchar temp[9];
  62   1        uchar i,j;
  63   1      
  64   1        UART_init();
  65   1        Flag = 0;
  66   1        EA = 1;               //禁止所有的中断
  67   1        /*
  68   1        TemperatuerResult();
  69   1        temp = (Temperature>>8) & 0x00FF;
  70   1          send(temp);
  71   1              temp = Temperature & 0x00FF;
  72   1          send(temp);
  73   1        */
  74   1        while(1)
  75   1        { WDT = !WDT;
  76   2              if(comData == 0xA0)
  77   2              { EA = 0;
  78   3              
  79   3              comData = 0x00;
  80   3              /*
  81   3              Init18B20();
  82   3              WriteByte(0x33);    //read ID
  83   3              p = ID_buff;
  84   3          read_18B20(8);
  85   3              send(0xAA);
  86   3              for(i=0;i<8;i++)
  87   3            send(ID_buff[i]);
  88   3              */
  89   3              //for(j=0;j<10;j=j+2)
  90   3                Init18B20 ();            //复位
  91   3            WriteByte(0xCC);     //skip rom
  92   3            WriteByte(0x44);     //开始温度转换
  93   3                DQ = 1;                          //延时1S 等待温度转换完成
  94   3                TempDelay100ms (5);
  95   3                //TempDelay100ms (5);
  96   3      
  97   3            Init18B20 ();                //复位
  98   3            WriteByte(0xCC);     //skip rom
  99   3            WriteByte(0xBE);     //读取暂存器和CRC 字节
 100   3            /*
 101   3                for(k = 0;k<9;k++)
 102   3                  temp[k] = ReadByte();
 103   3                Init18B20 ();
 104   3                
 105   3                TMP[j]   = ReadByte();
 106   3                TMP[j+1] = ReadByte();
 107   3      
 108   3                Init18B20 ();        //放弃读取
 109   3              }
 110   3              
 111   3              send(0xAA);
 112   3              for(i=0;i<10;i++)
 113   3                send(TMP[i]);
 114   3          
 115   3              for(i = 0;i<9;i++)
 116   3                TMP[i] = ReadByte();
 117   3              Init18B20 ();
C51 COMPILER V8.05a   MAIN3                                                                03/20/2008 09:46:54 PAGE 3   

 118   3              send(0xEE);
 119   3              for(i=0;i<9;i++)
 120   3                send(TMP[i]);
 121   3              */
 122   3              for(i = 0;i<9;i++)
 123   3                TMP[i] = ReadByte();
 124   3              send(0xAA);
 125   3              send(TMP[1]);
 126   3              send(TMP[0]);
 127   3              
 128   3          EA = 1;
 129   3              }
 130   2              //TempDelay100ms (5);
 131   2        }
 132   1      }
*** WARNING C280 IN LINE 61 OF MAIN3.C: 'temp': unreferenced local variable
*** WARNING C280 IN LINE 62 OF MAIN3.C: 'j': unreferenced local variable
 133          
 134          
 135          /************************************************************
 136          *Function:延时1us处理
 137          
 138          *************************************************************/
 139          void TempDelay (uchar us)
 140          {
 141   1        while(us--);
 142   1      }
 143          
 144          
 145          /************************************************************
 146          *Function:延时100ms处理
 147          
 148          *************************************************************/
 149          void TempDelay100ms (uchar us)
 150          { uchar i,j;
 151   1      
 152   1        for(j=0;j<us;j++)
 153   1          for(i=0;i<100;i++)
 154   1          { TempDelay(250);
 155   2                TempDelay(250);
 156   2                TempDelay(250);
 157   2                TempDelay(250);
 158   2          }
 159   1      }
 160          
 161          
 162          
 163          //串行口初始化
 164          void UART_init(void)
 165          {  P1M0 = 0x01;                         //设置P32,P33,P34,P35,P37为推挽输出状态
 166   1         P1M1 = 0x01;
 167   1         P3M0 = 0x10;
 168   1         P3M1 = 0x10;
 169   1      
 170   1        //初始化串行口和波特率发生器 
 171   1        SCON = 0x50;              //选择串口工作方式1,打开接收允许
 172   1        TMOD = 0x20;              //定时器1工作在方式2,定时器0工作在方式1
 173   1      
 174   1        TH1  = 0xFD;              //当SMOD=0时,其初值计算如下:初值 = 256 -(F/B/32/X)(其中X为分频数)  X = 6
 175   1        TL1  = 0XFD;              //实现波特率9600(系统时钟 11.0592 MHZ)
 176   1      
 177   1        TH0  = TIMER0_10ms_H;
C51 COMPILER V8.05a   MAIN3                                                                03/20/2008 09:46:54 PAGE 4   

 178   1        TL0  = TIMER0_10ms_L ;
 179   1                                          
 180   1        TR1  = 1;                 //启动定时器T1
 181   1        ET1  = 0;                                 //禁止T1中断
 182   1        AUXR = 0xBF;              //此句改为AUXR = 0x40 ,波特率可以加倍12倍
 183   1        ES   = 1;                 //允许串行口中断
 184   1        //PS   = 1;               //设置串行口中断优先级
 185   1        EA   = 0;                 //禁止所有中断
 186   1        P3_7 = 0;
 187   1      }
 188          
 189          

⌨️ 快捷键说明

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