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

📄 yl-10-ds18b20

📁 DS18B20测温资料集全
💻
字号:
C51 COMPILER V9.00   1                                                                     09/27/2011 12:20:00 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: E:\安装软件\keil-51\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************
   2          
   3          *****************************************/
   4          #include <reg52.h>
   5          #include<math.h>
   6          #include <stdio.h>
   7          #include<intrins.h>
   8          
   9          void delay(unsigned int i);
  10          void delay1ms(unsigned int i);
  11          void ReadTemperature(void);
  12          void Init_DS18B20(void);
  13          ReadOneChar();
  14          void WriteOneChar(unsigned char dat);
  15          
  16          /* 变量定义 -----------------------------------------------*/
  17          sbit DQ=P3^6; //数据传输线接单片机的相应的引脚 
  18          unsigned char tempL=0; //设全局变量
  19          unsigned char tempH=0; 
  20          unsigned int sdate;//测量到的温度的整数部分
  21          unsigned char xiaoshu1;//小数第一位
  22          unsigned char xiaoshu2;//小数第二位
  23          unsigned char xiaoshu;//两位小数
  24          bit  fg=1;        //温度正负标志
  25          unsigned char date;
  26          
  27          //******************************
  28          
  29          //*****串口初始化函数***********
  30          
  31          //******************************
  32          void Initial_com(void)
  33          {
  34   1              SCON=0x50;          //串口选择模式1, 8-bit UART, 使能接收    
  35   1          TMOD|=0x20;     //用定时器1设置波特率
  36   1          TH1=0xFD;     
  37   1          TR1=1;           
  38   1              TI=1;                   //开启串口中断
  39   1      
  40   1      }
  41          
  42           /*
  43          ********************************************************************************
  44          ** 函数名称 : delay(unsigned char i)
  45          ** 函数功能 : 延时函数         这个延时程序的具体延时时间是time=i*8+10,适用于小于2ms的延时
  46          ********************************************************************************
  47          */
  48          void delay(unsigned int i)
  49          {
  50   1              
  51   1              while(i--);
  52   1        
  53   1        
  54   1      }
  55          
C51 COMPILER V9.00   1                                                                     09/27/2011 12:20:00 PAGE 2   

  56          /*
  57          ********************************************************************************
  58          ** 函数名称 :  delay1ms(unsigned char i)
  59          ** 函数功能 : 延时函数 
  60          ********************************************************************************
  61          */
  62          void delay1ms(unsigned int i)
  63          {
  64   1       for(i=124;i>0;i--);  //延时124*8+10=1002us
  65   1      }
  66          
  67          
  68          /*
  69          ********************************************************************************
  70          ** 函数名称 : Init_DS18B20(void)
  71          ** 函数功能 : 初始化
  72          ********************************************************************************
  73          */
  74          void Init_DS18B20(void) 
  75          {
  76   1       unsigned char x=0;
  77   1       DQ=1; //DQ先置高 
  78   1       delay(8); //稍延时
  79   1       DQ=0; //发送复位脉冲 
  80   1       delay(80); //延时(>480us) 
  81   1       DQ=1; //拉高数据线 
  82   1       delay(5); //等待(15~60us) 
  83   1       x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 
  84   1       delay(20); 
  85   1      } 
  86          
  87          
  88          /*
  89          ********************************************************************************
  90          ** 函数名称 :  ReadOneChar()
  91          ** 函数功能 : 读一个字节
  92          ********************************************************************************
  93          */
  94           ReadOneChar()  //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
  95          {
  96   1      unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
  97   1      unsigned char dat=0; 
  98   1      for (i=8;i>0;i--) //一个字节有8位 
  99   1      {
 100   2       DQ=1; 
 101   2       delay(1); 
 102   2       DQ=0;
 103   2       dat>>=1; 
 104   2       DQ=1; 
 105   2       if(DQ) 
 106   2       dat|=0x80; 
 107   2       delay(4);
 108   2      } 
 109   1      return(dat);
 110   1      } 
 111          
 112          
 113          /*
 114          ********************************************************************************
 115          ** 函数名称 : WriteOneChar(unsigned char dat)
 116          ** 函数功能 : 写一个字节
 117          ********************************************************************************
C51 COMPILER V9.00   1                                                                     09/27/2011 12:20:00 PAGE 3   

 118          */
 119          
 120          void WriteOneChar(unsigned char dat) 
 121          { 
 122   1        unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
 123   1        for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。 
 124   1        {
 125   2         DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。 
 126   2         DQ=dat&0x01; 
 127   2         delay(5); 
 128   2         DQ=1; 
 129   2         dat>>=1;
 130   2        } 
 131   1        delay(4);
 132   1      } 
 133          
 134          
 135          /*
 136          ********************************************************************************
 137          ** 函数名称 : ReadTemperature(void)
 138          ** 函数功能 : 读温度值(低位放tempL;高位放tempH;)
 139          ********************************************************************************
 140          */
 141          
 142          void ReadTemperature(void) 
 143          { 
 144   1       Init_DS18B20(); //初始化
 145   1       WriteOneChar(0xcc); //跳过读序列号的操作
 146   1       WriteOneChar(0x44); //启动温度转换
 147   1       delay(125); //转换需要一点时间,延时 
 148   1       Init_DS18B20(); //初始化
 149   1       WriteOneChar(0xcc); //跳过读序列号的操作 
 150   1       WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) 
 151   1       tempL=ReadOneChar(); //读出温度的低位LSB
 152   1       tempH=ReadOneChar(); //读出温度的高位MSB 
 153   1        
 154   1                      if(tempH>0x7f)      //最高位为1时温度是负
 155   1                      {
 156   2                       tempL=~tempL;         //补码转换,取反加一
 157   2                       tempH=~tempH+1;       
 158   2                       fg=0;      //读取温度为负时fg=0
 159   2             }
 160   1                 sdate = tempL/16+tempH*16;      //整数部分
 161   1                 xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
 162   1                 xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位
 163   1                 xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
 164   1                      
 165   1                      
 166   1      
 167   1      }
 168          
 169          
 170          //*************************
 171          //**********主函数*********
 172          //*************************
 173          main()
 174          {
 175   1               Initial_com();
 176   1               while(1)
 177   1               {
 178   2                       ReadTemperature();
 179   2                       
C51 COMPILER V9.00   1                                                                     09/27/2011 12:20:00 PAGE 4   

 180   2                       SBUF=sdate;
 181   2                       delay1ms(50000);
 182   2                       delay1ms(50000);
 183   2                       delay1ms(50000);
 184   2                       delay1ms(50000);
 185   2                       SBUF=xiaoshu;
 186   2                       delay1ms(50000);
 187   2                       delay1ms(50000);
 188   2                       delay1ms(50000);
 189   2                       delay1ms(50000);                                       
 190   2                }
 191   1      }
 192          
 193          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    341    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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