📄 tcmain.lst
字号:
284 3 LED_One = (TMV) / 100; //转换百位值
285 3 LED_Two = (TMV - LED_One * 100)/10;
286 3 LED_Three = TMV - LED_One * 100 - LED_Two * 10;
287 3 }
288 2 }
289 1
290 1 //转LED字段
291 1 if (LED_One) //超过百时十位的处理
292 1 LED_Two = LEDDis[LED_Two];
293 1 else
294 1 {
295 2 if (LED_Two == 0)
296 2 LED_Two = LEDDis[10];
297 2 else
298 2 LED_Two = LEDDis[LED_Two];
299 2 }
300 1 if (Sign)
C51 COMPILER V7.06 TCMAIN 04/11/2008 16:55:01 PAGE 6
301 1 LED_One = LEDDis[11];
302 1 else
303 1 {
304 2 if (LED_One == 0)
305 2 LED_One = LEDDis[10];
306 2 else
307 2 LED_One = LEDDis[LED_One];
308 2 }
309 1 LED_Three = LEDDis[LED_Three];
310 1 }
311
312 void InitDS1820(void) //初始化DS1820
313 {
314 1 TMPort = 1; //拉高TMPort
315 1 _nop_(); //保持一个周期
316 1 TMPort = 0; //拉低TMPort
317 1 Delay_510(); //延时 DS1820复位时间要500us的低电平
318 1 TMPort = 1; //拉高TMPort
319 1 _nop_(); //保持
320 1 _nop_();
321 1 _nop_();
322 1
323 1 Delay_110(); //延时110us 等待DS1820回应
324 1 if (!TMPort) //回应信号为低电平
325 1 DS1820ON = 1;
326 1 else
327 1 DS1820ON = 0;
328 1 Delay_110(); //延时
329 1 Delay_110();
330 1 TMPort = 1; //拉高TMPort
331 1 }
332
333 void ROMDS1820(void) //跳过ROM匹配
334 {
335 1 #pragma asm
336 1 MOV A,#0CCH
337 1 MOV R2,#8
338 1 CLR C
339 1 WR1:
340 1 CLR P3_7
341 1 MOV R3,#6
342 1 DJNZ R3,$
343 1 RRC A
344 1 MOV P3_7,C
345 1 MOV R3,#23
346 1 DJNZ R3,$
347 1 SETB P3_7
348 1 NOP
349 1 DJNZ R2,WR1
350 1 SETB P3_7
351 1 #pragma endasm
352 1 }
353
354 void TMVDS1820(void) //温度转换指令
355 {
356 1 #pragma asm
357 1 MOV A,#44H
358 1 MOV R2,#8
359 1 CLR C
360 1 WR2:
361 1 CLR P3_7
362 1 MOV R3,#6
C51 COMPILER V7.06 TCMAIN 04/11/2008 16:55:01 PAGE 7
363 1 DJNZ R3,$
364 1 RRC A
365 1 MOV P3_7,C
366 1 MOV R3,#23
367 1 DJNZ R3,$
368 1 SETB P3_7
369 1 NOP
370 1 DJNZ R2,WR2
371 1 SETB P3_7
372 1 #pragma endasm
373 1 }
374
375 void TMRDS1820(void) //读出温度指令
376 {
377 1 #pragma asm
378 1 MOV A,#0BEH
379 1 MOV R2,#8
380 1 CLR C
381 1 WR3:
382 1 CLR P3_7
383 1 MOV R3,#6
384 1 DJNZ R3,$
385 1 RRC A
386 1 MOV P3_7,C
387 1 MOV R3,#23
388 1 DJNZ R3,$
389 1 SETB P3_7
390 1 NOP
391 1 DJNZ R2,WR3
392 1 SETB P3_7
393 1 #pragma endasm
394 1 }
395
396 void TMWDS1820(void) //写入温度限制指令
397 {
398 1 #pragma asm
399 1 MOV A,#04EH
400 1 MOV R2,#8
401 1 CLR C
402 1 WR13:
403 1 CLR P3_7
404 1 MOV R3,#6
405 1 DJNZ R3,$
406 1 RRC A
407 1 MOV P3_7,C
408 1 MOV R3,#23
409 1 DJNZ R3,$
410 1 SETB P3_7
411 1 NOP
412 1 DJNZ R2,WR13
413 1 SETB P3_7
414 1 #pragma endasm
415 1 }
416
417 void TMREDS1820(void) //COPY RAM to E2PRAM
418 {
419 1 #pragma asm
420 1 MOV A,#48H
421 1 MOV R2,#8
422 1 CLR C
423 1 WR33:
424 1 CLR P3_7
C51 COMPILER V7.06 TCMAIN 04/11/2008 16:55:01 PAGE 8
425 1 MOV R3,#6
426 1 DJNZ R3,$
427 1 RRC A
428 1 MOV P3_7,C
429 1 MOV R3,#23
430 1 DJNZ R3,$
431 1 SETB P3_7
432 1 NOP
433 1 DJNZ R2,WR33
434 1 SETB P3_7
435 1 #pragma endasm
436 1 }
437
438 void TMERDS1820(void) //COPY E2PRAM to RAM
439 {
440 1 #pragma asm
441 1 MOV A,#0B8H
442 1 MOV R2,#8
443 1 CLR C
444 1 WR43:
445 1 CLR P3_7
446 1 MOV R3,#6
447 1 DJNZ R3,$
448 1 RRC A
449 1 MOV P3_7,C
450 1 MOV R3,#23
451 1 DJNZ R3,$
452 1 SETB P3_7
453 1 NOP
454 1 DJNZ R2,WR43
455 1 SETB P3_7
456 1 #pragma endasm
457 1 }
458
459 void WriteDS1820(void) //写入温度限制值
460 {
461 1 #pragma asm
462 1 MOV A,26H //发出4EH写ROM指令后连发两个字节分别为上下限
463 1 MOV R2,#8
464 1 CLR C
465 1 WR23:
466 1 CLR P3_7
467 1 MOV R3,#6
468 1 DJNZ R3,$
469 1 RRC A
470 1 MOV P3_7,C
471 1 MOV R3,#23
472 1 DJNZ R3,$
473 1 SETB P3_7
474 1 NOP
475 1 DJNZ R2,WR23
476 1 SETB P3_7
477 1 #pragma endasm
478 1 }
479
480 void ReadDS1820(void) //读出温度值
481 {
482 1 #pragma asm
483 1 MOV R4,#3 ; 将温度高位和低位,高温限制位从DS18B20中读出
484 1 MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H),高温限制位存入27H(TMRomV)
485 1 RE00:
486 1 MOV R2,#8
C51 COMPILER V7.06 TCMAIN 04/11/2008 16:55:01 PAGE 9
487 1 RE01:
488 1 CLR C
489 1 SETB P3_7
490 1 NOP
491 1 NOP
492 1 CLR P3_7
493 1 NOP
494 1 NOP
495 1 NOP
496 1 SETB P3_7
497 1 MOV R3,#09
498 1 RE10:
499 1 DJNZ R3,RE10
500 1 MOV C,P3_7
501 1 MOV R3,#23
502 1 RE20:
503 1 DJNZ R3,RE20
504 1 RRC A
505 1 DJNZ R2,RE01
506 1 MOV @R1,A
507 1 DEC R1
508 1 DJNZ R4,RE00
509 1 #pragma endasm
510 1 }
511
512 void Delay_510(void) //延时510微秒
513 {
514 1 #pragma asm
515 1 MOV R0,#7DH
516 1 MOV R1,#02H
517 1 TSR1:
518 1 DJNZ R0,TSR1
519 1 MOV R0,#7DH
520 1 DJNZ R1,TSR1
521 1 #pragma endasm
522 1 }
523
524 void Delay_110(void) //延时110微秒
525 {
526 1 #pragma asm
527 1 MOV R0,#19H
528 1 MOV R1,#02H
529 1 TSR2:
530 1 DJNZ R0,TSR2
531 1 MOV R0,#19H
532 1 DJNZ R1,TSR2
533 1 #pragma endasm
534 1 }
535
536 void Delay_10ms(void) //延时10ms
537 {
538 1 #pragma asm
539 1 MOV R0,#19H
540 1 MOV R1,#0C8H
541 1 TSR3:
542 1 DJNZ R0,TSR3
543 1 MOV R0,#19H
544 1 DJNZ R1,TSR3
545 1 #pragma endasm
546 1 }
547
548 void Delay_4s(void) //延时4s
C51 COMPILER V7.06 TCMAIN 04/11/2008 16:55:01 PAGE 10
549 {
550 1 #pragma asm
551 1 MOV R2,#28H
552 1 TSR5:
553 1 MOV R0,#0FAH
554 1 MOV R1,#0C8H
555 1 TSR4:
556 1 DJNZ R0,TSR4
557 1 MOV R0,#0FAH
558 1 DJNZ R1,TSR4
559 1 DJNZ R2,TSR5
560 1 #pragma endasm
561 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1200 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -