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

📄 ds18b20.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  DS18B20                                                                09/21/2005 16:38:00 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN G:\C51PRJ\TMPLED\DS18B20.OBJ
COMPILER INVOKED BY: e:\keil\c51\BIN\C51.EXE G:\C51PRJ\TMPLED\DS18B20.C DB SB OE

stmt level    source

   1          /****************************************************************************/
   2          /*                                                                          */
   3          /*               Copyright (c) 2005, 老树工作室                             */
   4          /*                   All rights reserved.                                   */
   5          /*                                                                          */
   6          /*      http://www.saintone.net      Email:hxm0902@163.com                  */
   7          /*      QQ:112431149                 Tel:010-62966630                       */
   8          /*                                                                          */
   9          /****************************************************************************/
  10          /****************************************************************************/
  11          /* 文件名:ds18b20.c                                                        */
  12          /* 版  本:Version 1.0                                                      */
  13          /* 描  述:在数码管上显示ds18b20测出的温度值                                */
  14          /* 作  者:spot                                                             */
  15          /* 函  数:                                                                 */
  16          /*         delay_18b20                                                      */
  17          /*         ow_reset                                                         */
  18          /*         read_bit                                                         */
  19          /*         write_bit                                                        */
  20          /*         read_byte                                                        */
  21          /*         write_byte                                                       */
  22          /*         get_temperature                                                  */
  23          /*                                                                          */
  24          /* 历史记录:                                                               */
  25          /*  spot          2005-07-15     Creat Inital version. (Version 1.0)        */
  26          /****************************************************************************/
  27          
  28          #include <reg52.h>
  29          #include <absacc.h>
  30          #include <intrins.h>
  31          #include "../includes/types.h"
  32          
  33          #define ERR 0xffff;
  34          
  35          sbit DQ = P0^3;
  36          
  37          /* 函数声明 */
  38          bit ow_reset(void);              /* 初始化DS18B20子程序  */
  39          bit read_bit(void);              /* 从DS18B20读出1位     */
  40          void write_bit(u_char bitval);   /* 向DS18B20写入1位     */
  41          u_char read_byte(void);          /* 从DS18B20读出1个字节 */
  42          void write_byte(u_char val);     /* 向DS18B20写入1个字节 */
  43          u_int get_temperature(void);     /* 读取温度子程序       */
  44          void display_temperature(u_int current_tempreature);/* 在数码管上显示当前温度 */
  45          extern void load_number(u_char number, bit dp);
  46          extern void send_latch_clock(void);
  47          extern void clear_led(void);
  48          /* 声明结束 */
  49          
  50          /* 延时子程序           */
  51          void delay_18b20 (u_int us)
  52          {
  53   1          while (us--);
  54   1      }
  55          
C51 COMPILER V6.12  DS18B20                                                                09/21/2005 16:38:00 PAGE 2   

  56          /* 初始化DS18B20子程序  */
  57          bit ow_reset(void)
  58          {
  59   1          bit presence = 0;
  60   1          DQ = 1;
  61   1          DQ = 0;
  62   1          delay_18b20(80);             /* 保持低电平480μs以上 */
  63   1          DQ = 1;
  64   1          delay_18b20(13);             /* 等待DS18B20响应     */
  65   1          presence = DQ;
  66   1      
  67   1          return presence;
  68   1      }
  69          
  70          /* 从DS18B20读出1位     */
  71          bit read_bit(void)
  72          {
  73   1          DQ = 0;
  74   1          delay_18b20(0);              /* 保持低电平1us以上   */
  75   1          DQ = 1;
  76   1      
  77   1          if(DQ)
  78   1          {
  79   2              return 1;
  80   2          }
  81   1          else
  82   1          {
  83   2              return 0;
  84   2          }
  85   1      }
  86          
  87          /* 向DS18B20写入1位     */
  88          void write_bit(u_char bitval)
  89          {
  90   1          DQ = 0;
  91   1          delay_18b20(0);              /* 主机在大于1us小于15us之内写数据 */
  92   1          if(bitval)
  93   1          {
  94   2              DQ = 1;
  95   2          }
  96   1          delay_18b20(9);             /* DS18B20在15us到60us内采样数据  */
  97   1      
  98   1          DQ = 1;
  99   1      }
 100          
 101          /* 从DS18B20读出1个字节 */
 102          u_char read_byte(void)
 103          {
 104   1          u_char i;
 105   1          u_char value = 0;
 106   1      
 107   1          for (i = 0; i < 8; i++)
 108   1          {
 109   2              if(read_bit())
 110   2              {
 111   3                  value |= (0x01<<i);
 112   3              }
 113   2              delay_18b20(9);         /*  读时序至少60us */
 114   2          }
 115   1          return(value);
 116   1      }
 117          
C51 COMPILER V6.12  DS18B20                                                                09/21/2005 16:38:00 PAGE 3   

 118          /* 向DS18B20写入1个字节 */
 119          void write_byte(u_char val)
 120          {
 121   1          u_char i;
 122   1          u_char temp;
 123   1      
 124   1          for (i = 0; i < 8; i++)      /* 从LSB开始写入,每次写1位 */
 125   1          {
 126   2              temp = val>>i;
 127   2              temp &= 0x01;
 128   2              write_bit(temp);
 129   2          }
 130   1      }
 131          
 132          /* 读取温度子程序       */
 133          u_int get_temperature(void)
 134          {
 135   1          u_char tempture_msb;
 136   1          u_char tempture_lsb;
 137   1          u_int temperature = 0;
 138   1      
 139   1          ow_reset();          /* 发送复位信号     */
 140   1          delay_18b20(20);
 141   1          write_byte(0xcc); 	 /* 跳过ROM          */
 142   1          write_byte(0x44);	 /* 发送转换温度命令 */
 143   1          ow_reset();
 144   1          delay_18b20(14);
 145   1          write_byte(0xcc);

⌨️ 快捷键说明

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