📄 18b20.lst
字号:
0538 00 811 NOP
0539 00 812 NOP
053A C296 813 CLR P1.6H
053C 00 814 NOP
053D 00 815 NOP
053E 00 816 NOP
053F D296 817 SETB P1.6H
0541 7B07 818 MOV R3,#7
0543 DBFE 819 DJNZ R3,$
0545 A296 820 MOV C,P1.6H
0547 7B17 821 MOV R3,#23
0549 DBFE 822 DJNZ R3,$
054B 13 823 RRC A
054C DAE7 824 DJNZ R2,RE17
054E 22 825 RET
826 ;=============================
054F 827 WRITE_18207:
054F 7A08 828 MOV R2,#8
0551 C3 829 CLR C
0552 830 WR17:
0552 C296 831 CLR P1.6H
0554 7B06 832 MOV R3,#6
0556 DBFE 833 DJNZ R3,$
0558 13 834 RRC A
0559 9296 835 MOV P1.6H,C
055B 7B17 836 MOV R3,#23
055D DBFE 837 DJNZ R3,$
055F D296 838 SETB P1.6H
0561 00 839 NOP
0562 DAEE 840 DJNZ R2,WR17
0564 D296 841 SETB P1.6H
0566 22 842 RET
843 ;=======================================
0567 844 READ_182007:
0567 7C02 845 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
0569 7931 846 MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
056B 847 RE007:
056B 7A08 848 MOV R2,#8
056D 849 RE017:
056D C3 850 CLR C
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 14
056E D296 851 SETB P1.6H
0570 00 852 NOP
0571 00 853 NOP
0572 C296 854 CLR P1.6H
0574 00 855 NOP
0575 00 856 NOP
0576 00 857 NOP
0577 D296 858 SETB P1.6H
0579 7B07 859 MOV R3,#7
057B DBFE 860 DJNZ R3,$
057D A296 861 MOV C,P1.6H
057F 7B17 862 MOV R3,#23
0581 DBFE 863 DJNZ R3,$
0583 13 864 RRC A
0584 DAE7 865 DJNZ R2,RE017
0586 F7 866 MOV @R1,A
0587 19 867 DEC R1
0588 DCE1 868 DJNZ R4,RE007
058A 22 869 RET
870 ;=======================================
058B 871 INIT_18207:
058B D296 872 SETB P1.6H
058D 00 873 NOP
058E C296 874 CLR P1.6H
0590 78FA 875 MOV R0,#250
0592 876 TSR17:
0592 D8FE 877 DJNZ R0,TSR17 ; 延时520us
0594 D296 878 SETB P1.6H
0596 7825 879 MOV R0,#25H ;96US-25H
0598 880 TSR27:
0598 D8FE 881 DJNZ R0,TSR27
059A 309603 882 JNB P1.6H,TSR37;如D0为低则复位成功,DS18B20存在
059D 0205A5 883 LJMP TSR47; 延时
05A0 884 TSR37:
05A0 D200 885 SETB 00H ; 置标志位,表示DS1820存在
05A2 0205AA 886 LJMP TSR57
05A5 887 TSR47:
05A5 C200 888 CLR 00H ; 清标志位,表示DS1820不存在
05A7 0205AE 889 LJMP TSR77
05AA 890 TSR57:
05AA 786B 891 MOV R0,#06BH ;200US
05AC 892 TSR67:
05AC D8FE 893 DJNZ R0,TSR67; 延时
05AE 894 TSR77:
05AE D296 895 SETB P1.6H ;拉高总线
05B0 22 896 RET
897 ;===============================
05B1 898 GET_TEMPER8:
05B1 D297 899 SETB P1.7H ; 定时入口
05B3 12063F 900 BCD8: LCALL INIT_18208
05B6 200003 901 JB 00H,S228
05B9 0205B3 902 LJMP BCD8; 若DS18B20不存在则返回
903
05BC 120665 904 S228: LCALL DELAY1
05BF 74CC 905 MOV A,#0CCH ; 跳过ROM匹配------0CC命令
05C1 120603 906 LCALL WRITE_18208
05C4 7444 907 MOV A,#44H ; 发出温度转换命令
05C6 120603 908 LCALL WRITE_18208
05C9 00 909 NOP
05CA 120665 910 LCALL DELAY1
05CD 12063F 911 CBA8:LCALL INIT_18208
05D0 200003 912 JB 00H,ABC8
05D3 0205CD 913 LJMP CBA8
05D6 120665 914 ABC8:LCALL DELAY1
05D9 74CC 915 MOV A,#0CCH ; 跳过ROM匹配
05DB 120603 916 LCALL WRITE_18208
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 15
05DE 74BE 917 MOV A,#0BEH ; 发出读温度命令
05E0 120603 918 LCALL WRITE_18208
05E3 12061B 919 LCALL READ_182008 ;READ_1820
05E6 22 920 RET
921 ;==============================
05E7 922 READ_18208:
05E7 7A08 923 MOV R2,#8
05E9 924 RE18:
05E9 C3 925 CLR C
05EA D297 926 SETB P1.7H
05EC 00 927 NOP
05ED 00 928 NOP
05EE C297 929 CLR P1.7H
05F0 00 930 NOP
05F1 00 931 NOP
05F2 00 932 NOP
05F3 D297 933 SETB P1.7H
05F5 7B07 934 MOV R3,#7
05F7 DBFE 935 DJNZ R3,$
05F9 A297 936 MOV C,P1.7H
05FB 7B17 937 MOV R3,#23
05FD DBFE 938 DJNZ R3,$
05FF 13 939 RRC A
0600 DAE7 940 DJNZ R2,RE18
0602 22 941 RET
942 ;=============================
0603 943 WRITE_18208:
0603 7A08 944 MOV R2,#8
0605 C3 945 CLR C
0606 946 WR18:
0606 C297 947 CLR P1.7H
0608 7B06 948 MOV R3,#6
060A DBFE 949 DJNZ R3,$
060C 13 950 RRC A
060D 9297 951 MOV P1.7H,C
060F 7B17 952 MOV R3,#23
0611 DBFE 953 DJNZ R3,$
0613 D297 954 SETB P1.7H
0615 00 955 NOP
0616 DAEE 956 DJNZ R2,WR18
0618 D297 957 SETB P1.7H
061A 22 958 RET
959 ;=======================================
061B 960 READ_182008:
061B 7C02 961 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
061D 7931 962 MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
061F 963 RE008:
061F 7A08 964 MOV R2,#8
0621 965 RE018:
0621 C3 966 CLR C
0622 D297 967 SETB P1.7H
0624 00 968 NOP
0625 00 969 NOP
0626 C297 970 CLR P1.7H
0628 00 971 NOP
0629 00 972 NOP
062A 00 973 NOP
062B D297 974 SETB P1.7H
062D 7B07 975 MOV R3,#7
062F DBFE 976 DJNZ R3,$
0631 A297 977 MOV C,P1.7H
0633 7B17 978 MOV R3,#23
0635 DBFE 979 DJNZ R3,$
0637 13 980 RRC A
0638 DAE7 981 DJNZ R2,RE018
063A F7 982 MOV @R1,A
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 16
063B 19 983 DEC R1
063C DCE1 984 DJNZ R4,RE008
063E 22 985 RET
986 ;=======================================
063F 987 INIT_18208:
063F D297 988 SETB P1.7H
0641 00 989 NOP
0642 C297 990 CLR P1.7H
0644 78FA 991 MOV R0,#250
0646 992 TSR18:
0646 D8FE 993 DJNZ R0,TSR18 ; 延时520us
0648 D297 994 SETB P1.7H
064A 7825 995 MOV R0,#25H ;96US-25H
064C 996 TSR28:
064C D8FE 997 DJNZ R0,TSR28
064E 309703 998 JNB P1.7H,TSR38;如D0为低则复位成功,DS18B20存在
0651 020659 999 LJMP TSR48; 延时
0654 1000 TSR38:
0654 D200 1001 SETB 00H ; 置标志位,表示DS1820存在
0656 02065E 1002 LJMP TSR58
0659 1003 TSR48:
0659 C200 1004 CLR 00H ; 清标志位,表示DS1820不存在
065B 020662 1005 LJMP TSR78
065E 1006 TSR58:
065E 786B 1007 MOV R0,#06BH ;200US
0660 1008 TSR68:
0660 D8FE 1009 DJNZ R0,TSR68; 延时
0662 1010 TSR78:
0662 D297 1011 SETB P1.7H ;拉高总线
0664 22 1012 RET
1013 ;===============================
1014 ;======================================
0665 7F20 1015 DELAY1:MOV R7,#20H
0667 DFFE 1016 DJNZ R7,$
0669 22 1017 RET
1018
1019 ;====================================
066A 753300 1020 TEMPRRO:MOV 33H,#00H;初始化0
066D E530 1021 MOV A,30H
066F 540F 1022 ANL A,#0FH
0671 C4 1023 SWAP A
0672 F533 1024 MOV 33H,A
0674 E531 1025 MOV A,31H
0676 54F0 1026 ANL A,#0F0H
0678 C4 1027 SWAP A
0679 4233 1028 ORL 33H,A;重新组合成的带符号数据(整数部分)
067B E533 1029 MOV A,33H
067D 5480 1030 ANL A,#80H;判断符号
1031
067F 6005 1032 JZ TEMPP
0681 E533 1033 MOV A,33H
0683 F4 1034 CPL A
1035 ;ADD A,#01H
0684 8013 1036 SJMP TEMPP1
0686 E533 1037 TEMPP:MOV A,33H;正数处理程序
0688 1206AE 1038 LCALL HBCD
068B E531 1039 MOV A,31H
068D 540F 1040 ANL A,#0FH
068F 9006C0 1041 MOV DPTR,#TEMPTAB;小数查表
0692 93 1042 MOVC A,@A+DPTR
0693 F536 1043 MOV 36H,A
0695 C2B7 1044 CLR P3.7;表示正数
0697 8014 1045 SJMP EXIT
0699 1206AE 1046 TEMPP1:LCALL HBCD;负数处理程序
069C E531 1047 MOV A,31H
069E 540F 1048 ANL A,#0FH
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 17
06A0 44F0 1049 ORL A,#0F0H
06A2 F4 1050 CPL A
06A3 2401 1051 ADD A,#01H
06A5 9006C0 1052 MOV DPTR,#TEMPTAB
06A8 93 1053 MOVC A,@A+DPTR;小数查表
06A9 F536 1054 MOV 36H,A
06AB D2B7 1055 SETB P3.7;表示负数
06AD 22 1056 EXIT:RET
1057
06AE 75F064 1058 HBCD: MOV B,#100 ;分离出百位,存放在R3中
06B1 84 1059 DIV AB
06B2 FB 1060 MOV R3,A
06B3 740A 1061 MOV A,#10 ;余数继续分离十位和个位
06B5 C5F0 1062 XCH A,B
06B7 84 1063 DIV AB
06B8 C4 1064 SWAP A
06B9 45F0 1065 ORL A,B ;将十位和个位拼装成BCD码
06BB 8B34 1066 MOV 34H,R3
06BD F535 1067 MOV 35H,A
06BF 22 1068 RET
06C0 00010102 1069 TEMPTAB:DB 00H,01H,01H,02H,03H,03H,04H,04H
06C4 03030404
06C8 05060607 1070 DB 05H,06H,06H,07H,08H,08H,09H,09H;0~16*0.0652
06CC 08080909
1071 ;==================================================
06D0 1072 CBCD:;MOV R2,#04H;5个待分离的BCD
06D0 E7 1073 CL:MOV A,@R1 ;分离后将占10个单元
06D1 F5F0 1074 MOV B,A
06D3 54F0 1075 ANL A,#0F0H
06D5 C4 1076 SWAP A
06D6 F54C 1077 MOV 4CH,A
06D8 E5F0 1078 MOV A,B
06DA 540F 1079 ANL A,#0FH
06DC F54D 1080 MOV 4DH,A
06DE A64C 1081 MOV @R0,4CH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -