📄 acus.lst
字号:
234 1 uchar i;
235 1 for (i=0;i<8;i++)
236 1 {
237 2 dq = 0;
238 2 Delay10us(1); //delay 13 uS //1
239 2 dq=wr&0x01;
240 2 wr >>= 1;
241 2 Delay10us(5); //delay 50 uS //5
C51 COMPILER V7.01 ACUS 11/24/2004 13:33:22 PAGE 5
242 2 dq=1;
243 2
244 2 }
245 1 }
246 /************************************************************
247 *Function:读18B20的一个字节
248 *parameter:
249 *Return:
250 *Modify:
251 *************************************************************/
252 uchar ReadByte (void) //读取单字节
253 {
254 1 uchar i,u=0;
255 1 for(i=0;i<8;i++)
256 1 { u >>= 1;
257 2 dq = 0;
258 2 _nop_();_nop_();_nop_(); //delay 1 uS //1
259 2 dq = 1;
260 2 NOP;NOP; //delay 5 uS //1
261 2 if(dq==0)
262 2 u=u&0x7f;
263 2
264 2 else
265 2 u |= 0x80;
266 2 //os_wait(K_TMO,1,0);
267 2 Delay10us(4);
268 2 dq = 1;
269 2 }
270 1 return(u);
271 1 }
272 /************************************************************
273 *Function:读18B20
274 *parameter:
275 *Return:
276 *Modify:
277 *************************************************************/
278 void read_bytes (uchar j)
279 {
280 1 uchar i;
281 1 for(i=0;i<j;i++)
282 1 {
283 2 *p = ReadByte();
284 2 p++;
285 2 }
286 1 }
287 /************************************************************
288 *Function:CRC校验
289 *parameter:
290 *Return:
291 *Modify:
292 *************************************************************/
293 uchar CRC (uchar j)
294 {
295 1 uchar i,crc_data=0;
296 1 for(i=0;i<j;i++) //查表校验
297 1 { crc_data = CrcTable[crc_data^temp_buff[i]];watchdog();}
298 1 return (crc_data);
299 1 }
300
301 /************************************************************
302 *Function:内部配置
303 *parameter:
C51 COMPILER V7.01 ACUS 11/24/2004 13:33:22 PAGE 6
304 *Return:
305 *Modify:
306 *************************************************************/
307 void Config18b20 (void) //重新配置报警限定值和分辨率
308 { if(Init18b20()!=0)
309 1 {watchdog();
310 2 WriteByte(0xcc); //skip rom
311 2 WriteByte(0x4e); //write scratchpad
312 2 WriteByte(0x19); //上限
313 2 WriteByte(0x1a); //下限
314 2 WriteByte(0x7f); //set 11 bit (0.125)
315 2 os_wait(K_TMO,2,0);
316 2 watchdog();
317 2 }
318 1 if(Init18b20()!=0);
319 1 {WriteByte(0xcc); //skip rom
320 2 WriteByte(0x48); //保存设定值
321 2 os_wait(K_TMO,2,0);
322 2 watchdog();
323 2 }
324 1 if(Init18b20()!=0);
325 1 {
326 2 WriteByte(0xcc); //skip rom
327 2 WriteByte(0xb8); //回调设定值
328 2 os_wait(K_TMO,2,0);
329 2 watchdog();
330 2 }
331 1 }
332 /************************************************************
333 *Function:读18B20ID
334 *parameter:
335 *Return:
336 *Modify:
337 *************************************************************/
338 void ReadID (void)//读取器件 id
339 {
340 1 Init18b20();
341 1 WriteByte(0x33); //read rom
342 1 read_bytes(8);
343 1 }
344 /************************************************************
345 *Function:读取温度
346 *parameter:
347 *Return:
348 *Modify:
349 *************************************************************/
350 void GemTemp (void)
351 {uint TEMP;
352 1 read_bytes (9);
353 1 if (CRC(9)==0) //校验正确
354 1 {
355 2 TEMP = temp_buff[1]*0x100 + temp_buff[0];
356 2 if(TEMP==0||TEMP==0xff)
357 2 {Config18b20();
358 3 TEMP=0;}
359 2 Temperature=TEMP;
360 2 Temperature /= 16;
361 2 watchdog();
362 2 }
363 1 }
364 /************************************************************
365 *Function:18B20ID全处理
C51 COMPILER V7.01 ACUS 11/24/2004 13:33:22 PAGE 7
366 *parameter:
367 *Return:
368 *Modify:
369 *************************************************************/
370 void TemperatuerResult(void)
371 {
372 1 if(Init18b20()!=0)
373 1 {
374 2 WriteByte(0xcc); //skip rom
375 2 WriteByte(0x44); //Temperature convert
376 2 os_wait(K_TMO,3,0);
377 2 watchdog();
378 2 os_wait(K_TMO,2,0);
379 2 watchdog();
380 2 os_wait(K_TMO,2,0);
381 2 watchdog();
382 2 }
383 1 if(Init18b20()!=0)
384 1 {WriteByte(0xcc); //skip rom
385 2 WriteByte(0xbe); //read Temperature
386 2 watchdog();
387 2 p = temp_buff;
388 2 GemTemp();
389 2 watchdog();
390 2 }
391 1 watchdog();
392 1 }
393 /*********************************************************
394 *名称:watchdog()
395 *功能:喂狗函数
396 *入口参数:no
397 *出口参数:无
398 *********************************************************/
399 void watchdog(void)
400 {
401 1 EA=0;
402 1
403 1 WFEED1=0xA5; //执行清零第一部份
404 1 WFEED2=0x5A; //执行清零第二部分
405 1 EA=1;
406 1 }
407 /*********************************************************
408 *名称:WriteDisp()
409 *功能:显示函数
410 *入口参数:disp显示的数据,led显示位置
411 *出口参数:无
412 *********************************************************/
413 void WriteDisp(uchar led,uchar disp)
414 {
415 1 switch (disp)
416 1 {case 0 :
417 2 dispbuff[led]=LED0;
418 2 break;
419 2 case 1 :
420 2 dispbuff[led]=LED1;
421 2 break;
422 2 case 2 :
423 2 dispbuff[led]=LED2;
424 2 break;
425 2 case 3 :
426 2 dispbuff[led]=LED3;
427 2 break;
C51 COMPILER V7.01 ACUS 11/24/2004 13:33:22 PAGE 8
428 2 case 4 :
429 2 dispbuff[led]=LED4;
430 2 break;
431 2 case 5 :
432 2 dispbuff[led]=LED5;
433 2 break;
434 2 case 6 :
435 2 dispbuff[led]=LED6;
436 2 break;
437 2 case 7 :
438 2 dispbuff[led]=LED7;
439 2 break;
440 2 case 8 :
441 2 dispbuff[led]=LED8;
442 2 break;
443 2 case 9 :
444 2 dispbuff[led]=LED9;
445 2 break;
446 2 default : dispbuff[led]=LEDE; break;
447 2 }
448 1
449 1
450 1 }
451
452 /*********************************************************
453 *名称:Disp()
454 *功能:显示函数
455 *入口参数:no
456 *出口参数:无
457 *********************************************************/
458 void Disp(uchar *i)
459 { uchar j=0;
460 1 while(j<=3)
461 1 { switch (j)
462 2 { case 0:
463 3 {
464 4 P2=*(i);
465 4 P10=1;
466 4 P11=0;
467 4 P04=0;
468 4 P05=0;
469 4 os_wait(K_TMO,1,0);
470 4 watchdog();
471 4 j++;
472 4 break;
473 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -