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

📄 ds1820.lst

📁 该程序通过DS18B20测温度
💻 LST
字号:
C51 COMPILER V7.50   DS1820                                                                10/04/2007 11:52:13 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DS1820
OBJECT MODULE PLACED IN DS1820.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1820.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**********************************************************
   2          *DS1820驱动程序
   3          *版本:V1.0
   4          
   5          **********************************************************/
   6          #include <at89x52.h>
   7          //引脚定义
   8          sbit DS1820_DQ= P1^3; //单总线引脚
   9          //函数声明
  10          bit DS1820_Reset();
  11          void DS1820_WriteData(unsigned char wData);
  12          unsigned char DS1820_ReadData();
  13          //存放温度数据
  14          unsigned char data temperature[2]; //将温度存储在低128RAM单元
  15          /**********************************************************
  16          *读温度数据函数
  17          **********************************************************/
  18          void read_temp()
  19          {
  20   1       unsigned char i;
  21   1       DS1820_Reset();                  //复位
  22   1       DS1820_WriteData(0xcc); //跳过ROM命令
  23   1       DS1820_WriteData(0x44); //温度转换命令
  24   1       DS1820_Reset();                  //复位
  25   1       DS1820_WriteData(0xcc); //跳过ROM命令
  26   1       DS1820_WriteData(0xbe); //读DS1820温度暂存器命令
  27   1       for (i=0;i<2;i++)
  28   1              {
  29   2              temperature[i]=DS1820_ReadData();
  30   2              }
  31   1       DS1820_Reset();                  //复位,结束读数据
  32   1       }
  33          
  34          /**********************************************************
  35          *DS1820复位及存在检测(通过存在脉冲可以判断DS1820是否损坏)
  36          *函数名称:DS1820_Reset()
  37          *说明:函数返回一个位标量(0或1)flag=0存在,反之flag=1不存在
  38          **********************************************************/
  39          bit DS1820_Reset()
  40          {
  41   1       unsigned char i;
  42   1       bit flag;                      //DS1820存在标志位
  43   1       DS1820_DQ = 0;         //拉低总线
  44   1       for (i=240;i>0;i--);//延时480微秒,产生复位脉冲
  45   1       DS1820_DQ = 1;         //释放总线
  46   1       for (i=40;i>0;i--); //延时80微秒对总线采样
  47   1       flag =  DS1820_DQ;
  48   1       for (i=200;i>0;i--); //延时400微秒等待总线恢复
  49   1       return (flag);         //根据flag的值可以知道DS1820是否存在或损坏
  50   1      }                                       //可以加声音告警提示DS1820故障
  51          /**********************************************************
  52          *写数据到DS1820
  53          *函数名称:DS1820_WriteData()
  54          *
  55          **********************************************************/
C51 COMPILER V7.50   DS1820                                                                10/04/2007 11:52:13 PAGE 2   

  56          void DS1820_WriteData(unsigned char wData)
  57          {
  58   1       unsigned char i,j;
  59   1       for (i=8;i>0;i--)
  60   1              {
  61   2               DS1820_DQ = 0;         //拉低总线,产生写信号
  62   2               for (j=2;j>0;j--);     //延时4us
  63   2               DS1820_DQ = wData&0x01; //发送1位
  64   2               for (j=30;j>0;j--); //延时60us,写时序至少要60us
  65   2               DS1820_DQ = 1;         //释放总线,等待总线恢复
  66   2               wData>>=1;     //准备下一位数据的传送
  67   2              }
  68   1      }
  69          /**********************************************************
  70          *从DS1820中读出数据
  71          *函数名称:DS1820_ReadData()
  72          *
  73          **********************************************************/
  74          unsigned char DS1820_ReadData()
  75          {
  76   1       unsigned char i,j,TmepData;
  77   1       for (i=8;i>0;i--)
  78   1              {
  79   2                      TmepData>>=1;
  80   2                      DS1820_DQ = 0;          //拉低总线,产生读信号
  81   2                      for (j=2;j>0;j--);      //延时4us
  82   2                              DS1820_DQ = 1;  //释放总线,准备读数据
  83   2                      for (j=4;j>0;j--);      //延时8微秒读数据
  84   2                              if (DS1820_DQ == 1)
  85   2                                      TmepData |= 0x80;
  86   2                      for (j=30;j>0;j--); //延时60us
  87   2                      DS1820_DQ = 1;          //拉高总线,准备下一位数据的读取.
  88   2              }
  89   1              return (TmepData);//返回读到的数据
  90   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    132    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       1
   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 + -