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

📄 bak3.lst

📁 STC12C54XX 下 DS18B20 温度传感器控制程序
💻 LST
字号:
C51 COMPILER V8.05a   BAK3                                                                 03/19/2008 15:17:06 PAGE 1   


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

line level    source

   1          /************************************************************************************/
   2          /*********************************DS18B20温度采样模块********************************/
   3          
   4          #include<STC12C5410AD.h>
   5          #include <intrins.h>
   6          #define   uchar     unsigned char
   7          #define   uint      unsigned int
   8          
   9          sbit      DAT   = P3^4;
  10          sbit      P3_7 = P3^7;
  11          sbit      WDT  = P3^5;
  12          
  13          uchar comData;
  14          
  15          void UART_init();
  16          void send(uchar);
  17          void mdelay(uchar);
  18          void restDS(void);
  19          void writeDS(uchar);
  20          uchar readDS(void);
  21          void initDS(void);
  22          uint readtemp(void);
  23          
  24          
  25          //主函数
  26          void main()
  27          { uint TMP;
  28   1        uchar temp;
  29   1      
  30   1        UART_init();
  31   1      
  32   1        while(1)
  33   1        { WDT = !WDT;
  34   2          if(comData == 0x03)
  35   2              { EA = 0;
  36   3                comData = 0;
  37   3                TMP = readtemp;
  38   3                temp = (TMP >>8)&0x00FF;
  39   3            send(temp);
  40   3                temp = TMP &0x00FF;
  41   3            send(temp);
  42   3                EA = 1;
  43   3              }
  44   2        }
  45   1      }
  46          
  47          
  48          
  49          //串行口初始化
  50          void UART_init(void)
  51          {  P1M0 = 0x01;                         //设置P32,P33,P34,P35,P37为推挽输出状态
  52   1         P1M1 = 0x01;
  53   1         P3M0 = 0x10;
  54   1         P3M1 = 0x10;
  55   1      
C51 COMPILER V8.05a   BAK3                                                                 03/19/2008 15:17:06 PAGE 2   

  56   1        //初始化串行口和波特率发生器 
  57   1        SCON = 0x50;              //选择串口工作方式1,打开接收允许
  58   1        TMOD = 0x20;              //定时器1工作在方式2,定时器0工作在方式1
  59   1      
  60   1        TH1  = 0xFD;              //当SMOD=0时,其初值计算如下:初值 = 256 -(F/B/32/X)(其中X为分频数)  X = 6
  61   1        TL1  = 0XFD;              //实现波特率9600(系统时钟 11.0592 MHZ)
  62   1                                          
  63   1        TR1  = 1;                 //启动定时器T1
  64   1        ET1  = 0;                                 //禁止T1中断
  65   1        AUXR = 0xBF;              //此句改为AUXR = 0x40 ,波特率可以加倍12倍
  66   1        ES   = 1;                 //允许串行口中断
  67   1        //PS   = 1;               //设置串行口中断优先级
  68   1        EA   = 0;                 //禁止所有中断
  69   1        P3_7 = 0;
  70   1      }
  71          
  72          
  73          //串口发送子程序
  74          void send(uchar cmd)
  75          { 
  76   1         P3_7 = 1;
  77   1         SBUF = cmd;
  78   1         while(!TI);
  79   1         TI=0;
  80   1         P3_7 = 0;
  81   1      
  82   1      }
  83          
  84          
  85          //延时
  86          void mdelay(uchar time)      //短延时time*8.68us(在keil里计算出的)
  87          {
  88   1        for(;time>0;time--);
  89   1      }
  90          
  91          //复位程序
  92          void restDS(void)
  93          {
  94   1        do 
  95   1        { DAT=0;
  96   2          mdelay(80);
  97   2          DAT=1;
  98   2          mdelay(5);
  99   2        }while(DAT);
 100   1        mdelay(15);
 101   1        DAT=1;
 102   1        mdelay(70);
 103   1      }
 104          
 105          
 106          //写一个字节
 107          void writeDS(uchar wdat)
 108          { unsigned char i;
 109   1      
 110   1        for(i=0;i<8;i++)
 111   1        { DAT=1;
 112   2          _nop_();
 113   2          DAT=0;
 114   2          mdelay(1);
 115   2          DAT=wdat&0x01;
 116   2          wdat=wdat>>1;
 117   2          mdelay(8);
C51 COMPILER V8.05a   BAK3                                                                 03/19/2008 15:17:06 PAGE 3   

 118   2        }
 119   1      
 120   1        DAT=1;
 121   1      }
 122          
 123          
 124          //读一个字节
 125          uchar readDS(void)
 126          { uchar i;
 127   1        uchar rdat=0;
 128   1      
 129   1        for(i=0;i<8;i++)
 130   1        { rdat>>=1;//地位在前,高位在后
 131   2          DAT=0;
 132   2          _nop_();
 133   2          DAT=1;
 134   2          mdelay(1);
 135   2          _nop_();
 136   2          _nop_();
 137   2          if(DAT)
 138   2            rdat|=0x80;
 139   2          mdelay(7);
 140   2        }
 141   1      
 142   1        DAT=1;
 143   1        return(rdat);
 144   1      }
 145          
 146          
 147          //初始化程序
 148          void initDS(void)
 149          {
 150   1        restDS();            //复位
 151   1        writeDS(0xCC);       //跳过读序列号操作
 152   1        writeDS(0x4E);       //写报警温度指令
 153   1        writeDS(0x1A);         //报警温度上限
 154   1        writeDS(0x00);         //报警温度下限
 155   1        writeDS(precision);  //采样精度设置
*** ERROR C202 IN LINE 155 OF BAK3.C: 'precision': undefined identifier
 156   1      }
 157          
 158          
 159          //读取温度
 160          uint readtemp(void)
 161          { uchar templ = 0,temph = 0;
 162   1        uint temp=0;
 163   1        
 164   1        restDS();            //复位
 165   1        writeDS(0xCC);       //跳过读序列号
 166   1        writeDS(0x44);       //启动温度转换
 167   1        mdelay(80);
 168   1      
 169   1        restDS();
 170   1        writeDS(0xCC);       //跳过读序列号
 171   1        writeDS(0xBE);       //读温度寄存器指令
 172   1      
 173   1        templ = readDS();    //采样值低8位
 174   1        temph = readDS();    //采样值高8位
 175   1        
 176   1        temp = temph;
 177   1        temp <<= 8;
 178   1        temp = temp|templ;
C51 COMPILER V8.05a   BAK3                                                                 03/19/2008 15:17:06 PAGE 4   

 179   1      
 180   1        return(temp);
 181   1      }
 182          
 183          
 184          //串口接收中断
 185          void uart_isr()    interrupt  4
 186          { 
 187   1        EA = 0;
 188   1      
 189   1        comData = SBUF;                                //接收数据
 190   1        RI  = 0;
 191   1      
 192   1        EA = 1;
 193   1      }

C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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