📄 18b20shu.lst
字号:
174 void DELAY60US()
175 { unsigned char i;
176 1 for(i=0;i<6;i++);
177 1 }
C51 COMPILER V8.02 18B20SHU 05/13/2009 13:23:37 PAGE 4
178
179 void DELAY80US()
180 { unsigned char i,j;
181 1 for(i=0;i<8;i++)
182 1 for(j=0;j<1;j++);
183 1 }
184
185 void DELAY300US()
186 { unsigned char i,j;
187 1 for(i=0;i<33;i++)
188 1 for(j=0;j<1;j++);
189 1 }
190
191 void DELAY()
192 { unsigned char i,j;
193 1 for(i=0;i<255;i++)
194 1 for(j=0;j<250;j++);
195 1 }
196 //【附录二】由C语言编制的I2C通讯子函数
197 // 以上的内容如果在主函数的前面已经包含、声明时,可以省略。
198 //#################################################################################
199 void STA(void) //启动信号子函数
200 { SDA=1;
201 1 SCL=1;
202 1 DELAY5US
203 1 SDA=0;
204 1 DELAY5US
205 1 SCL=0;
206 1 }
207 //#################################################################################
208 void STOP(void) //停止信号子函数
209 { SDA=0;
210 1 SCL=1;
211 1 DELAY5US
212 1 SDA=1;
213 1 DELAY5US
214 1 }
215 //#################################################################################
216 void MACK(void) //应答信号子函数
217 { SDA=0;
218 1 SCL=1;
219 1 DELAY5US
220 1 SCL=0;
221 1 SDA=1;
222 1 }
223 //#################################################################################
224 void NMACK(void) //非应答信号子函数
225
226 { SDA=1;
227 1 SCL=1;
228 1 DELAY5US
229 1 SCL=0;
230 1 SDA=0;
231 1 }
232 //#################################################################################
233 void CACK(void) //应答检测子程序
234 {
235 1 SDA=1;
236 1 SCL=1;
237 1 DELAY5US
238 1 F0=0;
239 1 if(SDA==1)
C51 COMPILER V8.02 18B20SHU 05/13/2009 13:23:37 PAGE 5
240 1 F0=1;
241 1 SCL=0;
242 1 }
243 //#################################################################################
244 // 发送一字节子数据程序 WRBYT
245 //#################################################################################
246 void WRBYT(unsigned char *p)
247 { unsigned char i=8,temp;
248 1 temp=*p;
249 1 while(i--)
250 1 { if((temp&0x80)==0x80)
251 2 { SDA=1;
252 3 SCL=1;
253 3 DELAY5US
254 3 SCL=0;
255 3 }
256 2 else
257 2 { SDA=0;
258 3 SCL=1;
259 3 DELAY5US
260 3 SCL=0;
261 3 }
262 2 temp=temp<<1;
263 2 }
264 1 }
265 //#################################################################################
266 // 接收一字节子数据程序 RDBYT
267 //#################################################################################
268 void RDBYT(unsigned char *p)
269 { unsigned char i=8,temp=0;
270 1 while(i--)
271 1 { SDA=1;
272 2 SCL=1;
273 2 DELAY5US
274 2 temp=temp<<1;
275 2 if(SDA==1)
276 2 temp=temp|0x01;
277 2 else
278 2 temp=temp&0xfe;
279 2 SCL=0;
280 2 }
281 1 *p=temp;
282 1 }
283 //#################################################################################
284 // 发送N个字节子数据程序 WRNBYT
285 //#################################################################################
286 void WRNBYT(unsigned char *R3,unsigned char *R2,unsigned char *R0,unsigned char n)
287 {
288 1 loop: STA();
289 1 WRBYT(R3);
290 1 CACK();
291 1 if(F0)
292 1 goto loop;
293 1 WRBYT(R2);
294 1 CACK();
295 1 if(F0)
296 1 goto loop;
297 1 while(n--)
298 1 { WRBYT(R0);
299 2 CACK();
300 2 if(F0)
301 2 goto loop;
C51 COMPILER V8.02 18B20SHU 05/13/2009 13:23:37 PAGE 6
302 2 R0++;
303 2 }
304 1 STOP();
305 1 }
306 //#################################################################################
307 // 接收N个字节子数据程序 RDNBYT
308 //#################################################################################
309 //【子函数入口参数说明】:
310 //R3是外部器件地址写,R4是外部器件地址读,R2是从器件内部子地址,R0是目标数据块首地址,//n是要读的字节数
311 void RDNBYT(unsigned char *R3,unsigned char *R4,unsigned char *R2,unsigned char *R0,unsigned char n)
312 {
313 1 loop1: STA();
314 1 WRBYT(R3);
315 1 CACK();
316 1 if(F0)
317 1 goto loop1;
318 1 WRBYT(R2);
319 1 CACK();
320 1 if(F0)
321 1 goto loop1;
322 1 STA();
323 1 WRBYT(R4);
324 1 CACK();
325 1 if(F0)
326 1 goto loop1;
327 1 while(n--)
328 1 { RDBYT(R0);
329 2 if(n>0)
330 2 {
331 3 MACK();
332 3 R0++;
333 3 }
334 2 else NMACK();
335 2 }
336 1 STOP();
337 1 }
338 //#################################################################################
339
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 927 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 66
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -