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

📄 one-wire.lst

📁 51单片机项目集
💻 LST
字号:
C51 COMPILER V8.02   ONE_WIRE                                                              11/03/2010 22:45:22 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 TABS(3)

line level    source

   1          
   2          
   3          //#include "Includes.h"       //文件包含
   4          #include       <reg52.h>
   5          #include    <intrins.h>
   6          #include    <string.h>
   7          #include    "One-Wire.h"
   8          
   9          #define int8u unsigned char
  10          
  11          /*************************************************
  12              模块级变量申明                 
  13          *************************************************/
  14          /* void  OneWire_Rst(void);
  15           void    OneWire_Init(void);
  16           void    OneWire_WriteByte(int8u cmd);
  17           int8u   OneWire_ReadByte(void);
  18           void    OneWire_Idle(void);    */
  19          
  20           void Delay_Xus(int8u x)      //x取值1~255;
  21          {
  22   1         while(--x);
  23   1      // int8u i;
  24   1      // x /= 8;
  25   1      // for(i=0;i<x;i++);
  26   1         }
  27          
  28           void Delay_Xms(int8u x)      //x取值1~255;
  29          {
  30   1         int8u i,j;
  31   1         for(i=0;i<x;i++)
  32   1         for(j=0;j<200;j++)
  33   1         {
  34   2            _nop_();
  35   2            _nop_();
  36   2         }
  37   1      }
  38          
  39          /*************************************************
  40              子函数定义                  
  41          *************************************************/
  42          
  43          
  44           void OneWire_Init(void)
  45          {
  46   1         DQ = 1;
  47   1         _nop_();;
  48   1         DQ = 0;                 //拉低数据线,准备Reset OneWire Bus;
  49   1         Delay_Xus(125);      //延时510us,Reset One-Wire Bus.
  50   1         Delay_Xus(125);
  51   1         
  52   1         DQ = 1;                 //提升数据线;
  53   1         Delay_Xus(15);    //延时35us;
  54   1         
  55   1         while(DQ)               //等待Slave 器件Ack 信号;
C51 COMPILER V8.02   ONE_WIRE                                                              11/03/2010 22:45:22 PAGE 2   

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

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

 180   2            default:
 181   2               break;   
 182   2            }
 183   1         }
 184          /*******************************************************************************
 185          *** 函 数 名:  void DS18B20_MemCmd(int8u memCmd)
 186          *** 功能描述: DS18B20Memory 操作命令;
 187          *** 全局变量: NO !
 188          *** 输      入: NO !
 189          *** 输      出: NO !
 190          
 191          *** 函数说明: 仅写了ConvertT(0x44) 和0xBE命令;
 192                               0x44:Convert T; 0xbe:Read Scratch-pad;
 193          /******************************************************************************/
 194           void DS18B20_MemCmd(int8u memCmd)     
 195          {
 196   1         switch(memCmd)
 197   1         {
 198   2            case 0x44:     //Start to Convert temperature;
 199   2               OneWire_WriteByte(0x44);
 200   2               _nop_();;
 201   2               DS18B20_Busy();
 202   2               Delay_Xms(250);      //延时750ms;
 203   2               Delay_Xms(250);
 204   2               Delay_Xms(250);
 205   2               break;
 206   2            
 207   2            case 0xbe:     //Read scratchpad;
 208   2               OneWire_WriteByte(0xbe);
 209   2               break;
 210   2                  
 211   2            default:
 212   2               break;   
 213   2            }
 214   1         }
 215          /*******************************************************************************
 216          *** 函 数 名:  void DS18B20_ReadDat(int8u len,int8u *buf)
 217          *** 功能描述: 读取DS18B20内部的Scratchpad内容;
 218          *** 全局变量: NO !
 219          *** 输      入: len:将要读取的数据长度;
 220          *** 输      出: buf:数据缓存;
 221          *
 222          *** 函数说明: 
 223          /******************************************************************************/
 224           void DS18B20_ReadDat(int8u len,int8u *buf)
 225          {
 226   1         int8u i;
 227   1         for(i=0;i<len;i++)
 228   1         {
 229   2            buf[i] = OneWire_ReadByte();
 230   2            }
 231   1         OneWire_Rst();
 232   1         OneWire_Idle();   
 233   1         }
 234          /*******************************************************************************
 235          *** 函 数 名:  void DS18B20_Busy(void)
 236          *** 功能描述: 内部模数转换中,忙
 237          *** 全局变量: NO !
 238          *** 输      入: NO !
 239          *** 输      出: NO !
 240          
 241          *** 函数说明: 
C51 COMPILER V8.02   ONE_WIRE                                                              11/03/2010 22:45:22 PAGE 5   

 242          /******************************************************************************/
 243           void DS18B20_Busy(void)
 244          {
 245   1         OneWire_Idle();
 246   1         }
 247          
 248          
 249          /*******************************************************************************
 250          ****                              End Of File
 251          *******************************************************************************/


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