main.lst

来自「stc15单片机测试程序V1.0版」· LST 代码 · 共 168 行

LST
168
字号
C51 COMPILER V9.01   MAIN                                                                  07/28/2012 10:08:43 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***********************************************************
   2          实验名称:18B20
   3          程序说明:本程序测试了18B20
   4          实验平台:stc15单片机开发板v1.0版
   5          日期:2012-05-27
   6          QQ:     259902530
   7          www.stcstudy.com    61mcu.taobao.com  版权所有 
   8          ***********************************************************/
   9          //18B20单线温度检测的应用样例程序, 输出结果用串口传输到上位机显示,可采用STC下载软件自带串口调试助力观察
  10          #include "STC15F2K.h"
  11          #include "UART.H"
  12          #include <intrins.H>
  13          #include<math.h>
  14          
  15          
  16          
  17          sbit DQ=P1^2;  //ds18b20 端口
  18          
  19          uchar tab[]="0123456789";               
  20          
  21          void Delay1(uint x);
  22          unsigned char ReadTemperature(void);
  23          void Init_DS18B20(void);
  24          unsigned char ReadOneChar(void);
  25          void WriteOneChar(unsigned char dat);
  26          void delay(unsigned int i);
  27          /************************************************************************/
  28          main()
  29          {
  30   1         uchar temp;
  31   1         uchar a,b;
  32   1         InitUART();
  33   1         P2=0x01;
  34   1         while(1)
  35   1         { 
  36   2           temp=ReadTemperature()-1;
  37   2               a=tab[temp/10]; //十位温度
  38   2           b=tab[temp%10]; //个位温度
  39   2               SendString("Now is : ");
  40   2               SendData(a);
  41   2               SendData(b);
  42   2               SendString("\r\n\r\n");   
  43   2               Delay1(500);  
  44   2         }
  45   1      }
  46          
  47          
  48          void Delay1(uint x)             //@11.0592MHz   x ms
  49          {
  50   1              unsigned char i, j;
  51   1              while(x--)
  52   1              {
  53   2                _nop_();
  54   2                _nop_();
  55   2                _nop_();
C51 COMPILER V9.01   MAIN                                                                  07/28/2012 10:08:43 PAGE 2   

  56   2                i = 11;
  57   2                j = 190;
  58   2                do
  59   2                {
  60   3                      while (--j);
  61   3                } 
  62   2                while (--i);
  63   2          }
  64   1      }
  65          
  66          void delay(unsigned int i)//延时函数
  67          {
  68   1       while(i--);
  69   1      }
  70          /***************************************************************************************/
  71          //18b20初始化函数
  72          void Init_DS18B20(void)
  73          {
  74   1       unsigned char x=0;
  75   1       DQ = 1;    //DQ复位
  76   1       delay(80);  //稍做延时
  77   1       DQ = 0;    //单片机将DQ拉低
  78   1       delay(800); //精确延时 大于 480us
  79   1       DQ = 1;    //拉高总线
  80   1       delay(100);
  81   1       x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  82   1       delay(50);
  83   1      }
  84          
  85          //读一个字节
  86          unsigned char ReadOneChar(void)
  87          {
  88   1      unsigned char i=0;
  89   1      unsigned char dat = 0;
  90   1      for (i=8;i>0;i--)
  91   1       {
  92   2        DQ = 0; // 给脉冲信号
  93   2        dat>>=1;
  94   2        DQ = 1; // 给脉冲信号
  95   2        if(DQ)
  96   2         dat|=0x80;
  97   2        delay(50);
  98   2       }
  99   1       return(dat);
 100   1      }
 101          
 102          //写一个字节
 103          void WriteOneChar(unsigned char dat)
 104          {
 105   1       unsigned char i=0;
 106   1       for (i=8; i>0; i--)
 107   1       {
 108   2        DQ = 0;
 109   2        DQ = dat&0x01;
 110   2        delay(50);
 111   2        DQ = 1;
 112   2        dat>>=1;
 113   2       }
 114   1      delay(50);
 115   1      }
 116          
 117          //读取温度
C51 COMPILER V9.01   MAIN                                                                  07/28/2012 10:08:43 PAGE 3   

 118          unsigned char ReadTemperature(void)
 119          {
 120   1      unsigned char a=0;
 121   1      unsigned char b=0;
 122   1      unsigned char t=0;
 123   1      //float tt=0;
 124   1      Init_DS18B20();
 125   1      WriteOneChar(0xCC); // 跳过读序号列号的操作
 126   1      WriteOneChar(0x44); // 启动温度转换
 127   1      delay(2000);
 128   1      Init_DS18B20();
 129   1      WriteOneChar(0xCC); //跳过读序号列号的操作 
 130   1      WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 131   1      a=ReadOneChar();
 132   1      b=ReadOneChar();
 133   1      
 134   1      b<<=4;
 135   1      b+=(a&0xf0)>>4;
 136   1      t=b;
 137   1      //tt=t*0.0625;
 138   1      //t= tt*10+0.5; //放大10倍输出并四舍五入
 139   1      return(t);
 140   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    270    ----
   CONSTANT SIZE    =     15    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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