📄 18b20.lst
字号:
0386 02038E 538 LJMP TSR54
0389 539 TSR44:
0389 C200 540 CLR 00H ; 清标志位,表示DS1820不存在
038B 020392 541 LJMP TSR74
038E 542 TSR54:
038E 786B 543 MOV R0,#06BH ;200US
0390 544 TSR64:
0390 D8FE 545 DJNZ R0,TSR64 ; 延时
0392 546 TSR74:
0392 D293 547 SETB P1.3H ;拉高总线
0394 22 548 RET
549 ;===============================
0395 550 GET_TEMPER5:
0395 D294 551 SETB P1.4H ; 定时入口
0397 120423 552 BCD5: LCALL INIT_18205
039A 200003 553 JB 00H,S225
039D 020397 554 LJMP BCD5 ; 若DS18B20不存在则返回
555
03A0 120665 556 S225: LCALL DELAY1
03A3 74CC 557 MOV A,#0CCH ; 跳过ROM匹配------0CC命令
03A5 1203E7 558 LCALL WRITE_18205
03A8 7444 559 MOV A,#44H ; 发出温度转换命令
03AA 1203E7 560 LCALL WRITE_18205
03AD 00 561 NOP
03AE 120665 562 LCALL DELAY1
03B1 120423 563 CBA5:LCALL INIT_18205
03B4 200003 564 JB 00H,ABC5
03B7 0203B1 565 LJMP CBA5
03BA 120665 566 ABC5:LCALL DELAY1
03BD 74CC 567 MOV A,#0CCH ; 跳过ROM匹配
03BF 1203E7 568 LCALL WRITE_18205
03C2 74BE 569 MOV A,#0BEH ; 发出读温度命令
03C4 1203E7 570 LCALL WRITE_18205
03C7 1203FF 571 LCALL READ_182005 ;READ_1820
03CA 22 572 RET
573 ;==============================
03CB 574 READ_18205:
03CB 7A08 575 MOV R2,#8
03CD 576 RE15:
03CD C3 577 CLR C
03CE D294 578 SETB P1.4H
03D0 00 579 NOP
03D1 00 580 NOP
03D2 C294 581 CLR P1.4H
03D4 00 582 NOP
03D5 00 583 NOP
03D6 00 584 NOP
03D7 D294 585 SETB P1.4H
03D9 7B07 586 MOV R3,#7
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 10
03DB DBFE 587 DJNZ R3,$
03DD A294 588 MOV C,P1.4H
03DF 7B17 589 MOV R3,#23
03E1 DBFE 590 DJNZ R3,$
03E3 13 591 RRC A
03E4 DAE7 592 DJNZ R2,RE15
03E6 22 593 RET
594 ;=============================
03E7 595 WRITE_18205:
03E7 7A08 596 MOV R2,#8
03E9 C3 597 CLR C
03EA 598 WR15:
03EA C294 599 CLR P1.4H
03EC 7B06 600 MOV R3,#6
03EE DBFE 601 DJNZ R3,$
03F0 13 602 RRC A
03F1 9294 603 MOV P1.4H,C
03F3 7B17 604 MOV R3,#23
03F5 DBFE 605 DJNZ R3,$
03F7 D294 606 SETB P1.4H
03F9 00 607 NOP
03FA DAEE 608 DJNZ R2,WR15
03FC D294 609 SETB P1.4H
03FE 22 610 RET
611 ;=======================================
03FF 612 READ_182005:
03FF 7C02 613 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
0401 7931 614 MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
0403 615 RE005:
0403 7A08 616 MOV R2,#8
0405 617 RE015:
0405 C3 618 CLR C
0406 D294 619 SETB P1.4H
0408 00 620 NOP
0409 00 621 NOP
040A C294 622 CLR P1.4H
040C 00 623 NOP
040D 00 624 NOP
040E 00 625 NOP
040F D294 626 SETB P1.4H
0411 7B07 627 MOV R3,#7
0413 DBFE 628 DJNZ R3,$
0415 A294 629 MOV C,P1.4H
0417 7B17 630 MOV R3,#23
0419 DBFE 631 DJNZ R3,$
041B 13 632 RRC A
041C DAE7 633 DJNZ R2,RE015
041E F7 634 MOV @R1,A
041F 19 635 DEC R1
0420 DCE1 636 DJNZ R4,RE005
0422 22 637 RET
638 ;=======================================
0423 639 INIT_18205:
0423 D294 640 SETB P1.4H
0425 00 641 NOP
0426 C294 642 CLR P1.4H
0428 78FA 643 MOV R0,#250
042A 644 TSR15:
042A D8FE 645 DJNZ R0,TSR15 ; 延时520us
042C D294 646 SETB P1.4H
042E 7825 647 MOV R0,#25H ;96US-25H
0430 648 TSR25:
0430 D8FE 649 DJNZ R0,TSR25
0432 309403 650 JNB P1.4H,TSR35;如D0为低则复位成功,DS18B20存在
0435 02043D 651 LJMP TSR45 ; 延时
0438 652 TSR35:
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 11
0438 D200 653 SETB 00H ; 置标志位,表示DS1820存在
043A 020442 654 LJMP TSR55
043D 655 TSR45:
043D C200 656 CLR 00H ; 清标志位,表示DS1820不存在
043F 020446 657 LJMP TSR75
0442 658 TSR55:
0442 786B 659 MOV R0,#06BH ;200US
0444 660 TSR65:
0444 D8FE 661 DJNZ R0,TSR65 ; 延时
0446 662 TSR75:
0446 D294 663 SETB P1.4H ;拉高总线
0448 22 664 RET
665 ;===============================
0449 666 GET_TEMPER6:
0449 D295 667 SETB P1.5H ; 定时入口
044B 1204D7 668 BCD6: LCALL INIT_18206
044E 200003 669 JB 00H,S226
0451 02044B 670 LJMP BCD6; 若DS18B20不存在则返回
671
0454 120665 672 S226: LCALL DELAY1
0457 74CC 673 MOV A,#0CCH ; 跳过ROM匹配------0CC命令
0459 12049B 674 LCALL WRITE_18206
045C 7444 675 MOV A,#44H ; 发出温度转换命令
045E 12049B 676 LCALL WRITE_18206
0461 00 677 NOP
0462 120665 678 LCALL DELAY1
0465 1204D7 679 CBA6:LCALL INIT_18206
0468 200003 680 JB 00H,ABC6
046B 020465 681 LJMP CBA6
046E 120665 682 ABC6:LCALL DELAY1
0471 74CC 683 MOV A,#0CCH ; 跳过ROM匹配
0473 12049B 684 LCALL WRITE_18206
0476 74BE 685 MOV A,#0BEH ; 发出读温度命令
0478 12049B 686 LCALL WRITE_18206
047B 1204B3 687 LCALL READ_182006 ;READ_1820
047E 22 688 RET
689 ;==============================
047F 690 READ_18206:
047F 7A08 691 MOV R2,#8
0481 692 RE16:
0481 C3 693 CLR C
0482 D295 694 SETB P1.5H
0484 00 695 NOP
0485 00 696 NOP
0486 C295 697 CLR P1.5H
0488 00 698 NOP
0489 00 699 NOP
048A 00 700 NOP
048B D295 701 SETB P1.5H
048D 7B07 702 MOV R3,#7
048F DBFE 703 DJNZ R3,$
0491 A295 704 MOV C,P1.5H
0493 7B17 705 MOV R3,#23
0495 DBFE 706 DJNZ R3,$
0497 13 707 RRC A
0498 DAE7 708 DJNZ R2,RE16
049A 22 709 RET
710 ;=============================
049B 711 WRITE_18206:
049B 7A08 712 MOV R2,#8
049D C3 713 CLR C
049E 714 WR16:
049E C295 715 CLR P1.5H
04A0 7B06 716 MOV R3,#6
04A2 DBFE 717 DJNZ R3,$
04A4 13 718 RRC A
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 12
04A5 9295 719 MOV P1.5H,C
04A7 7B17 720 MOV R3,#23
04A9 DBFE 721 DJNZ R3,$
04AB D295 722 SETB P1.5H
04AD 00 723 NOP
04AE DAEE 724 DJNZ R2,WR16
04B0 D295 725 SETB P1.5H
04B2 22 726 RET
727 ;=======================================
04B3 728 READ_182006:
04B3 7C02 729 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
04B5 7931 730 MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
04B7 731 RE006:
04B7 7A08 732 MOV R2,#8
04B9 733 RE016:
04B9 C3 734 CLR C
04BA D295 735 SETB P1.5H
04BC 00 736 NOP
04BD 00 737 NOP
04BE C295 738 CLR P1.5H
04C0 00 739 NOP
04C1 00 740 NOP
04C2 00 741 NOP
04C3 D295 742 SETB P1.5H
04C5 7B07 743 MOV R3,#7
04C7 DBFE 744 DJNZ R3,$
04C9 A295 745 MOV C,P1.5H
04CB 7B17 746 MOV R3,#23
04CD DBFE 747 DJNZ R3,$
04CF 13 748 RRC A
04D0 DAE7 749 DJNZ R2,RE016
04D2 F7 750 MOV @R1,A
04D3 19 751 DEC R1
04D4 DCE1 752 DJNZ R4,RE006
04D6 22 753 RET
754 ;=======================================
04D7 755 INIT_18206:
04D7 D295 756 SETB P1.5H
04D9 00 757 NOP
04DA C295 758 CLR P1.5H
04DC 78FA 759 MOV R0,#250
04DE 760 TSR16:
04DE D8FE 761 DJNZ R0,TSR16 ; 延时520us
04E0 D295 762 SETB P1.5H
04E2 7825 763 MOV R0,#25H ;96US-25H
04E4 764 TSR26:
04E4 D8FE 765 DJNZ R0,TSR26
04E6 309503 766 JNB P1.5H,TSR36;如D0为低则复位成功,DS18B20存在
04E9 0204F1 767 LJMP TSR46 ; 延时
04EC 768 TSR36:
04EC D200 769 SETB 00H ; 置标志位,表示DS1820存在
04EE 0204F6 770 LJMP TSR56
04F1 771 TSR46:
04F1 C200 772 CLR 00H ; 清标志位,表示DS1820不存在
04F3 0204FA 773 LJMP TSR76
04F6 774 TSR56:
04F6 786B 775 MOV R0,#06BH ;200US
04F8 776 TSR66:
04F8 D8FE 777 DJNZ R0,TSR66 ; 延时
04FA 778 TSR76:
04FA D295 779 SETB P1.5H ;拉高总线
04FC 22 780 RET
781 ;===============================
04FD 782 GET_TEMPER7:
04FD D296 783 SETB P1.6H ; 定时入口
04FF 12058B 784 BCD7: LCALL INIT_18207
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 13
0502 200003 785 JB 00H,S227
0505 0204FF 786 LJMP BCD7; 若DS18B20不存在则返回
787
0508 120665 788 S227: LCALL DELAY1
050B 74CC 789 MOV A,#0CCH ; 跳过ROM匹配------0CC命令
050D 12054F 790 LCALL WRITE_18207
0510 7444 791 MOV A,#44H ; 发出温度转换命令
0512 12054F 792 LCALL WRITE_18207
0515 00 793 NOP
0516 120665 794 LCALL DELAY1
0519 12058B 795 CBA7:LCALL INIT_18207
051C 200003 796 JB 00H,ABC7
051F 020519 797 LJMP CBA7
0522 120665 798 ABC7:LCALL DELAY1
0525 74CC 799 MOV A,#0CCH ; 跳过ROM匹配
0527 12054F 800 LCALL WRITE_18207
052A 74BE 801 MOV A,#0BEH ; 发出读温度命令
052C 12054F 802 LCALL WRITE_18207
052F 120567 803 LCALL READ_182007 ;READ_1820
0532 22 804 RET
805 ;==============================
0533 806 READ_18207:
0533 7A08 807 MOV R2,#8
0535 808 RE17:
0535 C3 809 CLR C
0536 D296 810 SETB P1.6H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -