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

📄 one-wire.lst

📁 ds18b20的一个完整程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   ONE_WIRE                                                              01/17/2007 08:38:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ONE_WIRE
OBJECT MODULE PLACED IN One-Wire.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE One-Wire.C BROWSE DEBUG OBJECTEXTEND CODE TABS(2)

line level    source

   1          /******************************************************************************/
   2          /**
   3          /** 模 块 名: -------------------One-Wire.C----------------------------------
   4          /**            -----------------DS18B20单总线模块----------------------------*/
   5          /** 功能描述: 
   6          /**
   7          /** 创 建 人: huangtiexiong    日期:2006-11-28   */
   8          /** 修 改 人:                  日期:2006-11-28   */ 
   9          /** 其他说明: 
  10          /******************************************************************************/
  11          
  12          #include "Includes.h"     //文件包含
  13          
  14          /*************************************************
  15              模块级变量申明                 
  16          *************************************************/
  17          static void   OneWire_Rst(void);
  18          static void   OneWire_Init(void);
  19          static void   OneWire_WriteByte(int8u cmd);
  20          static int8u  OneWire_ReadByte(void);
  21          static void   OneWire_Idle(void);
  22          
  23          
  24          /*************************************************
  25              子函数定义                  
  26          *************************************************/
  27          
  28          /*******************************************************************************
  29          *** 函 数 名: static void OneWire_Init(void)
  30          *** 功能描述: 
  31          *** 全局变量: 
  32          *** 输    入: NO !
  33          *** 输    出: NO !
  34          *** 创 建 人:huangtiexiong       日期:2006-11-28
  35          *** 修 改 人:                    日期:2006-11-28
  36          *** 函数说明: 单总线数据传输初始化;
  37          /******************************************************************************/
  38          static void OneWire_Init(void)
  39          {
  40   1        DQ = 1;
  41   1        NOP();
  42   1        DQ = 0;           //拉低数据线,准备Reset OneWire Bus;
  43   1        Delay_Xus(125);   //延时510us,Reset One-Wire Bus.
  44   1        Delay_Xus(125);
  45   1        
  46   1        DQ = 1;           //提升数据线;
  47   1        Delay_Xus(15);    //延时35us;
  48   1        
  49   1        while(DQ)         //等待Slave 器件Ack 信号;
  50   1        {
  51   2          NOP();
  52   2          }
  53   1        Delay_Xus(60);    //延时125us; 
  54   1        DQ = 1;           //提升数据线,准备数据传输;
  55   1        }
C51 COMPILER V8.02   ONE_WIRE                                                              01/17/2007 08:38:52 PAGE 2   

  56          /*******************************************************************************
  57          *** 函 数 名: static void OneWire_Rst(void)
  58          *** 功能描述: 
  59          *** 全局变量: No !
  60          *** 输    入: NO !
  61          *** 输    出: NO !
  62          *** 创 建 人:huangtiexiong       日期:2006-11-28
  63          *** 修 改 人:                    日期:2006-11-28
  64          *** 函数说明: 单总线Reset pulse;
  65          /******************************************************************************/
  66          static void OneWire_Rst(void)
  67          {
  68   1        DQ = 0;           //拉低数据线,准备Reset OneWire Bus;
  69   1        Delay_Xus(125);   //延时511us,Reset One-Wire Bus.
  70   1        DQ = 0;
  71   1        Delay_Xus(125);
  72   1        }
  73          /*******************************************************************************
  74          *** 函 数 名: static void OneWire_WriteByte(int8u cmd)
  75          *** 功能描述: 写一个字节;
  76          *** 全局变量: NO !
  77          *** 输    入: cmd:8bit;
  78          *** 输    出: NO !
  79          *** 创 建 人:huangtiexiong       日期:2006-11-28
  80          *** 修 改 人:                    日期:2006-11-28
  81          *** 函数说明: cmd主要有Rom操作指令和E2Ram操作指令两种;
  82          /******************************************************************************/
  83          static void OneWire_WriteByte(int8u cmd)
  84          {
  85   1        int8u i;
  86   1        for(i=0;i<8;i++)
  87   1        {
  88   2          if(cmd & 0x01)    //低位在前;
  89   2            {
  90   3              DQ = 0;       //结束Recovery time;
  91   3              NOP();
  92   3              NOP();
  93   3              NOP();
  94   3              DQ = 1;       //发送数据;
  95   3              }
  96   2          else
  97   2            {
  98   3              DQ = 0;       //结束Rec time;
  99   3              NOP();
 100   3              NOP();
 101   3              NOP();    
 102   3              //DQ = 0;     //发送数据;
 103   3              }
 104   2          Delay_Xus(30);    //等待Slave Device采样;
 105   2          DQ = 1;           //Recovery;
 106   2          NOP();            //Recovery Time Start;
 107   2          cmd >>= 1;
 108   2          }
 109   1        }
 110          /*******************************************************************************
 111          *** 函 数 名: static int8u OneWire_ReadByte(void)
 112          *** 功能描述: 读取一个字节;
 113          *** 全局变量: NO !
 114          *** 输    入: NO !
 115          *** 输    出: 8bit data;
 116          *** 创 建 人:huangtiexiong       日期:2006-11-28
 117          *** 修 改 人:                    日期:2006-11-28
C51 COMPILER V8.02   ONE_WIRE                                                              01/17/2007 08:38:52 PAGE 3   

 118          *** 函数说明: 读之前必须首先写1;
 119          /******************************************************************************/
 120          static int8u OneWire_ReadByte(void)
 121          {
 122   1        int8u i;
 123   1        int8u tmp = 0;
 124   1        DQ = 1;             //准备读;
 125   1        NOP();
 126   1        for(i=0;i<8;i++)
 127   1        {
 128   2          tmp >>= 1;        //低位先发;
 129   2          DQ = 0;           //Read init;
 130   2          _nop_();          //2ms;
 131   2          DQ = 1;           //必须写1,否则读出来的将是不预期的数据;
 132   2          Delay_Xus(2);     //延时9us;
 133   2          _nop_();
 134   2          if(DQ)            //在12us处读取数据;
 135   2            tmp |= 0x80;
 136   2          Delay_Xus(30);    //延时55us;
 137   2          DQ = 1;           //恢复One Wire Bus;
 138   2          NOP();
 139   2          }
 140   1        return tmp; 
 141   1        }
 142          /*******************************************************************************
 143          *** 函 数 名: static void OneWire_Idle(void)
 144          *** 功能描述: 总线空闲模式;
 145          *** 全局变量: NO !
 146          *** 输    入: NO !
 147          *** 输    出: NO !
 148          *** 创 建 人:huangtiexiong       日期:2006-11-28
 149          *** 修 改 人:                    日期:2006-11-28
 150          *** 函数说明: 
 151          /******************************************************************************/
 152          static void OneWire_Idle(void)
 153          {
 154   1        DQ = 1;
 155   1        NOP();
 156   1        }
 157          /*******************************************************************************
 158          *** 函 数 名: extern void DS18B20_Init(void)
 159          *** 功能描述: 器件DS18B20初始化;
 160          *** 全局变量: NO !
 161          *** 输    入: NO !
 162          *** 输    出: NO !
 163          *** 创 建 人:huangtiexiong       日期:2006-11-28
 164          *** 修 改 人:                    日期:2006-11-28
 165          *** 函数说明: 
 166          /******************************************************************************/
 167          extern void DS18B20_Init(void)
 168          {
 169   1        OneWire_Init();
 170   1        }
 171          /*******************************************************************************
 172          *** 函 数 名: extern void DS18B20_RomCmd(int8u romCmd)
 173          *** 功能描述: DS18B20Rom操作命令写;
 174          *** 全局变量: NO !
 175          *** 输    入: romCmd;
 176          *** 输    出: NO !
 177          *** 创 建 人:huangtiexiong       日期:2006-11-28
 178          *** 修 改 人:                    日期:2006-11-28
 179          *** 函数说明: 0x33:Read Rom; 0x55:Match Rom; 0xcc:Skip rom; 0xf0: Search rom;
C51 COMPILER V8.02   ONE_WIRE                                                              01/17/2007 08:38:52 PAGE 4   

 180                        0xec:Alarm Search.
 181          /******************************************************************************/
 182          extern void DS18B20_RomCmd(int8u romCmd)    //仅写了SkipRom例程;
 183          {
 184   1        switch(romCmd)
 185   1        {
 186   2          case 0xcc:      //Skip Rom command;
 187   2            OneWire_WriteByte(0xcc);
 188   2            break;
 189   2          
 190   2          default:
 191   2            break;  
 192   2          }
 193   1        }
 194          /*******************************************************************************
 195          *** 函 数 名: extern void DS18B20_MemCmd(int8u memCmd)
 196          *** 功能描述: DS18B20Memory 操作命令;
 197          *** 全局变量: NO !
 198          *** 输    入: NO !
 199          *** 输    出: NO !
 200          *** 创 建 人:huangtiexiong       日期:2006-11-28
 201          *** 修 改 人:                    日期:2006-11-28
 202          *** 函数说明: 仅写了ConvertT(0x44) 和0xBE命令;
 203                        0x44:Convert T; 0xbe:Read Scratch-pad;
 204          /******************************************************************************/
 205          extern void DS18B20_MemCmd(int8u memCmd)    
 206          {
 207   1        switch(memCmd)
 208   1        {
 209   2          case 0x44:    //Start to Convert temperature;
 210   2            OneWire_WriteByte(0x44);
 211   2            NOP();
 212   2            DS18B20_Busy();
 213   2            Delay_Xms(250);   //延时750ms;
 214   2            Delay_Xms(250);
 215   2            Delay_Xms(250);
 216   2            break;
 217   2          
 218   2          case 0xbe:    //Read scratchpad;
 219   2            OneWire_WriteByte(0xbe);
 220   2            break;
 221   2              
 222   2          default:
 223   2            break;  
 224   2          }
 225   1        }
 226          /*******************************************************************************
 227          *** 函 数 名: extern void DS18B20_ReadDat(int8u len,int8u *buf)
 228          *** 功能描述: 读取DS18B20内部的Scratchpad内容;
 229          *** 全局变量: NO !
 230          *** 输    入: len:将要读取的数据长度;
 231          *** 输    出: buf:数据缓存;
 232          *** 创 建 人:huangtiexiong       日期:2006-11-28
 233          *** 修 改 人:                    日期:2006-11-28
 234          *** 函数说明: 
 235          /******************************************************************************/
 236          extern void DS18B20_ReadDat(int8u len,int8u *buf)
 237          {
 238   1        int8u i;
 239   1        for(i=0;i<len;i++)
 240   1        {
 241   2          buf[i] = OneWire_ReadByte();
C51 COMPILER V8.02   ONE_WIRE                                                              01/17/2007 08:38:52 PAGE 5   

 242   2          }
 243   1        OneWire_Rst();
 244   1        OneWire_Idle(); 
 245   1        }
 246          /*******************************************************************************
 247          *** 函 数 名: extern void DS18B20_Busy(void)
 248          *** 功能描述: 内部模数转换中,忙
 249          *** 全局变量: NO !
 250          *** 输    入: NO !
 251          *** 输    出: NO !
 252          *** 创 建 人:huangtiexiong       日期:2006-11-28
 253          *** 修 改 人:                    日期:2006-11-28
 254          *** 函数说明: 
 255          /******************************************************************************/
 256          extern void DS18B20_Busy(void)
 257          {
 258   1        OneWire_Idle();
 259   1        }
 260          
 261          
 262          /*******************************************************************************
 263          ****                              End Of File
 264          *******************************************************************************/
C51 COMPILER V8.02   ONE_WIRE                                                              01/17/2007 08:38:52 PAGE 6   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION OneWire_Init (BEGIN)
                                           ; SOURCE LINE # 38
                                           ; SOURCE LINE # 39
                                           ; SOURCE LINE # 40
0000 D297              SETB    DQ
                                           ; SOURCE LINE # 41
0002 00                NOP     
0003 00                NOP     
                                           ; SOURCE LINE # 42
0004 C297              CLR     DQ
                                           ; SOURCE LINE # 43
0006 7F7D              MOV     R7,#07DH
0008 120000      E     LCALL   _Delay_Xus
                                           ; SOURCE LINE # 44
000B 7F7D              MOV     R7,#07DH
000D 120000      E     LCALL   _Delay_Xus
                                           ; SOURCE LINE # 46
0010 D297              SETB    DQ
                                           ; SOURCE LINE # 47
0012 7F0F              MOV     R7,#0FH
0014 120000      E     LCALL   _Delay_Xus
0017         ?C0001:
                                           ; SOURCE LINE # 49
0017 309704            JNB     DQ,?C0002

⌨️ 快捷键说明

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