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

📄 ds18b20.lst

📁 利用DS18B20测量出温度
💻 LST
字号:
C51 COMPILER V6.12  DS18B20                                                                07/24/2007 18:04:44 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN E:\技术部\陈映宇\单片机~1\作品程序\温度计\DS18B20.OBJ
COMPILER INVOKED BY: C:\COMP51\BIN\C51.EXE E:\技术部\陈映宇\单片机~1\作品程序\温度计\DS18B20.C DB SB OE

stmt level    source

   1          
   2          /**************************************DS18B20驱动程序************************************************
   3          *单总线通信协义:
   4          	*复位脉冲:480us低电平.
   5          	 复位脉冲发出后经70us检测存在脉冲,DQ=0器件存在,DQ=1不存在
   6          	*写时间隙.写时间隙不小于60us.
   7          		*写0:将DQ拉低60us.
   8          		*写1:将DQ拉低后15us内释放.
   9          	*读时间隙.读时间隙不小于60us.
  10          		将DQ拉低后15us内释放,在15-50us内若DQ=0则读0,DQ=1则读1.
  11          
  12          *通过单总线端口仿问DS18B20的过程如下:
  13          	*初始化
  14          	*ROM操作命令
  15          	*存储器操作命令
  16          	*数据处理
  17          
  18          *DS18B20引脚:1.GND	2.DQ	3.VDD
  19          
  20          *ROM操作命令:
  21          	*读出ROM,代码33H,用于读出DS18B20的序列号,取64位激光ROM代码.
  22          	*匹配ROM,代码55H,用于辨识(或选中)某一特定的DS18B20进行操作.
  23          	*搜索ROM,代码F0H,用于确定总线上的节点数以及所有节点的序列号.
  24          	*跳过ROM,代码CCH,命令发出后系统将对所有DS18B20进行操作.
  25          	*报警搜索,代码ECH,主要用于鉴别和定位系统中超出程序设定的报警温度
  26          	 界限的节点.
  27          
  28          *DS18B20的存储器资源如下表 (为了便于理解,存储器A、B、C是我自己定义的名字):
  29          	ROM(8个字节)  A0	A1  A2  A3  A4  A5  A6  A7  --
  30             RAM(9个字节)  B0	B1  B2  B3  B4  B5  B6  B7  B8
  31          	EEPROM(3个字节) C0	C1  C2   --  --  --  --  --  --
  32          		A0既是64位ID码的一部分,也是64位ID码的的CRC校验值,A1~A6是ID码其中的48位,A7是器件码(28H)。
  33          	B0温度低8位值、B1是温度高8位值,B2、B3是温度报警值,B4是温度转换精度值,B5、B6、B7是系统保留用,
  34          	就相当于运算内存,B8是B0~B7的校验码
  35          
  36          *存储器操作命令:
  37          	-------------------------------------------------------------------------------
  38          	代码  								指令说明
  39          	-------------------------------------------------------------------------------
  40          	44  	温度转换指令,并把转换后的数据存放在RAM的B0、B1的两个字节里
  41          	BE  	读取指令,器件收到这个指令后把B0、B1两个字节的数据传送给主机
  42          	4E  	改写RAM的B2、B3、B4的数据,主机发出这个指令后跟着再分别发送相应的数据
  43          	48  	器件收到这个指令后就将B2、B3、B4的数据写到EEPROM
  44          	B8  	器件收到这个指令后就把EEPROM的高H、低L温度报警值写到进B2、B3
  45          	B4  	器件收到这个指令后就返回0或者1给主机,0为寄生电源,1为外部电源
  46          	-------------------------------------------------------------------------------
  47          
  48          
  49          ******************************************************************************************************/
  50          #include<reg52.h>
  51          #include"DS18B20.h"
  52          
  53          #define uchar unsigned char
  54          
  55          sbit	DQ= P1^5;
C51 COMPILER V6.12  DS18B20                                                                07/24/2007 18:04:44 PAGE 2   

  56          //sbit	LED=P1^0;
  57          /**************复位函数*****************
  58          *功能:完成单总线的复位操作
  59          *返回值:0-器件存在,1-器件不存在
  60          ***************************************/
  61          bit	ow_reset(void)
  62          {	uchar t;
  63   1      	bit	ea=EA;
  64   1      	bit	presence;
  65   1      	EA=0;
  66   1      	DQ=0;
  67   1      	for(t=240;t>0;t--);		//延时480us
  68   1      	DQ=1;
  69   1      	for(t=35;t>0;t--);		//延时70us
  70   1      	presence=DQ;
  71   1      	for(t=30;t>0;t--);		//延时60us
  72   1      	EA=ea;
  73   1      	return presence;
  74   1      }
  75          /**************位写入函数**************
  76          *功能:向单总线写入1位值
  77          **************************************/
  78          void	write_bit(bit	bitval)
  79          {	uchar t;
  80   1      	bit	ea=EA;
  81   1      	EA=0;
  82   1      	DQ=0;
  83   1      	DQ=bitval;
  84   1      	for(t=30;t>0;t--);		//延时60us
  85   1      	DQ=1;
  86   1      	EA=ea;
  87   1      }
  88          /**************字节写入函数***********
  89          *功能:向单总线写入一个字节值.先写低位
  90          *************************************/
  91          void	write_byte(uchar	val)
  92          {
  93   1      	uchar	i;
  94   1      	for(i=8;i>0;i--)
  95   1      	{
  96   2      		write_bit(val&0x01);
  97   2      		val>>=1;
  98   2      	}
  99   1      }
 100          /***********位读取函数**************
 101          *功能:从单总线上读取一位信号
 102          ***********************************/
 103          bit	read_bit(void)
 104          {
 105   1      	uchar t;
 106   1      	bit 	temp;
 107   1      	bit		ea=EA;
 108   1      	EA=0;
 109   1      	DQ=0;
 110   1      	DQ=1;
 111   1      	for(t=8;t>0;t--);		//延时16us
 112   1      	temp=DQ;
 113   1      	for(t=22;t>0;t--);
 114   1      	EA=ea;
 115   1      	return temp;
 116   1      }
 117          /***********字节读取函数***********
C51 COMPILER V6.12  DS18B20                                                                07/24/2007 18:04:44 PAGE 3   

 118          *功能:从单总线上读取一字节.先读低位
 119          **********************************/
 120          uchar	read_byte(void)
 121          {
 122   1      	uchar i,value=0;
 123   1      	for(i=8;i>0;i--)
 124   1      	{
 125   2      		value=value>>1;
 126   2      		if(read_bit())	value|=0x80;
 127   2      	}
 128   1      	return value;
 129   1      }
 130          
 131          /**********启动温度转换函数***********/
 132          void start_temper(void)
 133          {
 134   1      	if(ow_reset())return;
 135   1      	write_byte(0xcc);		//跳过ROM
 136   1      	write_byte(0x44);		//启动温度转换,默认的12位转化,最大转化时间750ms
 137   1      }
 138          
 139          /**********读温度函数*************/
 140          unsigned read_temper(void)
 141          {
 142   1      	uchar get[2],i;
 143   1      	if(ow_reset())return 0x0000;
 144   1      	write_byte(0xcc);		//跳过ROM
 145   1      	write_byte(0xbe);		//读暂存器
 146   1      	for(i=0;i<2;i++)
 147   1      		get[i]=read_byte();
 148   1      	return (get[1]<<8|get[0]);
 149   1      }
 150          
C51 COMPILER V6.12  DS18B20                                                                07/24/2007 18:04:44 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
T0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B4H  1
AC . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D6H  1
T1 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B5H  1
T2 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0090H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
read_temper. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  get. . . . . . . . . . . . . . . . .  AUTO     DATA   ARRAY    0000H  2
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0004H  1
DQ . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0095H  1
EXF2 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CEH  1
RD . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B7H  1
ES . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ACH  1
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
RI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0098H  1
INT0 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B2H  1
CY . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D7H  1
TI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0099H  1
INT1 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B3H  1
start_temper . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
PS . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BCH  1
T2EX . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0091H  1
_write_byte. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  val. . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
OV . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D2H  1
C_T2 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00C9H  1
WR . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B6H  1
RCLK . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CDH  1
TCLK . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CCH  1
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
read_byte. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  value. . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
IE0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0089H  1
read_bit . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  t. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  temp . . . . . . . . . . . . . . . .  AUTO     DATA   BIT      0000H  1
  ea . . . . . . . . . . . . . . . . .  AUTO     DATA   BIT      0001H  1
IE1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008BH  1
CP_RL2 . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00C8H  1
ET0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A9H  1
ET1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ABH  1
TF0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008DH  1
ET2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ADH  1
TF1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008FH  1
TF2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CFH  1
RB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009AH  1
EX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A8H  1
IT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0088H  1
TB8. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009BH  1
EX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AAH  1
IT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008AH  1
write_bit. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
C51 COMPILER V6.12  DS18B20                                                                07/24/2007 18:04:44 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


  bitval . . . . . . . . . . . . . . .  AUTO     DATA   BIT      0000H  1
  t. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  ea . . . . . . . . . . . . . . . . .  AUTO     DATA   BIT      0001H  1
P. . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D0H  1
SM0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009FH  1
SM1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009EH  1
SM2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009DH  1
PT0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B9H  1
PT1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BBH  1
RS0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D3H  1
PT2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BDH  1
TR0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008CH  1
RS1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D4H  1
TR1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008EH  1
TR2. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CAH  1
PX0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B8H  1
PX1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00BAH  1
EXEN2. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00CBH  1
REN. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      009CH  1
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
ow_reset . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  t. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  ea . . . . . . . . . . . . . . . . .  AUTO     DATA   BIT      0000H  1
  presence . . . . . . . . . . . . . .  AUTO     DATA   BIT      0001H  1
RXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B0H  1
TXD. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B1H  1
F0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D5H  1
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    182    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       6
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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