📄 18b20.lst
字号:
01E3 7C02 265 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
01E5 7931 266 MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
01E7 267 RE002:
01E7 7A08 268 MOV R2,#8
01E9 269 RE012:
01E9 C3 270 CLR C
01EA D291 271 SETB P1.1H
01EC 00 272 NOP
01ED 00 273 NOP
01EE C291 274 CLR P1.1H
01F0 00 275 NOP
01F1 00 276 NOP
01F2 00 277 NOP
01F3 D291 278 SETB P1.1H
01F5 7B07 279 MOV R3,#7
01F7 DBFE 280 DJNZ R3,$
01F9 A291 281 MOV C,P1.1H
01FB 7B17 282 MOV R3,#23
01FD DBFE 283 DJNZ R3,$
01FF 13 284 RRC A
0200 DAE7 285 DJNZ R2,RE012
0202 F7 286 MOV @R1,A
0203 19 287 DEC R1
0204 DCE1 288 DJNZ R4,RE002
0206 22 289 RET
290 ;=======================================
0207 291 INIT_18202:
0207 D291 292 SETB P1.1H
0209 00 293 NOP
020A C291 294 CLR P1.1H
020C 78FA 295 MOV R0,#250
020E 296 TSR12:
020E D8FE 297 DJNZ R0,TSR12 ; 延时520us
0210 D291 298 SETB P1.1H
0212 7825 299 MOV R0,#25H ;96US-25H
0214 300 TSR22:
0214 D8FE 301 DJNZ R0,TSR22
0216 309103 302 JNB P1.1H,TSR32;如D0为低则复位成功,DS18B20存在
0219 020221 303 LJMP TSR42 ; 延时
021C 304 TSR32:
021C D200 305 SETB 00H ; 置标志位,表示DS1820存在
021E 020226 306 LJMP TSR52
0221 307 TSR42:
0221 C200 308 CLR 00H ; 清标志位,表示DS1820不存在
0223 02022A 309 LJMP TSR72
0226 310 TSR52:
0226 786B 311 MOV R0,#06BH ;200US
0228 312 TSR62:
0228 D8FE 313 DJNZ R0,TSR62 ; 延时
022A 314 TSR72:
022A D291 315 SETB P1.1H ;拉高总线
022C 22 316 RET
317 ;===============================
022D 318 GET_TEMPER3:
022D D292 319 SETB P1.2H ; 定时入口
022F 1202BB 320 BCD3: LCALL INIT_18203
0232 200003 321 JB 00H,S223
0235 02022F 322 LJMP BCD3 ; 若DS18B20不存在则返回
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 6
323
0238 120665 324 S223: LCALL DELAY1
023B 74CC 325 MOV A,#0CCH ; 跳过ROM匹配------0CC命令
023D 12027F 326 LCALL WRITE_18203
0240 7444 327 MOV A,#44H ; 发出温度转换命令
0242 12027F 328 LCALL WRITE_18203
0245 00 329 NOP
0246 120665 330 LCALL DELAY1
0249 1202BB 331 CBA3:LCALL INIT_18203
024C 200003 332 JB 00H,ABC3
024F 020249 333 LJMP CBA3
0252 120665 334 ABC3:LCALL DELAY1
0255 74CC 335 MOV A,#0CCH ; 跳过ROM匹配
0257 12027F 336 LCALL WRITE_18203
025A 74BE 337 MOV A,#0BEH ; 发出读温度命令
025C 12027F 338 LCALL WRITE_18203
025F 120297 339 LCALL READ_182003 ;READ_1820
0262 22 340 RET
341 ;==============================
0263 342 READ_18203:
0263 7A08 343 MOV R2,#8
0265 344 RE13:
0265 C3 345 CLR C
0266 D292 346 SETB P1.2H
0268 00 347 NOP
0269 00 348 NOP
026A C292 349 CLR P1.2H
026C 00 350 NOP
026D 00 351 NOP
026E 00 352 NOP
026F D292 353 SETB P1.2H
0271 7B07 354 MOV R3,#7
0273 DBFE 355 DJNZ R3,$
0275 A292 356 MOV C,P1.2H
0277 7B17 357 MOV R3,#23
0279 DBFE 358 DJNZ R3,$
027B 13 359 RRC A
027C DAE7 360 DJNZ R2,RE13
027E 22 361 RET
362 ;=============================
027F 363 WRITE_18203:
027F 7A08 364 MOV R2,#8
0281 C3 365 CLR C
0282 366 WR13:
0282 C292 367 CLR P1.2H
0284 7B06 368 MOV R3,#6
0286 DBFE 369 DJNZ R3,$
0288 13 370 RRC A
0289 9292 371 MOV P1.2H,C
028B 7B17 372 MOV R3,#23
028D DBFE 373 DJNZ R3,$
028F D292 374 SETB P1.2H
0291 00 375 NOP
0292 DAEE 376 DJNZ R2,WR13
0294 D292 377 SETB P1.2H
0296 22 378 RET
379 ;=======================================
0297 380 READ_182003:
0297 7C02 381 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
0299 7931 382 MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
029B 383 RE003:
029B 7A08 384 MOV R2,#8
029D 385 RE013:
029D C3 386 CLR C
029E D292 387 SETB P1.2H
02A0 00 388 NOP
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 7
02A1 00 389 NOP
02A2 C292 390 CLR P1.2H
02A4 00 391 NOP
02A5 00 392 NOP
02A6 00 393 NOP
02A7 D292 394 SETB P1.2H
02A9 7B07 395 MOV R3,#7
02AB DBFE 396 DJNZ R3,$
02AD A292 397 MOV C,P1.2H
02AF 7B17 398 MOV R3,#23
02B1 DBFE 399 DJNZ R3,$
02B3 13 400 RRC A
02B4 DAE7 401 DJNZ R2,RE013
02B6 F7 402 MOV @R1,A
02B7 19 403 DEC R1
02B8 DCE1 404 DJNZ R4,RE003
02BA 22 405 RET
406 ;=======================================
02BB 407 INIT_18203:
02BB D292 408 SETB P1.2H
02BD 00 409 NOP
02BE C292 410 CLR P1.2H
02C0 78FA 411 MOV R0,#250
02C2 412 TSR13:
02C2 D8FE 413 DJNZ R0,TSR13 ; 延时520us
02C4 D292 414 SETB P1.2H
02C6 7825 415 MOV R0,#25H ;96US-25H
02C8 416 TSR23:
02C8 D8FE 417 DJNZ R0,TSR23
02CA 309203 418 JNB P1.2H,TSR33;如D0为低则复位成功,DS18B20存在
02CD 0202D5 419 LJMP TSR43 ; 延时
02D0 420 TSR33:
02D0 D200 421 SETB 00H ; 置标志位,表示DS1820存在
02D2 0202DA 422 LJMP TSR53
02D5 423 TSR43:
02D5 C200 424 CLR 00H ; 清标志位,表示DS1820不存在
02D7 0202DE 425 LJMP TSR73
02DA 426 TSR53:
02DA 786B 427 MOV R0,#06BH ;200US
02DC 428 TSR63:
02DC D8FE 429 DJNZ R0,TSR63 ; 延时
02DE 430 TSR73:
02DE D292 431 SETB P1.2H ;拉高总线
02E0 22 432 RET
433 ;===============================
02E1 434 GET_TEMPER4:
02E1 D293 435 SETB P1.3H ; 定时入口
02E3 12036F 436 BCD4: LCALL INIT_18204
02E6 200003 437 JB 00H,S224
02E9 0202E3 438 LJMP BCD4 ; 若DS18B20不存在则返回
439
02EC 120665 440 S224: LCALL DELAY1
02EF 74CC 441 MOV A,#0CCH ; 跳过ROM匹配------0CC命令
02F1 120333 442 LCALL WRITE_18204
02F4 7444 443 MOV A,#44H ; 发出温度转换命令
02F6 120333 444 LCALL WRITE_18204
02F9 00 445 NOP
02FA 120665 446 LCALL DELAY1
02FD 12036F 447 CBA4:LCALL INIT_18204
0300 200003 448 JB 00H,ABC4
0303 0202FD 449 LJMP CBA4
0306 120665 450 ABC4:LCALL DELAY1
0309 74CC 451 MOV A,#0CCH ; 跳过ROM匹配
030B 120333 452 LCALL WRITE_18204
030E 74BE 453 MOV A,#0BEH ; 发出读温度命令
0310 120333 454 LCALL WRITE_18204
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 8
0313 12034B 455 LCALL READ_182004 ;READ_1820
0316 22 456 RET
457 ;==============================
0317 458 READ_18204:
0317 7A08 459 MOV R2,#8
0319 460 RE14:
0319 C3 461 CLR C
031A D293 462 SETB P1.3H
031C 00 463 NOP
031D 00 464 NOP
031E C293 465 CLR P1.3H
0320 00 466 NOP
0321 00 467 NOP
0322 00 468 NOP
0323 D293 469 SETB P1.3H
0325 7B07 470 MOV R3,#7
0327 DBFE 471 DJNZ R3,$
0329 A293 472 MOV C,P1.3H
032B 7B17 473 MOV R3,#23
032D DBFE 474 DJNZ R3,$
032F 13 475 RRC A
0330 DAE7 476 DJNZ R2,RE14
0332 22 477 RET
478 ;=============================
0333 479 WRITE_18204:
0333 7A08 480 MOV R2,#8
0335 C3 481 CLR C
0336 482 WR14:
0336 C293 483 CLR P1.3H
0338 7B06 484 MOV R3,#6
033A DBFE 485 DJNZ R3,$
033C 13 486 RRC A
033D 9293 487 MOV P1.3H,C
033F 7B17 488 MOV R3,#23
0341 DBFE 489 DJNZ R3,$
0343 D293 490 SETB P1.3H
0345 00 491 NOP
0346 DAEE 492 DJNZ R2,WR14
0348 D293 493 SETB P1.3H
034A 22 494 RET
495 ;=======================================
034B 496 READ_182004:
034B 7C02 497 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
034D 7931 498 MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
034F 499 RE004:
034F 7A08 500 MOV R2,#8
0351 501 RE014:
0351 C3 502 CLR C
0352 D293 503 SETB P1.3H
0354 00 504 NOP
0355 00 505 NOP
0356 C293 506 CLR P1.3H
0358 00 507 NOP
0359 00 508 NOP
035A 00 509 NOP
035B D293 510 SETB P1.3H
035D 7B07 511 MOV R3,#7
035F DBFE 512 DJNZ R3,$
0361 A293 513 MOV C,P1.3H
0363 7B17 514 MOV R3,#23
0365 DBFE 515 DJNZ R3,$
0367 13 516 RRC A
0368 DAE7 517 DJNZ R2,RE014
036A F7 518 MOV @R1,A
036B 19 519 DEC R1
036C DCE1 520 DJNZ R4,RE004
A51 MACRO ASSEMBLER 18B20 02/16/2007 16:00:49 PAGE 9
036E 22 521 RET
522 ;=======================================
036F 523 INIT_18204:
036F D293 524 SETB P1.3H
0371 00 525 NOP
0372 C293 526 CLR P1.3H
0374 78FA 527 MOV R0,#250
0376 528 TSR14:
0376 D8FE 529 DJNZ R0,TSR14 ; 延时520us
0378 D293 530 SETB P1.3H
037A 7825 531 MOV R0,#25H ;96US-25H
037C 532 TSR24:
037C D8FE 533 DJNZ R0,TSR24
037E 309303 534 JNB P1.3H,TSR34;如D0为低则复位成功,DS18B20存在
0381 020389 535 LJMP TSR44 ; 延时
0384 536 TSR34:
0384 D200 537 SETB 00H ; 置标志位,表示DS1820存在
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -