📄 1
字号:
057F 202020 CHINESE6: Db "--05.11.19制作 " ;℃
;
;********************************************************************************
;
;
;**********************************************************
;以下温度测量子程序区
;
;**********************************************************
; RESET DS18B20
;**********************************************************
0582 D293 INITDS1820: SETB TEMPDIN ;
0584 00 NOP ;
0585 00 NOP ;
0586 C293 CLR TEMPDIN ;
0588 7EA0 MOV R6, #0A0H ; DELAY 480us
058A DEFE DJNZ R6, $
058C 7EA0 MOV R6, #0A0H
058E DEFE DJNZ R6, $ ;
0590 D293 SETB TEMPDIN ;
0592 7E32 MOV R6, #32H ; DELAY 70us
0594 DEFE DJNZ R6, $ ;
0596 7E3C MOV R6,#3CH
0598 A293 LOOP1820: MOV C, TEMPDIN ;
059A 4009 JC INITDS1820OUT ;
059C DEFA DJNZ R6,LOOP1820
059E 7E64 MOV R6, #064H ; DELAY 200us
05A0 DEFE DJNZ R6, $ ;
05A2 80DE SJMP INITDS1820 ;
05A4 22 RET ;
;
05A5 D293 INITDS1820OUT: SETB TEMPDIN ;
05A7 22 RET ;
;
;
;**********************************************************
; 读DS18B20的程序, 从DS18B20中读出一个字节的数据
;**********************************************************
05A8 7F08 READDS1820: MOV R7, #08H ;
05AA D293 SETB TEMPDIN ;
05AC 00 NOP ;
05AD 00 NOP ;
D:\温度时钟器示范程序\25.ASM
页 18
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
05AE C293 READDS1820LOOP: CLR TEMPDIN ;
05B0 00 NOP ;
05B1 00 NOP ;
05B2 00 NOP ;
05B3 D293 SETB TEMPDIN ;
05B5 7E07 MOV R6, #07H ; DELAY 15us
05B7 DEFE DJNZ R6, $ ;
05B9 A293 MOV C, TEMPDIN ;
05BB 7E3C MOV R6, #3CH ; DELAY 120us
05BD DEFE DJNZ R6, $ ;
05BF 13 RRC A ;
05C0 D293 SETB TEMPDIN ;
05C2 DFEA DJNZ R7, READDS1820LOOP ;
05C4 7E3C MOV R6, #3CH ; DELAY 120us
05C6 DEFE DJNZ R6, $ ;
05C8 22 RET ;
;
;
;**********************************************************
; 写DS18B20的程序, 从DS18B20中写一个字节的数据
;**********************************************************
05C9 7F08 WRITEDS1820: MOV R7, #08H ;
05CB D293 SETB TEMPDIN ;
05CD 00 NOP ;
05CE 00 NOP ;
05CF C293 WRITEDS1820LOP: CLR TEMPDIN ;
05D1 7E07 MOV R6, #07H ; DELAY 15us
05D3 DEFE DJNZ R6, $ ;
05D5 13 RRC A ;
05D6 9293 MOV TEMPDIN, C ;
05D8 7E34 MOV R6, #34H ; DELAY 104us
05DA DEFE DJNZ R6, $ ;
05DC D293 SETB TEMPDIN ;
05DE DFEF DJNZ R7, WRITEDS1820LOP ;
05E0 22 RET ;
;
;
;**********************************************************
; READ TEMP
;**********************************************************
05E1 120582 READTEMP: LCALL INITDS1820 ;
05E4 74CC MOV A, #0CCH ;
05E6 1205C9 LCALL WRITEDS1820 ; SKIP ROM
05E9 7E34 MOV R6, #34H ; DELAY 104us
05EB DEFE DJNZ R6, $ ;
05ED 7444 MOV A, #44H ;
05EF 1205C9 LCALL WRITEDS1820 ; START CONVERSION
05F2 7E34 MOV R6, #34H ; DELAY 104us
D:\温度时钟器示范程序\25.ASM
页 19
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
05F4 DEFE DJNZ R6, $ ;
05F6 22 RET ;
;
05F7 120582 READTEMP1: LCALL INITDS1820 ;
05FA 74CC MOV A, #0CCH ;
05FC 1205C9 LCALL WRITEDS1820 ; SKIP ROM
05FF 7E34 MOV R6, #34H ; DELAY 104us
0601 DEFE DJNZ R6, $ ;
0603 74BE MOV A, #0BEH ;
0605 1205C9 LCALL WRITEDS1820 ; SCRATCHPAD
0608 7E34 MOV R6, #34H ; DELAY 104us
060A DEFE DJNZ R6, $ ;
060C 7D09 MOV R5, #09H ;
060E 7830 MOV R0, #TEMPHEAD ;
0610 75F000 MOV B,#00H
0613 1205A8 READTEMP2: LCALL READDS1820 ;
0616 F6 MOV @R0, A ;
0617 08 INC R0 ;
0618 120710 READTEMP21: LCALL CRC8CAL ;
061B DDF6 DJNZ R5, READTEMP2 ;
061D E5F0 MOV A, B ;
061F 7008 JNZ READTEMPOUT ;
0621 E530 MOV A, TEMPHEAD + 0 ;
0623 F526 MOV TEMPL, A ;
0625 E531 MOV A, TEMPHEAD + 1 ;
0627 F527 MOV TEMPH, A ;
0629 22 READTEMPOUT: RET ;
;
;
;**********************************************************
; 处理温度 BCD 码子程序
;**********************************************************
062A E527 CONVTEMP: MOV A, TEMPH ;
062C 5480 ANL A, #80H ;
062E 6014 JZ TEMPC1 ;
0630 C3 CLR C ;
0631 E526 MOV A, TEMPL ;
0633 F4 CPL A ;
0634 2401 ADD A, #01H ;
0636 F526 MOV TEMPL, A ;
0638 E527 MOV A, TEMPH ; -
063A F4 CPL A ;
063B 3400 ADDC A, #00H ;
063D F527 MOV TEMPH, A ; TEMPHC HI = 符号位
063F 752810 MOV TEMPHC, #10H ;
0642 8003 SJMP TEMPC11 ;
;
0644 75280F TEMPC1: MOV TEMPHC, #0FH ; +
D:\温度时钟器示范程序\25.ASM
页 20
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0647 E528 TEMPC11: MOV A,TEMPHC
0649 C4 SWAP A
064A F528 MOV TEMPHC,A
064C E526 MOV A, TEMPL ;
064E 540F ANL A, #0FH ; 乘 0.0625
0650 900688 MOV DPTR, #TEMPDOTTAB ;
0653 93 MOVC A, @A + DPTR ;
0654 F529 MOV TEMPLC, A ; TEMPLC LOW = 小数部分 BCD
;
0656 E526 MOV A, TEMPL ; 整数部分
0658 54F0 ANL A, #0F0H ;
065A C4 SWAP A ;
065B F526 MOV TEMPL, A ;
065D E527 MOV A, TEMPH ;
065F 540F ANL A, #0FH ;
0661 C4 SWAP A ;
0662 4526 ORL A, TEMPL ;
0664 120702 LCALL HEX2BCD1 ;
0667 F526 MOV TEMPL, A ;
0669 54F0 ANL A, #0F0H ;
066B C4 SWAP A ;
066C 4528 ORL A, TEMPHC ; TEMPHC LOW = 十位数 BCD
066E F528 MOV TEMPHC, A ;
0670 E526 MOV A, TEMPL ;
0672 540F ANL A, #0FH ;
0674 C4 SWAP A ; TEMPLC HI = 个位数 BCD
0675 4529 ORL A, TEMPLC ;
0677 F529 MOV TEMPLC, A ;
0679 EF MOV A, R7 ;
067A 600B JZ TEMPC12 ;
067C 540F ANL A, #0FH ;
067E C4 SWAP A ;
067F FF MOV R7, A ;
0680 E528 MOV A, TEMPHC ; TEMPHC HI = 百位数 BCD
0682 540F ANL A, #0FH ;
0684 4F ORL A, R7 ;
0685 F528 MOV TEMPHC, A ;
0687 22 TEMPC12: RET ;
;
;**********************************************************
; 小数部分码表
;**********************************************************
0688 000101
068B 020303
068E 040405
0691 06 TEMPDOTTAB: DB 00H, 01H, 01H, 02H, 03H, 03H, 04H, 04H, 05H, 06H
;
0692 060708
D:\温度时钟器示范程序\25.ASM
页 21
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0695 080909 DB 06H, 07H, 08H, 08H, 09H, 09H
;
0698 22 RET
;
TEMPP:
0699 7490 MOV A,#90H ;第二行左第一个字开始
069B 12044B LCALL WRITE_COM
069E 90053F MOV DPTR,#CHINESE3 ;16*16点阵“温度-----”
06A1 1204D7 LCALL WRITE_HZ
06A4 22 RET
;
;**********************************************************
; 温度值涮新子程序
;**********************************************************
;
06A5 E529 DISPTEMP: MOV A, TEMPLC ;
06A7 540F ANL A, #0FH ;
06A9 F566 MOV 66H, A ;
06AB E529 MOV A, TEMPLC ;
06AD C4 SWAP A ;
06AE 540F ANL A, #0FH ;
06B0 F564 MOV 64H, A ;
06B2 E528 MOV A, TEMPHC ;
06B4 540F ANL A, #0FH ;
06B6 F563 MOV 63H, A ;
06B8 E528 MOV A, TEMPHC ;
06BA C4 SWAP A ;
06BB 540F ANL A, #0FH ;
06BD F562 MOV 62H, A ;
06BF E528 MOV A, TEMPHC ;
06C1 54F0 ANL A, #0F0H ;
06C3 B41002 CJNE A, #010H, DISPBCD0 ;
06C6 8010 SJMP DISPBCD2 ;
;
06C8 E528 DISPBCD0: MOV A, TEMPHC ;
06CA 540F ANL A, #0FH ;
06CC 700A JNZ DISPBCD2 ; 十位数是零
06CE E528 MOV A, TEMPHC ;
06D0 C4 SWAP A ;
06D1 540F ANL A, #0FH ;
06D3 75620F MOV 62H, #0FH ; 符号位不显示
06D6 F563 MOV 63H, A ; 十位数显示符号
DISPBCD2: ;
06D8 75600A MOV 60H,#0AH ; :
06DB 75610F MOV 61H,#0FH ; 空
06DE 756511 MOV 65H,#11H ; 小数点.
06E1 75670F MOV 67H,#0FH ; 空
D:\温度时钟器示范程序\25.ASM
页 22
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;
;以下将60H-67H温度信息写入液晶LCD
06E4 C0D0 TEMPUP: PUSH PSW
06E6 75D008 MOV PSW,#08H
06E9 7492 MOV A,#92H ;第二行左第3个字开始
06EB 12044B LCALL WRITE_COM
06EE 7960 MOV R1,#60H ;将60-67H时间数据查出字码写入LCD
06F0 9004F9 MOV DPTR,#TABLE1
06F3 7A08 MOV R2,#08H ; 查8次
06F5 7400 MOV A,#00H
06F7 E7 TEMPLOP:MOV A,@R1 ;
06F8 93 MOVC A,@A+DPTR
06F9 120484 LCALL WRITE_DAT
06FC 09 INC R1
06FD DAF8 DJNZ R2,TEMPLOP ;
06FF D0D0 POP PSW
0701 22 RET
;
;**********************************************************
; 单字节 16 进制转 BCD
;**********************************************************
0702 75F064 HEX2BCD1: MOV B, #064H ; 16 进制 -> BCD
0705 84 DIV AB ; B = A % 100
0706 FF MOV R7, A ; R7 = 百位数
0707 740A MOV A, #0AH ;
0709 C5F0 XCH A, B ;
070B 84 DIV AB ; B = A % B
070C C4 SWAP A ;
070D 45F0 ORL A, B ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -