📄 ds18b20.lst
字号:
01C3 1201B2 152 LCALL READ_BYTES
01C6 74F0 153 MOV A, #0F0H
01C8 5530 154 ANL A, 30H ; 舍去小数点后的数
01CA C4 155 SWAP A
01CB F560 156 MOV TEMP, A
01CD E530 157 MOV A, 30H
01CF 30E302 158 JNB ACC.3, GTEMP1 ; 四舍五入
01D2 0560 159 INC TEMP
01D4 7407 160 GTEMP1: MOV A, #07H
01D6 5531 161 ANL A, 31H ; 得到高位值
01D8 C4 162 SWAP A
01D9 2560 163 ADD A, TEMP
01DB F560 164 MOV TEMP, A
01DD 1201E5 165 LCALL HEX_BCD ; 转换为BCD码
01E0 D000 166 POP 00H
01E2 D0E0 167 POP ACC
01E4 22 168 RET
169
170 ; 将十六进制的温度数据转换成压缩BCD码
01E5 171 HEX_BCD:
01E5 900264 172 MOV DPTR, #TEMP_TAB
01E8 E560 173 MOV A, TEMP
01EA 93 174 MOVC A, @A+DPTR
01EB F560 175 MOV TEMP, A ; 保存转换结果
01ED 54F0 176 ANL A, #0F0H
01EF C4 177 SWAP A
01F0 F551 178 MOV 51H, A ; 十位数
01F2 E560 179 MOV A, TEMP
01F4 540F 180 ANL A, #0FH
01F6 F552 181 MOV 52H, A ; 个位数
01F8 22 182 RET
183
184 ; 内部配置
01F9 185 CONFIG18B20:
01F9 120150 186 LCALL INIT18B20
01FC 79CC 187 MOV R1, #0CCH ; 跳过ROM命令
01FE 120174 188 LCALL WRITEBYTE
0201 794E 189 MOV R1, #04EH ; 写scratchpad, 后跟3字节
0203 120174 190 LCALL WRITEBYTE
A51 MACRO ASSEMBLER DS18B20 05/23/2006 14:45:00 PAGE 4
0206 791E 191 MOV R1, #01EH ; 上限: 30(TH)
0208 120174 192 LCALL WRITEBYTE
020B 790A 193 MOV R1, #0AH ; 下限: 10(TL)
020D 120174 194 LCALL WRITEBYTE
0210 797F 195 MOV R1, #07FH ; 设置分辨率: 12位
0212 120174 196 LCALL WRITEBYTE
197
0215 120150 198 LCALL INIT18B20
0218 79CC 199 MOV R1, #0CCH
021A 120174 200 LCALL WRITEBYTE
021D 7948 201 MOV R1, #048H ; 保存设定值, 即写入EEROM
021F 120174 202 LCALL WRITEBYTE
203
0222 120150 204 LCALL INIT18B20
0225 79CC 205 MOV R1, #0CCH
0227 120174 206 LCALL WRITEBYTE
022A 79B8 207 MOV R1, #0B8H ; 回调设定值, 读取EEROM
022C 120174 208 LCALL WRITEBYTE
022F 22 209 RET
210
211 ; 读ID
0230 212 READID:
0230 120150 213 LCALL INIT18B20
0233 7933 214 MOV R1, #33H ; 读ROM命令
0235 120174 215 LCALL WRITEBYTE
0238 AC08 216 MOV R4, 8
023A 1201B2 217 LCALL READ_BYTES
023D 22 218 RET
219
220 ; 测量温度处理
023E 221 TEMP_RESULT:
023E 120150 222 LCALL INIT18B20
0241 79CC 223 MOV R1, #0CCH
0243 120174 224 LCALL WRITEBYTE
0246 7944 225 MOV R1, #044H ; 温度转换指令
0248 120174 226 LCALL WRITEBYTE
024B 7FFF 227 MOV R7, #0FFH
024D 12011E 228 LCALL DELAY
0250 00 229 NOP
0251 00 230 NOP
0252 120150 231 LCALL INIT18B20
0255 79CC 232 MOV R1, #0CCH
0257 120174 233 LCALL WRITEBYTE
025A 79BE 234 MOV R1, #0BEH ; 读取温度指令, 即读scratchpad
025C 120174 235 LCALL WRITEBYTE
025F 00 236 NOP
0260 1201BD 237 LCALL GETTEMP
0263 22 238 RET
239 ; HEX 转换为压缩 BCD 码表
0264 240 TEMP_TAB:
0264 00010203 241 DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H
0268 04050607
026C 0809
026E 10111213 242 DB 10H,11H,12H,13H,14H,15H,16H,17H,18H,19H
0272 14151617
0276 1819
0278 20212223 243 DB 20H,21H,22H,23H,24H,25H,26H,27H,28H,29H
027C 24252627
0280 2829
0282 30313233 244 DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
0286 34353637
028A 3839
028C 40414243 245 DB 40H,41H,42H,43H,44H,45H,46H,47H,48H,49H
0290 44454647
0294 4849
0296 50515253 246 DB 50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
A51 MACRO ASSEMBLER DS18B20 05/23/2006 14:45:00 PAGE 5
029A 54555657
029E 5859
247
248 ; 数码管显示七段译码表
02A0 3F065B4F 249 DISTAB: DB 3FH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH
02A4 666D7D07
02A8 7F6F
250
251 END
A51 MACRO ASSEMBLER DS18B20 05/23/2006 14:45:00 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
A_8255 . . . . . . N NUMB 7F00H A
B_8255 . . . . . . N NUMB 7F01H A
CONFIG18B20. . . . C ADDR 01F9H A
CON_8255 . . . . . N NUMB 7F03H A
DELAY. . . . . . . C ADDR 011EH A
DISPLAY. . . . . . C ADDR 0121H A
DISTAB . . . . . . C ADDR 02A0H A
DPLY1. . . . . . . C ADDR 012FH A
DQ . . . . . . . . B ADDR 00B0H.4 A
FLAG . . . . . . . B ADDR 0020H.0 A
GETTEMP. . . . . . C ADDR 01BDH A
GTEMP1 . . . . . . C ADDR 01D4H A
HEX_BCD. . . . . . C ADDR 01E5H A
INIT1. . . . . . . C ADDR 0169H A
INIT18B20. . . . . C ADDR 0150H A
INIT2. . . . . . . C ADDR 016BH A
P3 . . . . . . . . D ADDR 00B0H A
RBYTE1 . . . . . . C ADDR 0193H A
READBYTE . . . . . C ADDR 018DH A
READID . . . . . . C ADDR 0230H A
READ_BYTES . . . . C ADDR 01B2H A
R_BYTES1 . . . . . C ADDR 01B4H A
START. . . . . . . C ADDR 0100H A
STLP1. . . . . . . C ADDR 0116H A
TEMP . . . . . . . N NUMB 0060H A
TEMP_RESULT. . . . C ADDR 023EH A
TEMP_TAB . . . . . C ADDR 0264H A
WBYTE1 . . . . . . C ADDR 017AH A
WRITEBYTE. . . . . C ADDR 0174H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -