📄 ds18b20-dsy.lst
字号:
400 ;****************************************************
023F E527 401 CONVTEMP: MOV A,TEMPH ;判温度是否零下
0241 5480 402 ANL A,#80H
0243 6014 403 JZ TEMPC1 ;温度零上转
0245 C3 404 CLR C
0246 E526 405 MOV A,TEMPL ;二进制数求补(双字节)
0248 F4 406 CPL A ;取反加1
0249 2401 407 ADD A,#01H
024B F526 408 MOV TEMPL,A
024D E527 409 MOV A,TEMPH ;-
024F F4 410 CPL A
0250 3400 411 ADDC A,#00H
0252 F527 412 MOV TEMPH,A ;TEMPHC HI =符号位
0254 752A0B 413 MOV TEMPHC,#0BH
0257 8003 414 SJMP TEMPC11
415
0259 752A0A 416 TEMPC1: MOV TEMPHC,#0AH ;
025C E52A 417 TEMPC11: MOV A,TEMPHC
025E C4 418 SWAP A
025F F52A 419 MOV TEMPHC,A
0261 E526 420 MOV A,TEMPL
0263 540F 421 ANL A,#0FH ;乘0.0625
0265 90029F 422 MOV DPTR,#TEMPDOTTAB
0268 93 423 MOVC A,@A+DPTR
0269 F52B 424 MOV TEMPLC,A ;TEMPLC LOW=小数部分 BCD
425
026B E526 426 MOV A,TEMPL ;整数部分
026D 54F0 427 ANL A,#0F0H
026F C4 428 SWAP A
0270 F526 429 MOV TEMPL,A
0272 E527 430 MOV A,TEMPH
0274 540F 431 ANL A,#0FH
0276 C4 432 SWAP A
0277 4526 433 ORL A,TEMPL
0279 F52C 434 MOV TEMP_ZH,A ;组合后的值存入TEMP_ZH
027B 120324 435 LCALL HEX2BCD1
027E F526 436 MOV TEMPL,A
0280 54F0 437 ANL A,#0F0H
0282 C4 438 SWAP A
0283 452A 439 ORL A,TEMPHC ;TEMPHC LOW = 十位数 BCD
0285 F52A 440 MOV TEMPHC,A
0287 E526 441 MOV A,TEMPL
0289 540F 442 ANL A,#0FH
028B C4 443 SWAP A ;TEMPLC HI = 个位数 BCD
028C 452B 444 ORL A,TEMPLC
028E F52B 445 MOV TEMPLC,A
0290 EF 446 MOV A,R7
0291 600B 447 JZ TEMPC12
0293 540F 448 ANL A,#0FH
0295 C4 449 SWAP A
0296 FF 450 MOV R7,A
0297 E52A 451 MOV A,TEMPHC ;TEMPHC HI = 百位数 BCD
0299 540F 452 ANL A,#0FH
029B 4F 453 ORL A,R7
029C F52A 454 MOV TEMPHC,A
A51 MACRO ASSEMBLER DS18B20_DSY 03/29/2005 16:14:10 PAGE 8
029E 22 455 TEMPC12: RET
456 ;-----------------------------------------------------------
457 ; 小数部分码表
458 ;-----------------------------------------------------------
029F 00010102 459 TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
02A3 03030404
02A7 0506
02A9 06070808 460 DB 06H,07H,08H,08H,09H,09H
02AD 0909
461
462 ;===========================================================
463
464 ;显示区 BCD 码温度值刷新子程序
465
466 ;===========================================================
467
02AF E52B 468 DISPBCD: MOV A,TEMPLC
02B1 540F 469 ANL A,#0FH
02B3 F570 470 MOV 70H,A ;小数位
02B5 E52B 471 MOV A,TEMPLC
02B7 C4 472 SWAP A
02B8 540F 473 ANL A,#0FH
02BA F571 474 MOV 71H,A ;个位
02BC E52A 475 MOV A,TEMPHC
02BE 540F 476 ANL A,#0FH
02C0 F572 477 MOV 72H,A ;十位
02C2 E52A 478 MOV A,TEMPHC
02C4 C4 479 SWAP A
02C5 540F 480 ANL A,#0FH
02C7 F573 481 MOV 73H,A ;百位
02C9 E52A 482 MOV A,TEMPHC
02CB 54F0 483 ANL A,#0F0H
02CD B41002 484 CJNE A,#010H,DISPBCD0
02D0 8010 485 SJMP DISPBCD2
486
02D2 E52A 487 DISPBCD0: MOV A,TEMPHC
02D4 540F 488 ANL A,#0FH
02D6 700A 489 JNZ DISPBCD2 ;十位数是0
02D8 E52A 490 MOV A,TEMPHC
02DA C4 491 SWAP A
02DB 540F 492 ANL A,#0FH
02DD 75730A 493 MOV 73H,#0AH ;符号位不显示
02E0 F572 494 MOV 72H,A ;十位数显示符号
02E2 22 495 DISPBCD2: RET
496
497 ;***************************************************************
498
499 ; 温度显示子程序
500
501 ;***************************************************************
502 ;显示数据在70H - 73H 单元内,用4位共阳数码管显示,P0口输出段码数据,
503 ;P2 口作扫描控制,每个 LED 数码管亮 2MS 时间再逐位循环。
504
02E3 7970 505 DISP1: MOV R1,#70H ;指向显示数据首址
02E5 7D7F 506 MOV R5,#7FH ;扫描控制字初值
02E7 7580FF 507 PLAY: MOV P0,#0FFH
02EA ED 508 MOV A,R5 ;扫描字放入A
02EB F5A0 509 MOV P2,A
02ED E7 510 MOV A,@R1 ;取显示数据到A
02EE 90030D 511 MOV DPTR,#TAB ;取段码表地址
02F1 93 512 MOVC A,@A+DPTR ;查显示数据对应段码
02F2 F580 513 MOV P0,A ;段码放入P0口
02F4 ED 514 MOV A,R5
02F5 20E602 515 JB ACC.6,LOOP5 ;小数点处理
02F8 C287 516 CLR P0.7
02FA 12031B 517 LOOP5: LCALL DL_MS ;显示2MS
A51 MACRO ASSEMBLER DS18B20_DSY 03/29/2005 16:14:10 PAGE 9
02FD 09 518 INC R1 ;指向下一个地址
02FE ED 519 MOV A,R5 ;放回 R5 内
02FF 30E304 520 JNB ACC.3,ENDOUT ;ACC.3=0时一次显示结束
0302 03 521 RR A ;A 中数据循环左移
0303 FD 522 MOV R5,A ;放入 R5 中
0304 41E7 523 AJMP PLAY ;跳回 PLAY 循环
0306 7580FF 524 ENDOUT: MOV P0,#0FFH ;一次显示结束,P0口复位
0309 75A0FF 525 MOV P2,#0FFH ;P2口复位
030C 22 526 RET
527
030D 528 TAB:
030D C0F9A4B0 529 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0C7H,89H
0311 999282F8
0315 8090FFBF
0319 C789
530 ; “0" “1" “2" “3" “4"“5"“6"“7"“8"“9"“灭" “-" “L”“H"
531
031B 7E0A 532 DL_MS: MOV R6,#0AH ;2MS延时程序,LED 显示程序用
031D 7F64 533 DL1: MOV R7,#64H
031F DFFE 534 DL2: DJNZ R7,DL2
0321 DEFA 535 DJNZ R6,DL1
0323 22 536 RET
537
538 ;******************************************************
539 ;单字节十六进制转 BCD
540 ;******************************************************
0324 75F064 541 HEX2BCD1: MOV B,#064H
0327 84 542 DIV AB
0328 FF 543 MOV R7,A
0329 740A 544 MOV A,#0AH
032B C5F0 545 XCH A,B
032D 84 546 DIV AB
032E C4 547 SWAP A
032F 45F0 548 ORL A,B
0331 22 549 RET
550 ;===============================================
551 ;报警值 TH、TL 数据转换
552 ;===============================================
0332 553 ALERT_TL:
0332 75790C 554 MOV 79H,#0CH
0335 75780B 555 MOV 78H,#0BH
0338 E529 556 MOV A,TEMP_TL
033A 7877 557 MOV R0,#77H
033C 75F064 558 MOV B,#064H
033F 84 559 DIV AB
0340 B40103 560 CJNE A,#01H,ALERT_TL1
0343 F6 561 MOV @R0,A
0344 8003 562 JMP ALERT_TL2
0346 740B 563 ALERT_TL1: MOV A,#0BH ;显示“-”
0348 F6 564 MOV @R0,A
0349 740A 565 ALERT_TL2: MOV A,#0AH
034B C5F0 566 XCH A,B
034D 84 567 DIV AB
034E 18 568 DEC R0
034F F6 569 MOV @R0,A
0350 F57D 570 MOV 7DH,A
0352 18 571 DEC R0
0353 A6F0 572 MOV @R0,B
0355 85F07E 573 MOV 7EH,B
0358 22 574 RET
575 ;-----------------------------------------------
0359 576 ALERT_TH:
0359 75790D 577 MOV 79H,#0DH
035C 75780B 578 MOV 78H,#0BH
035F E528 579 MOV A,TEMP_TH
0361 7877 580 MOV R0,#77H
A51 MACRO ASSEMBLER DS18B20_DSY 03/29/2005 16:14:10 PAGE 10
0363 75F064 581 MOV B,#064H
0366 84 582 DIV AB
0367 B40103 583 CJNE A,#01H,ALERT_TH1
036A F6 584 MOV @R0,A
036B 8003 585 JMP ALERT_TH2
036D 740B 586 ALERT_TH1: MOV A,#0BH ;显示“-”
036F F6 587 MOV @R0,A
0370 740A 588 ALERT_TH2: MOV A,#0AH
0372 C5F0 589 XCH A,B
0374 84 590 DIV AB
0375 18 591 DEC R0
0376 F6 592 MOV @R0,A
0377 F57D 593 MOV 7DH,A
0379 18 594 DEC R0
037A A6F0 595 MOV @R0,B
037C 85F07E 596 MOV 7EH,B
037F 22 597 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -