📄 18b20.lst
字号:
A51 MACRO ASSEMBLER 18B20 04/25/2008 08:49:31 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN 18b20.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 18b20.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 ORG 0000H
0000 020030 2 LJMP MAIN
3 ;高精度数字温度计(此汇编程序在AT2051通过运行)
0030 4 ORG 0030H
0030 752900 5 MAIN:MOV 29H, #00H
0033 752800 6 MOV 28H, #00H
0036 12006B 7 LOOP0:LCALL RE000 ;复位
0039 74CC 8 MOV A, #0CCH ;跳过ROM操作
003B 12008E 9 LCALL WRITE
003E 7444 10 MOV A, #44H ;发出温度转换命令
0040 12008E 11 LCALL WRITE
0043 1200CA 12 LCALL DELAY1 ;延时750mS
0046 1200CA 13 LCALL DELAY1
0049 1200CA 14 LCALL DELAY1
004C 12006B 15 LCALL RE000 ;复位
004F 74CC 16 MOV A, #0CCH ;跳过ROM操作
0051 12008E 17 LCALL WRITE
0054 74BE 18 MOV A, #0BEH ;发出读温度命令
0056 12008E 19 LCALL WRITE
0059 1200A9 20 LCALL READ ;读DS18B20中的温度数据
005C 1200E8 21 LCALL BTOD
005F 753013 22 mov 30H, #13H
0062 753511 23 mov 35H, #11H
0065 1200D3 24 LCALL DELAY2
0068 020036 25 LJMP LOOP0
26 ;复位DS18B20子程序
006B D2B2 27 RE000:SETB P3.2
006D 00 28 NOP
006E C2B2 29 CLR P3.2
0070 7B96 30 MOV R3, #96H
0072 DBFE 31 LOOP1:DJNZ R3, LOOP1 ;延时600uS
0074 D2B2 32 SETB P3.2
0076 00 33 NOP
0077 7B0F 34 MOV R3, #0FH
0079 DBFE 35 LOOP2:DJNZ R3, LOOP2 ;延时60uS
007B 7B1E 36 MOV R3, #1EH
007D 30B209 37 LOOP3:JNB P3.2, LOOP4 ;240uS内检查DS18B20的存在脉冲
0080 DBFB 38 DJNZ R3, LOOP3
0082 C290 39 clr p1.0
0084 02008D 40 LJMP LOOP5
0087 7B3C 41 MOV R3, #3CH
0089 DBFE 42 LOOP4:DJNZ R3, LOOP4 ;延时240uS
008B D2B2 43 SETB P3.2
008D 22 44 LOOP5:RET
45
46 ;写DS18B20子程序
008E 7A08 47 WRITE:MOV R2,#08H ;一共8位数据
0090 C3 48 CLR C
0091 D2B2 49 LOOP6:SETB p3.2
0093 00 50 nop
0094 C2B2 51 CLR P3.2
0096 7B04 52 MOV R3, #04H
0098 DBFE 53 LOOP7:DJNZ R3, LOOP7
009A 13 54 RRC A
009B 92B2 55 MOV P3.2, C
009D 7B0C 56 MOV R3,#0CH
009F DBFE 57 LOOP8:DJNZ R3, LOOP8 ;延时48uS
00A1 D2B2 58 SETB P3.2
A51 MACRO ASSEMBLER 18B20 04/25/2008 08:49:31 PAGE 2
00A3 00 59 NOP
00A4 DAEB 60 DJNZ R2, LOOP6
00A6 D2B2 61 SETB P3.2
00A8 22 62 RET
63 ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
00A9 7C02 64 READ:MOV R4,#2H ;将温度高位和低位从DS18B20中读出
00AB 7929 65 MOV R1,#29H ;低位存入29H,高位存入28H
00AD 7A08 66 RE00:MOV R2,#8H
00AF C3 67 RE01:CLR C
00B0 D2B2 68 SETB P3.2
00B2 00 69 NOP
00B3 C2B2 70 CLR P3.2
00B5 00 71 NOP
00B6 D2B2 72 SETB P3.2
00B8 7B04 73 MOV R3, #04H ;延时16uS
00BA DBFE 74 RE10:DJNZ R3, RE10
00BC A2B2 75 MOV C,P3.2
00BE 7B0C 76 MOV R3,#0CH ;延时48uS
00C0 DBFE 77 RE20:DJNZ R3,RE20
00C2 13 78 RRC A
00C3 DAEA 79 DJNZ R2,RE01
00C5 F7 80 MOV @R1,A
00C6 19 81 DEC R1
00C7 DCE4 82 DJNZ R4,RE00
00C9 22 83 RET
84
85 ;延时子程序1(0.25秒)
00CA 7CFD 86 DELAY1:MOV R4, #0FDH
00CC 7DFC 87 L3:MOV R5, #0FCH
00CE DDFE 88 L5:DJNZ R5, L5
00D0 DCFA 89 DJNZ R4, L3
00D2 22 90 RET
91 ;延时子程序2
00D3 7C02 92 DELAY2:MOV R4, #02H
00D5 7DFF 93 L6:MOV R5, #0FFH
00D7 120147 94 L7:LCALL DIRR
00DA DDFB 95 DJNZ R5, L7
00DC DCF7 96 DJNZ R4, L6
00DE 22 97 RET
98 ;延时子程序0
00DF 7A01 99 DELAY:MOV R2, #01H
00E1 7B08 100 L1:MOV R3, #08H
00E3 DBFE 101 L2:DJNZ R3, L2
00E5 DAFA 102 DJNZ R2, L1
00E7 22 103 RET
104 ;进制转换数据处理
00E8 7834 105 BTOD:MOV R0, #34H
00EA 304713 106 JNB 47H, BTOD0 ;28H中的最高位是否为1(温度<0)
00ED E529 107 QB00: MOV A, 29H ;负数取补
00EF F4 108 CPL A
00F0 2401 109 ADD A, #01H
00F2 F529 110 MOV 29H, A
00F4 E528 111 MOV A, 28H
00F6 F4 112 CPL A
00F7 3400 113 ADDC A, #00H
00F9 F528 114 MOV 28H, A
00FB 7612 115 MOV @R0, #12H ;显示负号
00FD 020102 116 LJMP BTOD1
0100 7611 117 BTOD0:MOV @R0, #11H
0102 E529 118 BTOD1:MOV A,29H
0104 F527 119 MOV 27H, A
0106 A240 120 MOV C,40H ;将28H中的最低位移入C,40H41H42H43H为28H中的位地址
0108 13 121 RRC A
0109 A241 122 MOV C,41H
010B 13 123 RRC A
010C A242 124 MOV C,42H
A51 MACRO ASSEMBLER 18B20 04/25/2008 08:49:31 PAGE 3
010E 13 125 RRC A
010F A243 126 MOV C,43H
0111 13 127 RRC A
0112 F529 128 MOV 29H,A
0114 E529 129 MOV A, 29H ;将29H中的十六进制数转换成10进制
0116 75F064 130 MOV B, #100
0119 84 131 DIV AB
011A 6004 132 JZ BTOD2
011C F6 133 MOV @R0, A ;百位存于33H
011D 020128 134 LJMP BTOD4
0120 B61203 135 BTOD2:CJNE @R0, #12H, BTOD3
0123 020128 136 LJMP BTOD4
0126 7611 137 BTOD3:MOV @R0, #11H ;百位为零暗
0128 18 138 BTOD4:DEC R0
0129 740A 139 MOV A, #10
012B C5F0 140 XCH A, B
012D 84 141 DIV AB
012E F6 142 MOV @R0, A ;十位存于32H
012F 18 143 DEC R0
0130 A6F0 144 MOV @R0, B ;个位存于31H
0132 18 145 DEC R0
0133 53270F 146 ANL 27H, #0FH ;小数点后一位进制转换
0136 E527 147 MOV A, 27H
0138 75F006 148 MOV B, #06H
013B A4 149 MUL AB
013C 75F00A 150 MOV B, #10
013F 84 151 DIV AB
0140 F6 152 MOV @R0, A ;小数点后一位存于30H
0141 20B702 153 JB P3.7, BTOD5 ;小数点后一位是否显示判断
0144 76FF 154 MOV @R0, #0FFH
0146 22 155 BTOD5:RET
156 ;动态显示子程序
0147 7830 157 DIRR: MOV R0, #30H
0149 759000 158 MOV P1, #00H
014C E6 159 MOV A, @R0 ;显示C
014D 9001D8 160 MOV DPTR, #SEGPT
0150 93 161 MOVC A, @A+DPTR
0151 F580 162 MOV p0, A
0153 3099FD 163 OUT1: JNB TI, OUT1
0156 C299 164 CLR TI
0158 D292 165 SETB P1.2
015A 1200DF 166 LCALL DELAY
015D C292 167 CLR P1.2
015F 08 168 INC R0
0160 E6 169 MOV A, @R0 ;显示小数点后一位
0161 9001D8 170 MOV DPTR, #SEGPT
0164 93 171 MOVC A, @A+DPTR
0165 F580 172 MOV p0, A
0167 3099FD 173 OUT2: JNB TI, OUT2
016A C299 174 CLR TI
016C D293 175 SETB P1.3
016E 1200DF 176 LCALL DELAY
0171 C293 177 CLR P1.3
0173 7410 178 MOV A, #10H ;显示小数点
0175 9001D8 179 MOV DPTR, #SEGPT
0178 93 180 MOVC A, @A+DPTR
0179 F580 181 MOV p0, A
017B 3099FD 182 OUT0: JNB TI, OUT0
017E C299 183 CLR TI
0180 D294 184 SETB P1.4
0182 1200DF 185 LCALL DELAY
0185 C294 186 CLR P1.4
0187 08 187 INC R0
0188 E6 188 MOV A, @R0 ;显示个位数
0189 9001D8 189 MOV DPTR, #SEGPT
018C 93 190 MOVC A, @A+DPTR
A51 MACRO ASSEMBLER 18B20 04/25/2008 08:49:31 PAGE 4
018D F580 191 MOV p0, A
018F 3099FD 192 OUT3: JNB TI, OUT3
0192 C299 193 CLR TI
0194 D294 194 SETB P1.4
0196 1200DF 195 LCALL DELAY
0199 C294 196 CLR P1.4
019B 08 197 INC R0
019C E6 198 MOV A, @R0 ;显示高位数
019D 9001D8 199 MOV DPTR, #SEGPT
01A0 93 200 MOVC A, @A+DPTR
01A1 F580 201 MOV p0, A
01A3 3099FD 202 OUT4: JNB TI, OUT4
01A6 C299 203 CLR TI
01A8 D295 204 SETB P1.5
01AA 1200DF 205 LCALL DELAY
01AD C295 206 CLR P1.5
01AF 08 207 INC R0
01B0 E6 208 MOV A, @R0 ;显示高位数
01B1 9001D8 209 MOV DPTR, #SEGPT
01B4 93 210 MOVC A, @A+DPTR
01B5 F580 211 MOV p0, A
01B7 3099FD 212 OUT5: JNB TI, OUT5
01BA C299 213 CLR TI
01BC D296 214 SETB P1.6
01BE 1200DF 215 LCALL DELAY
01C1 C296 216 CLR P1.6
01C3 08 217 INC R0
01C4 E6 218 MOV A, @R0 ;显示高位数
01C5 9001D8 219 MOV DPTR, #SEGPT
01C8 93 220 MOVC A, @A+DPTR
01C9 F580 221 MOV p0, A
01CB 3099FD 222 OUT6: JNB TI, OUT6
01CE C299 223 CLR TI
01D0 D297 224 SETB P1.7
01D2 1200DF 225 LCALL DELAY
01D5 C297 226 CLR P1.7
01D7 22 227 RET
01D8 C0F9A4B0 228 SEGPT: DB 0C0H,0F9H,0A4H,0B0H,99H ;0,1,2,3,4
01DC 99
01DD 9282F880 229 DB 92H,82H,0F8H,80H,90H ;5,6,7,8,9
01E1 90
01E2 8883C6A1 230 DB 88H,83H,0C6H,0A1H,86H,8EH ;A,B,C,D,E,F
01E6 868E
01E8 7FFFBF70 231 DB 07FH,0FFH,0BFH,70H ;点,暗,-,摄氏度
232 END
A51 MACRO ASSEMBLER 18B20 04/25/2008 08:49:31 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
B. . . . . . . . . D ADDR 00F0H A
BTOD . . . . . . . C ADDR 00E8H A
BTOD0. . . . . . . C ADDR 0100H A
BTOD1. . . . . . . C ADDR 0102H A
BTOD2. . . . . . . C ADDR 0120H A
BTOD3. . . . . . . C ADDR 0126H A
BTOD4. . . . . . . C ADDR 0128H A
BTOD5. . . . . . . C ADDR 0146H A
DELAY. . . . . . . C ADDR 00DFH A
DELAY1 . . . . . . C ADDR 00CAH A
DELAY2 . . . . . . C ADDR 00D3H A
DIRR . . . . . . . C ADDR 0147H A
L1 . . . . . . . . C ADDR 00E1H A
L2 . . . . . . . . C ADDR 00E3H A
L3 . . . . . . . . C ADDR 00CCH A
L5 . . . . . . . . C ADDR 00CEH A
L6 . . . . . . . . C ADDR 00D5H A
L7 . . . . . . . . C ADDR 00D7H A
LOOP0. . . . . . . C ADDR 0036H A
LOOP1. . . . . . . C ADDR 0072H A
LOOP2. . . . . . . C ADDR 0079H A
LOOP3. . . . . . . C ADDR 007DH A
LOOP4. . . . . . . C ADDR 0089H A
LOOP5. . . . . . . C ADDR 008DH A
LOOP6. . . . . . . C ADDR 0091H A
LOOP7. . . . . . . C ADDR 0098H A
LOOP8. . . . . . . C ADDR 009FH A
MAIN . . . . . . . C ADDR 0030H A
OUT0 . . . . . . . C ADDR 017BH A
OUT1 . . . . . . . C ADDR 0153H A
OUT2 . . . . . . . C ADDR 0167H A
OUT3 . . . . . . . C ADDR 018FH A
OUT4 . . . . . . . C ADDR 01A3H A
OUT5 . . . . . . . C ADDR 01B7H A
OUT6 . . . . . . . C ADDR 01CBH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P3 . . . . . . . . D ADDR 00B0H A
QB00 . . . . . . . C ADDR 00EDH A
RE00 . . . . . . . C ADDR 00ADH A
RE000. . . . . . . C ADDR 006BH A
RE01 . . . . . . . C ADDR 00AFH A
RE10 . . . . . . . C ADDR 00BAH A
RE20 . . . . . . . C ADDR 00C0H A
READ . . . . . . . C ADDR 00A9H A
SEGPT. . . . . . . C ADDR 01D8H A
TI . . . . . . . . B ADDR 0098H.1 A
WRITE. . . . . . . C ADDR 008EH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -