📄 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 + -