?? ds18b20-溫度控制.lst
字號:
0244 E526 402 MOV A,TEMPL ;二進制數求補(雙字節)
0246 F4 403 CPL A ;取反加1
0247 2401 404 ADD A,#01H
0249 F526 405 MOV TEMPL,A
024B E527 406 MOV A,TEMPH ;-
024D F4 407 CPL A
024E 3400 408 ADDC A,#00H
0250 F527 409 MOV TEMPH,A ;TEMPHC HI =符號位
0252 752A0B 410 MOV TEMPHC,#0BH
0255 8003 411 SJMP TEMPC11
412
0257 752A0A 413 TEMPC1: MOV TEMPHC,#0AH ;
025A E52A 414 TEMPC11: MOV A,TEMPHC
025C C4 415 SWAP A
025D F52A 416 MOV TEMPHC,A
025F E526 417 MOV A,TEMPL
0261 540F 418 ANL A,#0FH
0263 90029D 419 MOV DPTR,#TEMPDOTTAB
0266 93 420 MOVC A,@A+DPTR
0267 F52B 421 MOV TEMPLC,A ;TEMPLC LOW=小數部分 BCD
422
0269 E526 423 MOV A,TEMPL ;整數部分
026B 54F0 424 ANL A,#0F0H
026D C4 425 SWAP A
026E F526 426 MOV TEMPL,A
0270 E527 427 MOV A,TEMPH
0272 540F 428 ANL A,#0FH
0274 C4 429 SWAP A
0275 4526 430 ORL A,TEMPL
0277 F52C 431 MOV TEMP_ZH,A ;組合后的值存入TEMP_ZH
0279 120322 432 LCALL HEX2BCD1
027C F526 433 MOV TEMPL,A
027E 54F0 434 ANL A,#0F0H
0280 C4 435 SWAP A
0281 452A 436 ORL A,TEMPHC ;TEMPHC LOW = 十位數 BCD
0283 F52A 437 MOV TEMPHC,A
0285 E526 438 MOV A,TEMPL
0287 540F 439 ANL A,#0FH
0289 C4 440 SWAP A ;TEMPLC HI = 個位數 BCD
028A 452B 441 ORL A,TEMPLC
028C F52B 442 MOV TEMPLC,A
028E EF 443 MOV A,R7
028F 600B 444 JZ TEMPC12
0291 540F 445 ANL A,#0FH
0293 C4 446 SWAP A
0294 FF 447 MOV R7,A
0295 E52A 448 MOV A,TEMPHC ;TEMPHC HI = 百位數 BCD
0297 540F 449 ANL A,#0FH
0299 4F 450 ORL A,R7
029A F52A 451 MOV TEMPHC,A
029C 22 452 TEMPC12: RET
453 ;-----------------------------------------------------------
454 ; 小數部分碼表
A51 MACRO ASSEMBLER DS18B20_溫禵縚制 12/20/2006 22:04:19 PAGE 8
455 ;-----------------------------------------------------------
029D 00010102 456 TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
02A1 03030404
02A5 0506
02A7 06070808 457 DB 06H,07H,08H,08H,09H,09H
02AB 0909
458
459 ;===========================================================
460
461 ;顯示區 BCD 碼溫度值刷新子程序
462
463 ;===========================================================
464
02AD E52B 465 DISPBCD: MOV A,TEMPLC
02AF 540F 466 ANL A,#0FH
02B1 F570 467 MOV 70H,A ;小數位
02B3 E52B 468 MOV A,TEMPLC
02B5 C4 469 SWAP A
02B6 540F 470 ANL A,#0FH
02B8 F571 471 MOV 71H,A ;個位
02BA E52A 472 MOV A,TEMPHC
02BC 540F 473 ANL A,#0FH
02BE F572 474 MOV 72H,A ;十位
02C0 E52A 475 MOV A,TEMPHC
02C2 C4 476 SWAP A
02C3 540F 477 ANL A,#0FH
02C5 F573 478 MOV 73H,A ;百位
02C7 E52A 479 MOV A,TEMPHC
02C9 54F0 480 ANL A,#0F0H
02CB B41002 481 CJNE A,#010H,DISPBCD0
02CE 8010 482 SJMP DISPBCD2
483
02D0 E52A 484 DISPBCD0: MOV A,TEMPHC
02D2 540F 485 ANL A,#0FH
02D4 700A 486 JNZ DISPBCD2 ;十位數是0
02D6 E52A 487 MOV A,TEMPHC
02D8 C4 488 SWAP A
02D9 540F 489 ANL A,#0FH
02DB 75730A 490 MOV 73H,#0AH ;符號位不顯示
02DE F572 491 MOV 72H,A ;十位數顯示符號
02E0 22 492 DISPBCD2: RET
493
494 ;***************************************************************
495
496 ; 溫度顯示子程序
497
498 ;***************************************************************
499 ;用5位共陽數碼管顯示,數據在70H-73H單元內,字符在74H內
500 ;P0口輸出段碼數據,P2 口作掃描控制,
501 ;每個 LED 數碼管亮 2MS 時間再逐位循環。
502 ;================================================================
02E1 503 TEMP_PLAER:
02E1 7970 504 MOV R1,#70H ;指向顯示數據首址
02E3 7D7F 505 MOV R5,#7FH ;掃描控制字初值
02E5 7580FF 506 PLAY: MOV P0,#0FFH
02E8 ED 507 MOV A,R5 ;掃描字放入A
02E9 F5A0 508 MOV P2,A
02EB E7 509 MOV A,@R1 ;取顯示數據到A
02EC 90030B 510 MOV DPTR,#TAB ;取段碼表地址
02EF 93 511 MOVC A,@A+DPTR ;查顯示數據對應段碼
02F0 F580 512 MOV P0,A ;段碼放入P0口
02F2 ED 513 MOV A,R5
02F3 20E602 514 JB ACC.6,LOOP5 ;小數點處理
02F6 C287 515 CLR P0.7
02F8 120319 516 LOOP5: LCALL DL_MS ;顯示2MS
02FB 09 517 INC R1 ;指向下一個地址
A51 MACRO ASSEMBLER DS18B20_溫禵縚制 12/20/2006 22:04:19 PAGE 9
02FC ED 518 MOV A,R5 ;放回 R5 內
02FD 30E304 519 JNB ACC.3,ENDOUT ;ACC.3=0時一次顯示結束
0300 03 520 RR A ;A 中數據循環左移
0301 FD 521 MOV R5,A ;放入 R5 中
0302 41E5 522 AJMP PLAY ;跳回 PLAY 循環
0304 7580FF 523 ENDOUT: MOV P0,#0FFH ;一次顯示結束,P0口復位
0307 75A0FF 524 MOV P2,#0FFH ;P2口復位
030A 22 525 RET
526
030B 527 TAB:
030B C0F9A4B0 528 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0C7H,89H
030F 999282F8
0313 8090FFBF
0317 C789
529 ; “0" “1" “2" “3" “4"“5"“6"“7"“8"“9"“滅" “-" “L”“H"
530
0319 7E0A 531 DL_MS: MOV R6,#0AH ;2MS延時程序,LED 顯示程序用
031B 7F64 532 DL1: MOV R7,#64H
031D DFFE 533 DL2: DJNZ R7,DL2
031F DEFA 534 DJNZ R6,DL1
0321 22 535 RET
536
537 ;******************************************************
538 ;單字節十六進制轉 BCD
539 ;******************************************************
0322 75F064 540 HEX2BCD1: MOV B,#064H
0325 84 541 DIV AB
0326 FF 542 MOV R7,A
0327 740A 543 MOV A,#0AH
0329 C5F0 544 XCH A,B
032B 84 545 DIV AB
032C C4 546 SWAP A
032D 45F0 547 ORL A,B
032F 22 548 RET
549 ;===============================================
550 ;報警值 TH、TL 數據轉換
551 ;===============================================
0330 552 ALERT_TL:
0330 75790C 553 MOV 79H,#0CH ;字符"L"
0333 75780B 554 MOV 78H,#0BH ;字符”-“
0336 E529 555 MOV A,TEMP_TL
0338 7877 556 MOV R0,#77H
033A 75F064 557 MOV B,#064H
033D 84 558 DIV AB
033E B40103 559 CJNE A,#01H,ALERT_TL1
0341 F6 560 MOV @R0,A
0342 8003 561 JMP ALERT_TL2
0344 740B 562 ALERT_TL1: MOV A,#0BH ;顯示“-”
0346 F6 563 MOV @R0,A
0347 740A 564 ALERT_TL2: MOV A,#0AH
0349 C5F0 565 XCH A,B
034B 84 566 DIV AB
034C 18 567 DEC R0
034D F6 568 MOV @R0,A
034E F57D 569 MOV 7DH,A
0350 18 570 DEC R0
0351 A6F0 571 MOV @R0,B
0353 85F07E 572 MOV 7EH,B
0356 22 573 RET
574 ;-----------------------------------------------
0357 575 ALERT_TH:
0357 75790D 576 MOV 79H,#0DH ;字符”H“
035A 75780B 577 MOV 78H,#0BH ;字符”-“
035D E528 578 MOV A,TEMP_TH
035F 7877 579 MOV R0,#77H
0361 75F064 580 MOV B,#064H
A51 MACRO ASSEMBLER DS18B20_溫禵縚制 12/20/2006 22:04:19 PAGE 10
0364 84 581 DIV AB
0365 B40103 582 CJNE A,#01H,ALERT_TH1 ;百位數不為1
0368 F6 583 MOV @R0,A
0369 8003 584 JMP ALERT_TH2
036B 740B 585 ALERT_TH1: MOV A,#0BH ;顯示“-”
036D F6 586 MOV @R0,A
036E 740A 587 ALERT_TH2: MOV A,#0AH
0370 C5F0 588 XCH A,B
0372 84 589 DIV AB
0373 18 590 DEC R0
0374 F6 591 MOV @R0,A
0375 F57D 592 MOV 7DH,A
0377 18 593 DEC R0
0378 A6F0 594 MOV @R0,B
037A 85F07E 595 MOV 7EH,B
037D 22 596 RET
597 ;==========================================================
598 ;報警值顯示子程序
599 ;用5位共陽數碼管顯示,數據在75H-77H單元內,字符在78H-79H內
600 ;P0口輸出段碼數據,P2 口作掃描控制,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -