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

📄 18b20.lst

📁 18b20 的使用源码 the use of 18b20 in keil
💻 LST
字号:
C51 COMPILER V7.06   18B20                                                                 09/04/2008 07:28:00 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: d:\Keil2\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //18B20单线温度检测的应用样例程序
   2          #include<REG52.H>
   3          #include<math.h>
   4          #include<INTRINS.H>
   5          
   6          #define uchar unsigned char
   7          #define uint   unsigned int;
   8          /*****************************************************************************/
   9          sbit seg1=P2^0;
  10          sbit seg2=P2^1;
  11          sbit seg3=P2^2;
  12          sbit DQ=P3^5;//ds18b20 端口
  13          sfr dataled=0x80;//显示数据端口
  14          /**********************************************************************/ 
  15          uchar temp;
  16          uchar flag_get,count,num,minute,second;
  17          uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//7段数码管段码表共阳
  18          uchar  str[3];
  19          /***********************************************************************/
  20          void delay1(uchar MS);
  21          unsigned char ReadTemperature(void);
  22          void Init_DS18B20(void);
  23          unsigned char ReadOneChar(void);
  24          void WriteOneChar(unsigned char dat);
  25          void delay(unsigned int i);
  26          /************************************************************************/
  27          main()
  28          {
  29   1      
  30   1      TMOD|=0x01;//定时器设置
  31   1      TH0=0xef;
  32   1      TL0=0xf0;
  33   1      IE=0x82;
  34   1      TR0=1;
  35   1      P2=0x00;  
  36   1      count=0;
  37   1      
  38   1      
  39   1      while(1)
  40   1      {
  41   2         str[0]=0xc6;//显示C符号
  42   2         str[2]=tab[temp/10]; //十位温度
  43   2         str[1]=tab[temp%10]; //个位温度
  44   2        if(flag_get==1)  //定时读取当前温度
  45   2          {
  46   3        temp=ReadTemperature();
  47   3        flag_get=0;
  48   3          }
  49   2        }
  50   1      }
  51          
  52          
  53          
  54          void tim(void) interrupt 1 using 1//中断,用于数码管扫描和温度检测间隔
  55          {
C51 COMPILER V7.06   18B20                                                                 09/04/2008 07:28:00 PAGE 2   

  56   1      TH0=0xef;//定时器重装值
  57   1      TL0=0xf0;
  58   1      num++;
  59   1      if (num==50)
  60   1          {num=0;
  61   2                flag_get=1;//标志位有效
  62   2            second++;
  63   2             if(second>=60)
  64   2               {second=0;
  65   3                 minute++;  
  66   3                }
  67   2            }
  68   1      count++;
  69   1      if(count==1)
  70   1         {P2=0xf7;
  71   2          dataled=str[0];}//数码管扫描
  72   1      if(count==2)
  73   1         {P2=0xfb;
  74   2          dataled=str[1];}
  75   1      if(count==3)
  76   1         { P2=0xfd;
  77   2           dataled=str[2];
  78   2           count=0;}
  79   1      }
  80          /*************************************************************************************/
  81          void delay(unsigned int i)//延时函数
  82          {
  83   1       while(i--);
  84   1      }
  85          /***************************************************************************************/
  86          //18b20初始化函数
  87          void Init_DS18B20(void)
  88          {
  89   1       unsigned char x=0;
  90   1       DQ = 1;    //DQ复位
  91   1       delay(8);  //稍做延时
  92   1       DQ = 0;    //单片机将DQ拉低
  93   1       delay(80); //精确延时 大于 480us
  94   1       DQ = 1;    //拉高总线
  95   1       delay(10);
  96   1       x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  97   1       delay(5);
  98   1      }
  99          
 100          //读一个字节
 101          unsigned char ReadOneChar(void)
 102          {
 103   1      unsigned char i=0;
 104   1      unsigned char dat = 0;
 105   1      for (i=8;i>0;i--)
 106   1       {
 107   2        DQ = 0; // 给脉冲信号
 108   2        dat>>=1;
 109   2        DQ = 1; // 给脉冲信号
 110   2        if(DQ)
 111   2         dat|=0x80;
 112   2        delay(5);
 113   2       }
 114   1       return(dat);
 115   1      }
 116          
 117          //写一个字节
C51 COMPILER V7.06   18B20                                                                 09/04/2008 07:28:00 PAGE 3   

 118          void WriteOneChar(unsigned char dat)
 119          {
 120   1       unsigned char i=0;
 121   1       for (i=8; i>0; i--)
 122   1       {
 123   2        DQ = 0;
 124   2        DQ = dat&0x01;
 125   2        delay(5);
 126   2        DQ = 1;
 127   2        dat>>=1;
 128   2       }
 129   1      delay(5);
 130   1      }
 131          
 132          //读取温度
 133          unsigned char ReadTemperature(void)
 134          {
 135   1      unsigned char a=0;
 136   1      unsigned char b=0;
 137   1      unsigned char t=0;
 138   1      //float tt=0;
 139   1      Init_DS18B20();
 140   1      WriteOneChar(0xCC); // 跳过读序号列号的操作
 141   1      WriteOneChar(0x44); // 启动温度转换
 142   1      delay(200);
 143   1      Init_DS18B20();
 144   1      WriteOneChar(0xCC); //跳过读序号列号的操作 
 145   1      WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 146   1      a=ReadOneChar();
 147   1      b=ReadOneChar();
 148   1      
 149   1      b<<=4;
 150   1      b+=(a&0xf0)>>4;
 151   1      t=b;
 152   1      //tt=t*0.0625;
 153   1      //t= tt*10+0.5; //放大10倍输出并四舍五入
 154   1      return(t);
 155   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    308    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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