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

📄 one-wire.lst

📁 操作DS18B20器件并且在1602上显示
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.05a   ONE_WIRE                                                             10/07/2008 19:46:55 PAGE 1   


C51 COMPILER V8.05a, 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

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.05a   ONE_WIRE                                                             10/07/2008 19:46:55 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.05a   ONE_WIRE                                                             10/07/2008 19:46:55 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.05a   ONE_WIRE                                                             10/07/2008 19:46:55 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                      }

⌨️ 快捷键说明

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