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

📄 dis18b20.lst

📁 kile 18b20 温度读取
💻 LST
字号:
C51 COMPILER V8.09   DIS18B20                                                              12/05/2008 12:05:20 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE DIS18B20
OBJECT MODULE PLACED IN DIS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DIS18B20.c OMF2 BROWSE DEBUG

line level    source

   1          #include<reg51.h>
   2          #include<intrins.h>
   3          #define uint unsigned int 
   4          #define uchar unsigned char
   5          sbit DQ=P1^7 ;
   6          uchar temper[]="0123456789";  
   7          //延时函数
   8          void delay_18B20(int i)
   9          {
  10   1      while(i--);
  11   1      }
  12                 
  13          
  14          void Init_18B20()   
  15          { 
  16   1      bit flag;//器件检测位
  17   1      DQ=1;    //这是在启动复位信号之前的的总线电平状态,可要可不要
  18   1      delay_18B20(8);  //稍做延时
  19   1      DQ=0;    //单片机将DQ拉低
  20   1      delay_18B20(80); //主机发送的复位脉冲是480US~960us的低电平
  21   1      DQ=1;    //拉高总线
  22   1      delay_18B20(14);//主机发出复位脉冲后就释放总线要15us~60us时间,等待接收
  23   1      flag=DQ;      //当flag为0,要维持60us~240us,即低电平的时候就说明主机收到了从机的应答信号,也就是有器件存在
             -,可以发收或者接收数据了
  24   1      delay_18B20(20);
  25   1      while(flag)//高电平说明没有发现器件的存在
  26   1        ;
  27   1      }
  28          void Write_18B20(uchar dat)
  29          {
  30   1      uchar i=0;
  31   1      for (i=8; i>0; i--)
  32   1      {
  33   2        DQ=0;//写时序启动于数据总线低电平,写0和写1也一样的,数据位8位数据,有0也有1
  34   2        DQ=dat&0x01;//取出最低位数据,可以是0或者1,放到总线
  35   2        delay_18B20(5);//从低位开始送数据,可以写入0或者1,写入数据的第i位,只要维持60MS,就把数据写入
  36   2        DQ=1;///写入一位数据就释放总线,准备写入下一位数据
  37   2        delay_18B20(2);//在15us内释放总线
  38   2        dat>>=1;
  39   2      }
  40   1      }
  41          uint Read_18B20()
  42          {
  43   1      uchar i=0;
  44   1      uchar dat=0;
  45   1      for (i=8;i>0;i--)
  46   1      {
  47   2        DQ=0;//从从器件读数据也开始于主机拉低总线,起码维持1ms的低电平
  48   2        dat>>=1;
  49   2        delay_18B20(2);
  50   2        DQ=1; //释放总线,等待从机返回数据
  51   2        if(DQ)//如果从机发出1,那么总线维持高电平,否则为低电平
  52   2           dat|=0x80;//如果从机发出的数据为1,那么接收到的也为1,否则为0
  53   2        delay_18B20(4);
  54   2      }
C51 COMPILER V8.09   DIS18B20                                                              12/05/2008 12:05:20 PAGE 2   

  55   1      return dat;
  56   1      }
  57          uint ReadTemperature(void)
  58          {
  59   1      uchar tempL=0,tempH;
  60   1      int temper_int=0;
  61   1      float  temper;
  62   1      Init_18B20();
  63   1      Write_18B20(0xCC); // 跳过读序号列号的操作
  64   1      Write_18B20(0x44); // 启动温度转换
  65   1      Init_18B20();
  66   1      Write_18B20(0xCC); //跳过读序列号的操作
  67   1      Write_18B20(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  68   1      tempL=Read_18B20();
  69   1      tempH=Read_18B20();
  70   1      temper=(tempL&0xf)*0.0625+(((tempH&0x7)<<4)|((tempL&0xf0)>>4));
  71   1      temper_int=(uint)(temper*100);//放大100倍
  72   1      return(temper_int);
  73   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    261    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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