📄 ds18b20n.lst
字号:
C51 COMPILER V3.20, SN-50203013 DS18B20N 07/30/05 12:29:23 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE DS18B20N
OBJECT MODULE PLACED IN E:\C51PRJ\DS18B20\DS18B20N.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\C51PRJ\DS18B20\DS18B20N.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-06-20 Creat Inital version. (Version 1.0) */
26 /****************************************************************************/
27
28 #include <reg52.h>
29 #include <absacc.h>
30 #include <intrins.h>
31
32 #define ERR 0xffff;
33
34 typedef unsigned char u_char;
35 typedef unsigned int u_int;
36
37 sbit DQ = P0^3;
38
39 /* 函数声明 */
40 bit ow_reset(void); /* 初始化DS18B20子程序 */
41 bit read_bit(void); /* 从DS18B20读出1位 */
42 void write_bit(u_char bitval); /* 向DS18B20写入1位 */
43 u_char read_byte(void); /* 从DS18B20读出1个字节 */
44 void write_byte(u_char val); /* 向DS18B20写入1个字节 */
45 u_int get_temperature(void); /* 读取温度子程序 */
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 V3.20, SN-50203013 DS18B20N 07/30/05 12:29:23 PAGE 2
56 {
57 1 bit presence = 0;
58 1 DQ = 1;
59 1 delay_18b20(8); /*add 20050730*/
60 1 DQ = 0;
61 1 delay_18b20(80); /* 保持低电平480μs以上 */
62 1 DQ = 1;
63 1 delay_18b20(14); /* 等待DS18B20响应 */
64 1
65 1 presence = DQ;
66 1 delay_18b20(8); /*add 20050730*/
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(10); /* 读时序至少60us */
114 2 }
115 1 return(value);
116 1 }
117
C51 COMPILER V3.20, SN-50203013 DS18B20N 07/30/05 12:29:23 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;
138 1 if(ow_reset()) /* 发送复位信号 */
139 1 {
140 2 return ERR;
141 2 }
142 1 else
143 1 {
144 2 write_byte(0xcc); /* 跳过ROM */
145 2 write_byte(0x44); /* 发送转换温度命令 */
146 2
147 2 ow_reset();
148 2 write_byte(0xcc);
149 2 write_byte(0xBE); /* 发送读memory命令 */
150 2 tempture_lsb=read_byte();
151 2 tempture_msb=read_byte();
152 2 ow_reset();
153 2 temperature=(tempture_msb << 8) | tempture_lsb;
154 2
155 2 return temperature;
156 2 }
157 1 }
158
159 main()
160 {
161 1 u_int temperature = 0;
162 1 while(1)
163 1 {
164 2 temperature = get_temperature();
165 2 delay_18b20(10000);
166 2 }
167 1 }
C51 COMPILER V3.20, SN-50203013 DS18B20N 07/30/05 12:29:23 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
_delay_18b20 . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
us . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
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
DQ . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0083H 1
T2IE . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CDH 1
RD . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
ES . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1
RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1
INT0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B2H 1
CY . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D7H 1
BGEN . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CBH 1
TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1
INT1 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B3H 1
T2IP . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CEH 1
u_int. . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
PS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BCH 1
T2EX . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1
_write_byte. . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
val. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
temp . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
OV . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D2H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
temperature. . . . . . . . . . . . . AUTO DATA U_INT 0000H 2
C_T2 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00C9H 1
WR . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B6H 1
_write_bit . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
bitval . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
read_byte. . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
IE0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0089H 1
read_bit . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
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
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
C51 COMPILER V3.20, SN-50203013 DS18B20N 07/30/05 12:29:23 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
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
get_temperature. . . . . . . . . . . . PUBLIC CODE PROC ----- -----
tempture_msb . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
tempture_lsb . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
temperature. . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
TR2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CAH 1
PX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B8H 1
PX1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BAH 1
REN. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009CH 1
ow_reset . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
presence . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
RXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B0H 1
TXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B1H 1
T2RSE. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CCH 1
u_char . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
F0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D5H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 240 ----
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 + -