📄 ds18b20.lst
字号:
C51 COMPILER V7.09 DS18B20 10/09/2005 20:45:34 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN E:\C51PRJ\APPNEW\DS18B20.OBJ
COMPILER INVOKED BY: d:\keil\c51\BIN\C51.EXE E:\C51PRJ\APPNEW\DS18B20.C DB SB OE
line 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 sbit DQ = P0^3;
34
35 /* 函数声明 */
36 void delay_18b20 (u_int us); /* 延时子程序 */
37 bit ow_reset(void); /* 初始化DS18B20子程序 */
38 bit read_bit(void); /* 从DS18B20读出1位 */
39 void write_bit(u_char bitval); /* 向DS18B20写入1位 */
40 u_char read_byte(void); /* 从DS18B20读出1个字节 */
41 void write_byte(u_char val); /* 向DS18B20写入1个字节 */
42 u_char get_temperature(void); /* 读取温度子程序 */
43 /* 声明结束 */
44
45 u_int temperature = 0;
46
47
48 /* 延时子程序 */
49 void delay_18b20 (u_int us)
50 {
51 1 while (us--);
52 1 }
53
54 /* 初始化DS18B20子程序 */
55 bit ow_reset(void)
C51 COMPILER V7.09 DS18B20 10/09/2005 20:45:34 PAGE 2
56 {
57 1 bit presence = 0;
58 1 DQ = 1;
59 1 DQ = 0;
60 1 delay_18b20(80); /* 保持低电平480μs以上 */
61 1 DQ = 1;
62 1 delay_18b20(14); /* 等待DS18B20响应 */
63 1 presence = DQ;
64 1
65 1 return presence;
66 1 }
67
68 /* 从DS18B20读出1位 */
69 bit read_bit(void)
70 {
71 1 DQ = 0;
72 1 delay_18b20(0); /* 保持低电平1us以上 */
73 1 DQ = 1;
74 1
75 1 if(DQ)
76 1 {
77 2 return 1;
78 2 }
79 1 else
80 1 {
81 2 return 0;
82 2 }
83 1 }
84
85 /* 向DS18B20写入1位 */
86 void write_bit(u_char bitval)
87 {
88 1 DQ = 0;
89 1 delay_18b20(0); /* 主机在大于1us小于15us之内写数据 */
90 1 if(bitval)
91 1 {
92 2 DQ = 1;
93 2 }
94 1 delay_18b20(10); /* DS18B20在15us到60us内采样数据 */
95 1
96 1 DQ = 1;
97 1 }
98
99 /* 从DS18B20读出1个字节 */
100 u_char read_byte(void)
101 {
102 1 u_char i;
103 1 u_char value = 0;
104 1
105 1 for (i = 0; i < 8; i++)
106 1 {
107 2 if(read_bit())
108 2 {
109 3 value |= (0x01<<i);
110 3 }
111 2 delay_18b20(10); /* 读时序至少60us */
112 2 }
113 1 return(value);
114 1 }
115
116 /* 向DS18B20写入1个字节 */
117 void write_byte(u_char val)
C51 COMPILER V7.09 DS18B20 10/09/2005 20:45:34 PAGE 3
118 {
119 1 u_char i;
120 1 u_char temp;
121 1
122 1 for (i = 0; i < 8; i++) /* 从LSB开始写入,每次写1位 */
123 1 {
124 2 temp = val>>i;
125 2 temp &= 0x01;
126 2 write_bit(temp);
127 2 }
128 1 }
129
130 /* 读取温度子程序 */
131 u_char get_temperature(void)
132 {
133 1 u_char tempture_msb = 0;
134 1 u_char tempture_lsb = 0;
135 1
136 1 temperature = 0;
137 1
138 1 ow_reset(); /* 发送复位信号 */
139 1 delay_18b20(20);
140 1 write_byte(0xcc); /* 跳过ROM */
141 1 write_byte(0x44); /* 发送转换温度命令 */
142 1 ow_reset();
143 1 delay_18b20(14);
144 1 write_byte(0xcc);
145 1 write_byte(0xBE); /* 发送读memory命令 */
146 1
147 1 tempture_lsb =read_byte();
148 1 tempture_msb =read_byte();
149 1
150 1 temperature |= tempture_msb;
151 1 temperature <<= 8;
152 1 temperature |= tempture_lsb;
153 1 temperature = temperature * 0.0625;
154 1
155 1 return (temperature);
156 1 }
157
158
C51 COMPILER V7.09 DS18B20 10/09/2005 20:45:34 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
_delay_18b20 . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
us . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
u_long . . . . . . . . . . . . . . . . TYPEDEF ----- U_LONG ----- 4
u_short. . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
DQ . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0083H 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
u_int. . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
_write_byte. . . . . . . . . . . . . . PUBLIC CODE PROC 0007H -----
val. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0001H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
temp . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
_write_bit . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
bitval . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
read_byte. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
temperature. . . . . . . . . . . . . . PUBLIC DATA U_INT 0000H 2
read_bit . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
get_temperature. . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
tempture_msb . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
tempture_lsb . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
ow_reset . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
presence . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
u_char . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 234 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -