📄 tcmain.lst
字号:
350 1 }
351
352 void V2ToV(void) //数值转换
353 {
354 1 TLV = TLV >> 4;
355 1 THV = THV << 4; //读出的高低位数值移位
356 1 TMV = TLV | THV; //合并高低位放入TM为实际温度值
357 1 Sign = 0;
358 1 if (SetTF || !Key_SET)
359 1 Sign = TMSetV >> 7; //取符号
360 1 else
361 1 Sign = TMV >> 7;
362 1
363 1 if (Sign)
C51 COMPILER V8.02 TCMAIN 08/10/2012 16:38:28 PAGE 7
364 1 {
365 2 if (SetTF || !Key_SET)
366 2 {
367 3 LED_One = (~(TMSetV-1)) / 100; //SET状态下显示设定值
368 3 LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;
369 3 LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;
370 3 inbuf1[0]=dis_8[LED_Two];
371 3 inbuf1[1]=dis_8[LED_Three];
372 3 //inbuf1[2]=dis_8[ LED_Three];
373 3 inbuf1[2]=0x0d;
374 3 inbuf1[3]=0x0a;
375 3 }
376 2 else
377 2 {
378 3 LED_One = (~(TMV-1)) / 100; //转换百位值
379 3 LED_Two = ((~(TMV-1)) - LED_One * 100)/10;
380 3 LED_Three = (~(TMV-1)) - LED_One * 100 - LED_Two * 10;
381 3 inbuf1[0]=dis_8[LED_Two];
382 3 inbuf1[1]=dis_8[LED_Three];
383 3 inbuf1[2]=dis_8[0];
384 3 inbuf1[3]=0x0d;
385 3 inbuf1[4]=0x0a;
386 3 }
387 2 }
388 1 else
389 1 {
390 2 if (SetTF || !Key_SET)
391 2 {
392 3 LED_One = (TMSetV) / 100; //SET状态下显示设定值
393 3 LED_Two = (TMSetV - LED_One * 100)/10;
394 3 LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;
395 3 inbuf1[0]=dis_8[LED_Two];
396 3 inbuf1[1]=dis_8[LED_Three];
397 3 inbuf1[2]=dis_8[0];
398 3 inbuf1[3]=0x0d;
399 3 inbuf1[4]=0x0a;
400 3 }
401 2 else
402 2 {
403 3 LED_One = (TMV) / 100; //转换百位值
404 3 LED_Two = (TMV - LED_One * 100)/10;
405 3 LED_Three = TMV - LED_One * 100 - LED_Two * 10;
406 3 inbuf1[0]=dis_8[LED_Two];
407 3 inbuf1[1]=dis_8[LED_Three];
408 3 inbuf1[2]=dis_8[0];
409 3 inbuf1[3]=0x0d;
410 3 inbuf1[4]=0x0a;
411 3 }
412 2 }
413 1
414 1 init_serialcomm(); //初始化串口
415 1
416 1 //while ( 1 )
417 1 //{
418 1 send_string_com(inbuf1,INBUF_LEN);
419 1
420 1 //转LED字段
421 1 if (LED_One) //超过百时十位的处理
422 1 LED_Two = LEDDis[LED_Two];
423 1 else
424 1 {
425 2 if (LED_Two == 0)
C51 COMPILER V8.02 TCMAIN 08/10/2012 16:38:28 PAGE 8
426 2 LED_Two = LEDDis[10];
427 2 else
428 2 LED_Two = LEDDis[LED_Two];
429 2 }
430 1 if (Sign)
431 1 LED_One = LEDDis[11];
432 1 else
433 1 {
434 2 if (LED_One == 0)
435 2 LED_One = LEDDis[10];
436 2 else
437 2 LED_One = LEDDis[LED_One];
438 2 }
439 1 LED_Three = LEDDis[LED_Three];
440 1 }
441
442 void InitDS1820(void) //初始化DS1820
443 {
444 1 TMPort = 1; //拉高TMPort
445 1 _nop_(); //保持一个周期
446 1 TMPort = 0; //拉低TMPort
447 1 Delay_510(); //延时 DS1820复位时间要500us的低电平
448 1 TMPort = 1; //拉高TMPort
449 1 _nop_(); //保持
450 1 _nop_();
451 1 _nop_();
452 1
453 1 Delay_110(); //延时110us 等待DS1820回应
454 1 if (!TMPort) //回应信号为低电平
455 1 DS1820ON = 1;
456 1 else
457 1 DS1820ON = 0;
458 1 Delay_110(); //延时
459 1 Delay_110();
460 1 TMPort = 1; //拉高TMPort
461 1 }
462
463 void ROMDS1820(void) //跳过ROM匹配
464 {
465 1 #pragma asm
466 1 MOV A,#0CCH
467 1 MOV R2,#8
468 1 CLR C
469 1 WR1:
470 1 CLR P3_3
471 1 MOV R3,#6
472 1 DJNZ R3,$
473 1 RRC A
474 1 MOV P3_3,C
475 1 MOV R3,#23
476 1 DJNZ R3,$
477 1 SETB P3_3
478 1 NOP
479 1 DJNZ R2,WR1
480 1 SETB P3_3
481 1 #pragma endasm
482 1 }
483
484 void TMVDS1820(void) //温度转换指令
485 {
486 1 #pragma asm
487 1 MOV A,#44H
C51 COMPILER V8.02 TCMAIN 08/10/2012 16:38:28 PAGE 9
488 1 MOV R2,#8
489 1 CLR C
490 1 WR2:
491 1 CLR P3_3
492 1 MOV R3,#6
493 1 DJNZ R3,$
494 1 RRC A
495 1 MOV P3_3,C
496 1 MOV R3,#23
497 1 DJNZ R3,$
498 1 SETB P3_3
499 1 NOP
500 1 DJNZ R2,WR2
501 1 SETB P3_3
502 1 #pragma endasm
503 1 }
504
505 void TMRDS1820(void) //读出温度指令
506 {
507 1 #pragma asm
508 1 MOV A,#0BEH
509 1 MOV R2,#8
510 1 CLR C
511 1 WR3:
512 1 CLR P3_3
513 1 MOV R3,#6
514 1 DJNZ R3,$
515 1 RRC A
516 1 MOV P3_3,C
517 1 MOV R3,#23
518 1 DJNZ R3,$
519 1 SETB P3_3
520 1 NOP
521 1 DJNZ R2,WR3
522 1 SETB P3_3
523 1 #pragma endasm
524 1 }
525
526 void TMWDS1820(void) //写入温度限制指令
527 {
528 1 #pragma asm
529 1 MOV A,#04EH
530 1 MOV R2,#8
531 1 CLR C
532 1 WR13:
533 1 CLR P3_3
534 1 MOV R3,#6
535 1 DJNZ R3,$
536 1 RRC A
537 1 MOV P3_3,C
538 1 MOV R3,#23
539 1 DJNZ R3,$
540 1 SETB P3_3
541 1 NOP
542 1 DJNZ R2,WR13
543 1 SETB P3_3
544 1 #pragma endasm
545 1 }
546
547 void TMREDS1820(void) //COPY RAM to E2PRAM
548 {
549 1 #pragma asm
C51 COMPILER V8.02 TCMAIN 08/10/2012 16:38:28 PAGE 10
550 1 MOV A,#48H
551 1 MOV R2,#8
552 1 CLR C
553 1 WR33:
554 1 CLR P3_3
555 1 MOV R3,#6
556 1 DJNZ R3,$
557 1 RRC A
558 1 MOV P3_3,C
559 1 MOV R3,#23
560 1 DJNZ R3,$
561 1 SETB P3_3
562 1 NOP
563 1 DJNZ R2,WR33
564 1 SETB P3_3
565 1 #pragma endasm
566 1 }
567
568 void TMERDS1820(void) //COPY E2PRAM to RAM
569 {
570 1 #pragma asm
571 1 MOV A,#0B8H
572 1 MOV R2,#8
573 1 CLR C
574 1 WR43:
575 1 CLR P3_3
576 1 MOV R3,#6
577 1 DJNZ R3,$
578 1 RRC A
579 1 MOV P3_3,C
580 1 MOV R3,#23
581 1 DJNZ R3,$
582 1 SETB P3_3
583 1 NOP
584 1 DJNZ R2,WR43
585 1 SETB P3_3
586 1 #pragma endasm
587 1 }
588
589 void WriteDS1820(void) //写入温度限制值
590 {
591 1 #pragma asm
592 1 MOV A,26H //发出4EH写ROM指令后连发两个字节分别为上下限
593 1 MOV R2,#8
594 1 CLR C
595 1 WR23:
596 1 CLR P3_3
597 1 MOV R3,#6
598 1 DJNZ R3,$
599 1 RRC A
600 1 MOV P3_3,C
601 1 MOV R3,#23
602 1 DJNZ R3,$
603 1 SETB P3_3
604 1 NOP
605 1 DJNZ R2,WR23
606 1 SETB P3_3
607 1 #pragma endasm
608 1 }
609
610 void ReadDS1820(void) //读出温度值
611 {
C51 COMPILER V8.02 TCMAIN 08/10/2012 16:38:28 PAGE 11
612 1 #pragma asm
613 1 MOV R4,#3 ;// 将温度高位和低位,高温限制位从DS18B20中读出
614 1 MOV R1,#29H ; //低位存入29H(TEMPER_L),高位存入28H(TEMPER_H),高温限制位存入27H(TMRomV)
615 1 RE00:
616 1 MOV R2,#8
617 1 RE01:
618 1 CLR C
619 1 SETB P3_3
620 1 NOP
621 1 NOP
622 1 CLR P3_3
623 1 NOP
624 1 NOP
625 1 NOP
626 1 SETB P3_3
627 1 MOV R3,#09
628 1 RE10:
629 1 DJNZ R3,RE10
630 1 MOV C,P3_3
631 1 MOV R3,#23
632 1 RE20:
633 1 DJNZ R3,RE20
634 1 RRC A
635 1 DJNZ R2,RE01
636 1 MOV @R1,A
637 1 DEC R1
638 1 DJNZ R4,RE00
639 1 #pragma endasm
640 1 }
641
642 void Delay_510(void) //延时510微秒
643 {
644 1 #pragma asm
645 1 MOV R0,#7DH
646 1 MOV R1,#02H
647 1 TSR1:
648 1 DJNZ R0,TSR1
649 1 MOV R0,#7DH
650 1 DJNZ R1,TSR1
651 1 #pragma endasm
652 1 }
653
654 void Delay_110(void) //延时110微秒
655 {
656 1 #pragma asm
657 1 MOV R0,#19H
658 1 MOV R1,#02H
659 1 TSR2:
660 1 DJNZ R0,TSR2
661 1 MOV R0,#19H
662 1 DJNZ R1,TSR2
663 1 #pragma endasm
664 1 }
665
666 void Delay_10ms(void) //延时10ms
667 {
668 1 #pragma asm
669 1 MOV R0,#19H
670 1 MOV R1,#0C8H
671 1 TSR3:
672 1 DJNZ R0,TSR3
673 1 MOV R0,#19H
C51 COMPILER V8.02 TCMAIN 08/10/2012 16:38:28 PAGE 12
674 1 DJNZ R1,TSR3
675 1 #pragma endasm
676 1 }
677
678 void Delay_4s(void) //延时4s
679 {
680 1 #pragma asm
681 1 MOV R2,#28H
682 1 TSR5:
683 1 MOV R0,#0FAH
684 1 MOV R1,#0C8H
685 1 TSR4:
686 1 DJNZ R0,TSR4
687 1 MOV R0,#0FAH
688 1 DJNZ R1,TSR4
689 1 DJNZ R2,TSR5
690 1 #pragma endasm
691 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1444 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 82 6
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 + -