📄 ds18b20.lst
字号:
C51 COMPILER V8.02 DS18B20 04/26/2008 21:37:29 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN ds18b20.OBJ
COMPILER INVOKED BY: D:\Keil1\C51\BIN\C51.EXE ds18b20.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 #include "ds18b20.h"
4 #include "lcd.h"
5 #include <REGX51.H>
6
7
8
9
10 #define OWB P3_0
11
12
13
14 BYTE idata owb_nCntDevice = 0;
15 BYTE idata owb_CacheDeviceIndex = 0xff;
16 OWBROM idata owb_CacheDeviceROM;
17 BYTE idata owb_SearchDeviceIndex = 0xff;
18 OWBROM idata owb_SearchDeviceROM;
19
20
21 //////////////////////////////////////////////////////////////////
22 //
23 // ds18b20 functions
24
25
26 void owbDeviceSave(BIT withSearchDevice)
27 {
28 1 BYTE i;
29 1
30 1 owbInit();
31 1 owbWriteByte( 0x55 );
32 1 for (i=0;i<8;i++)
33 1 {
34 2 if (withSearchDevice)
35 2 owbWriteByte( owb_SearchDeviceROM.b[i] );
36 2 else
37 2 owbWriteByte( owb_CacheDeviceROM.b[i] );
38 2 }
39 1 owbWriteByte( 0x48 );
40 1 }
41
42
43 void owbReadMeasure(TEMPE * pT, BIT withSearchDevice)
44 {
45 1 BYTE i;
46 1
47 1 owbInit();
48 1 owbWriteByte( 0x55 );
49 1 for (i=0;i<8;i++)
50 1 {
51 2 if (withSearchDevice)
52 2 owbWriteByte( owb_SearchDeviceROM.b[i] );
53 2 else
54 2 owbWriteByte( owb_CacheDeviceROM.b[i] );
55 2 }
C51 COMPILER V8.02 DS18B20 04/26/2008 21:37:29 PAGE 2
56 1 owbWriteByte( 0xbe );
57 1 pT->tl = owbReadByte();
58 1 pT->th = owbReadByte();
59 1
60 1 owbInit();
61 1 owbWriteByte( 0x55 );
62 1 for (i=0;i<8;i++)
63 1 {
64 2 if (withSearchDevice)
65 2 owbWriteByte( owb_SearchDeviceROM.b[i] );
66 2 else
67 2 owbWriteByte( owb_CacheDeviceROM.b[i] );
68 2 }
69 1 owbWriteByte( 0x44 );
70 1 }
71
72
73 void owbReadAlarmValue(BYTE * pTH, BYTE * pTL, BIT withSearchDevice)
74 {
75 1 BYTE i;
76 1
77 1 owbInit();
78 1 owbWriteByte( 0x55 );
79 1 for (i=0;i<8;i++)
80 1 {
81 2 if (withSearchDevice)
82 2 owbWriteByte( owb_SearchDeviceROM.b[i] );
83 2 else
84 2 owbWriteByte( owb_CacheDeviceROM.b[i] );
85 2 }
86 1 owbWriteByte( 0xbe );
87 1 owbReadByte();
88 1 owbReadByte();
89 1 pTH[0] = owbReadByte();
90 1 pTL[0] = owbReadByte();
91 1 }
92
93
94 void owbWriteConfig(BYTE th, BYTE tl, BYTE config, BIT withSearchDevice)
95 {
96 1 BYTE i;
97 1
98 1 owbInit();
99 1 owbWriteByte( 0x55 );
100 1 for (i=0;i<8;i++)
101 1 {
102 2 if (withSearchDevice)
103 2 owbWriteByte( owb_SearchDeviceROM.b[i] );
104 2 else
105 2 owbWriteByte( owb_CacheDeviceROM.b[i] );
106 2 }
107 1 owbWriteByte( 0x4E );
108 1 owbWriteByte( th );
109 1 owbWriteByte( tl );
110 1 owbWriteByte( config );
111 1
112 1 owbDeviceSave(withSearchDevice);
113 1 }
114
115
116 void owbDeviceInit(BIT withSearchDevice)
117 {
C51 COMPILER V8.02 DS18B20 04/26/2008 21:37:29 PAGE 3
118 1 BYTE i,th,tl;
119 1
120 1 //load config
121 1 owbInit();
122 1 owbWriteByte( 0x55 );
123 1 for (i=0;i<8;i++)
124 1 {
125 2 if (withSearchDevice)
126 2 owbWriteByte( owb_SearchDeviceROM.b[i] );
127 2 else
128 2 owbWriteByte( owb_CacheDeviceROM.b[i] );
129 2 }
130 1 owbWriteByte( 0xB8 );
131 1
132 1 owbReadAlarmValue( &th, &tl, withSearchDevice );
133 1 owbWriteConfig( th, tl, OWB_DEFAULTCONFIG, withSearchDevice );
134 1 }
135
136
137
138 //////////////////////////////////////////////////////////////////
139 // for debug only
140 /*
141 void owbDebugMain(void)
142 {
143 }
144 */
145
146
147 ////////////////////////////////////////////////////////////
148 // 1-wire 位操作
149
150 BIT owbInit(void)
151 {
152 1 BYTE save = ACC;
153 1 BIT rt;
154 1
155 1 // P3 = 0x00; //for debug only (supply power)
156 1 // P3_2 = 1; //for debug only (supply power)
157 1
158 1 // write '0'
159 1 ACC = 250;
160 1 do{
161 2 OWB = 0;
162 2 ACC--;
163 2 }while(ACC);
164 1 // write '1'
165 1 ACC = 10;
166 1 do{
167 2 OWB = 1;
168 2 ACC--;
169 2 }while(ACC);
170 1 rt = ~OWB;
171 1 ACC = 250;
172 1 do{
173 2 OWB = 1;
174 2 ACC--;
175 2 }while(ACC);
176 1
177 1
178 1 ACC = save;
179 1
C51 COMPILER V8.02 DS18B20 04/26/2008 21:37:29 PAGE 4
180 1 return rt;
181 1 }
182
183 BIT owbReadBit(void)
184 {
185 1 BIT rt;
186 1 BYTE save;
187 1
188 1 OWB = 0; OWB = 0;
189 1 OWB = 1; OWB = 1; OWB = 1; OWB = 1;
190 1 OWB = 1; OWB = 1; OWB = 1; OWB = 1;
191 1 rt = OWB;
192 1
193 1 save = ACC;
194 1 ACC = 45;
195 1 do{
196 2 OWB = 1;
197 2 ACC--;
198 2 }while(ACC);
199 1 ACC = save;
200 1
201 1 return rt;
202 1 }
203
204 void owbWriteBit(BIT b)
205 {
206 1 BYTE save = ACC;
207 1 ACC = 30;
208 1
209 1 if (b)
210 1 {
211 2 // write '1'
212 2 OWB = 0; OWB = 0;
213 2 do{
214 3 OWB = 1;
215 3 ACC--;
216 3 }while(ACC);
217 2 }
218 1 else
219 1 {
220 2 // write '0'
221 2 do{
222 3 OWB = 0;
223 3 ACC--;
224 3 }while(ACC);
225 2 }
226 1 OWB = 1; OWB = 1; OWB = 1; OWB = 1;
227 1 OWB = 1; OWB = 1; OWB = 1; OWB = 1;
228 1
229 1 ACC = save;
230 1 }
231
232
233 //////////////////////////////////////////////////////////////////
234 // 字节操作
235
236 void owbWriteByte(BYTE byte)
237 {
238 1 BYTE i;
239 1 EA = 0;
240 1 for (i=0;i<8;i++)
241 1 {
C51 COMPILER V8.02 DS18B20 04/26/2008 21:37:29 PAGE 5
242 2 owbWriteBit(byte & 0x01);
243 2 byte>>=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -