📄 ds18b20.lst
字号:
C51 COMPILER V7.50 DS18B20 11/12/2008 00:42:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN ds18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\Bin\c51.exe ds18b20.c DB SB OE ROM(LARGE) LARGE OT(6,SPEED) WL(2) RB(0)
line level source
1 #include"reg51.h"
2 #define uchar unsigned char
3 #define uint unsigned int
4 uchar tplsb,tpmsb;
5
6 sbit DQ=P1^2;
7 //延时tms
8 void delay(uint t)
9 {
10 1 uint i;
11 1 while(t--)
12 1 {
13 2 for(i=0;i<125;i++)
14 2 {}
15 2 }
16 1 }
17 //温度转换为十进制
18 uint TempTrans(uchar ht,uchar lt)
19 {
20 1 uint i=0,k=0;
21 1 CY=0;
22 1 i=ht;
23 1 i=i<<8;
24 1 k=lt&0xf0;
25 1 i=i|k;
26 1 return(i);
27 1 }
28 //产生复位脉冲
29 void TxReset(void)
30 {
31 1 uint i;
32 1 DQ=0;
33 1 i=100;
34 1 while(i>0)i--;
35 1 DQ=1;
36 1 i=4;
37 1 while(i>0)i--;
38 1 }
39 //等待应答脉冲
40 void RxWait(void)
41 {
42 1 uint i;
43 1 while(DQ);
44 1 while(~DQ);
45 1 i=4;
46 1 while(i>0)i--;
47 1 }
48 //读取数据的一位
49 bit RdBit(void)
50 {
51 1 uint i;
52 1 bit b;
53 1 DQ=0;
54 1 i++;
55 1 DQ=1;
C51 COMPILER V7.50 DS18B20 11/12/2008 00:42:55 PAGE 2
56 1 i++;
57 1 i++;
58 1 b=DQ;
59 1 i=8;
60 1 while(i>0)i--;
61 1 return(b);
62 1 }
63 //读数据一个字节
64 uchar RdByte(void)
65 {
66 1 uchar i,j,b;
67 1 b=0;
68 1 for(i=1;i<=8;i++)
69 1 {
70 2 j=RdBit();
71 2 b=(j<<7)|(b>>1);
72 2 }
73 1
74 1 return(b);
75 1 }
76 //写数据一个字节
77 void WrByte(uchar b)
78 {
79 1 uint i;
80 1 uchar j;
81 1 bit btmp;
82 1 for(j=1;j<=8;j++)
83 1 {
84 2 btmp=b&0x01;
85 2 b=b>>1;
86 2 if(btmp)
87 2 {
88 3 DQ=0;
89 3 i++;i++;
90 3 DQ=1;
91 3 i=8;
92 3 while(i>0)i--;
93 3 }
94 2 else
95 2 {
96 3 DQ=0;
97 3 i=8;
98 3 while(i>0)i--;
99 3 DQ=1;
100 3 i++;
101 3 i++;
102 3 }
103 2 }
104 1 }
105 //启动温度转换
106 void convert(void)
107 {
108 1 TxReset();
109 1 RxWait();
110 1 delay(1);
111 1 WrByte(0xcc);
112 1 WrByte(0x44);
113 1 }
114 //读取温度值
115 void RdTemp(void)
116 {
117 1 TxReset();
C51 COMPILER V7.50 DS18B20 11/12/2008 00:42:55 PAGE 3
118 1 RxWait();
119 1 delay(1);
120 1 WrByte(0xcc);
121 1 WrByte(0xbe);
122 1 tplsb=RdByte();
123 1 tpmsb=RdByte();
124 1 // TH=RdByte();
125 1 // TL=RdByte();
126 1 }
127 /**void WrTemp(uchar ht,uchar lt)
128 {
129 TxReset();
130 RxWait();
131 delay(1);
132 WrByte(0xcc);
133 WrByte(0x4e);
134 WrByte(ht);
135 WrByte(lt);
136 WrByte(0x7f);
137 }
138 /*void alarm(void)
139 {
140 TxReset();
141 RxWait();
142 delay(1);
143 WrByte(0xcc);
144 WrByte(0xbe);
145 }*/
146 uchar ds18b20_read(void)
147 {
148 1 uchar temp=0;
149 1 //WrTemp(20,10);
150 1 delay(1);
151 1 convert();
152 1 delay(1000);
153 1 RdTemp();
154 1 temp=TempTrans(tplsb,tpmsb);
155 1 return(temp);
156 1 }
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
C51 COMPILER V7.50 DS18B20 11/12/2008 00:42:55 PAGE 4
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
C51 COMPILER V7.50 DS18B20 11/12/2008 00:42:55 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
_TempTrans . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ht . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
lt . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0001H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0004H 2
k. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0002H 2
ds18b20_read . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
temp . . . . . . . . . . . . . . . . AUTO XDATA U_CHAR 0000H 1
convert. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
DQ . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0092H 1
CY . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D7H 1
tplsb. . . . . . . . . . . . . . . . . PUBLIC XDATA U_CHAR 0000H 1
tpmsb. . . . . . . . . . . . . . . . . PUBLIC XDATA U_CHAR 0001H 1
_WrByte. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
b. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0001H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0002H 2
j. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
btmp . . . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
RdByte . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
j. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
b. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
RdTemp . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
TxReset. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
RdBit. . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
b. . . . . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
RxWait . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
_delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
t. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0004H 2
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 358 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 1
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -