📄 ds18b20.lst
字号:
A51 MACRO ASSEMBLER DS18B20 05/23/2006 14:45:00 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN DS18B20.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE DS18B20.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;================================================================
2 ; 文件名称: DS18B20.ASM
3 ; 功能描述:
4 ;================================================================
7F00 5 A_8255 EQU 7F00H ; 8255寄存器定义
7F01 6 B_8255 EQU 7F01H
7F03 7 CON_8255 EQU 7F03H
8
00B4 9 DQ BIT P3.4 ; P3.4 / T0
0000 10 FLAG BIT 00H
11
0060 12 TEMP EQU 60H
13
0000 14 ORG 0000H
0000 020100 15 LJMP START
16
0100 17 ORG 0100H
0100 00 18 START: NOP
0101 752000 19 MOV 20H, #00H
0104 755000 20 MOV 50H, #00H ; 清显示缓冲(50H为高位)
0107 755100 21 MOV 51H, #00H
010A 755200 22 MOV 52H, #00H
23 ;LCALL READID ; 读取器件ID
24 ;LCALL CONFIG18B20 ; 配置器件
010D 7481 25 MOV A, #81H
010F 907F03 26 MOV DPTR, #CON_8255 ; 初始化8255
0112 F0 27 MOVX @DPTR, A
0113 120121 28 LCALL DISPLAY ; 显示
0116 12023E 29 STLP1: LCALL TEMP_RESULT ; 得到温度值
0119 120121 30 LCALL DISPLAY ; 显示温度
011C 80F8 31 SJMP STLP1
32
33 ; 延时子程序
34 ; 入口参数: R7
011E DFFE 35 DELAY: DJNZ R7, DELAY
0120 22 36 RET
37
38 ; 显示子程序
0121 39 DISPLAY:
0121 C0E0 40 PUSH ACC
0123 907F01 41 MOV DPTR, #B_8255 ; 清屏LED
0126 7400 42 MOV A, #00H
0128 F0 43 MOVX @DPTR, A
44
0129 7E03 45 MOV R6, #03H
012B 7850 46 MOV R0, #50H
012D 7AFE 47 MOV R2, #0FEH
012F 907F00 48 DPLY1: MOV DPTR, #A_8255 ; LED位选
0132 EA 49 MOV A, R2
0133 F0 50 MOVX @DPTR, A
0134 23 51 RL A
0135 FA 52 MOV R2, A
0136 E6 53 MOV A, @R0 ; 显示段
0137 9002A0 54 MOV DPTR, #DISTAB
013A 93 55 MOVC A, @A+DPTR
013B 907F01 56 MOV DPTR, #B_8255
013E F0 57 MOVX @DPTR, A
013F 08 58 INC R0
A51 MACRO ASSEMBLER DS18B20 05/23/2006 14:45:00 PAGE 2
0140 7F60 59 MOV R7, #60H ; 延时
0142 12011E 60 LCALL DELAY
0145 907F01 61 MOV DPTR, #B_8255 ; 清屏LED
0148 7400 62 MOV A, #00H
014A F0 63 MOVX @DPTR, A
014B DEE2 64 DJNZ R6, DPLY1
014D D0E0 65 POP ACC
014F 22 66 RET
67
68 ; 初始化DS18B20
0150 69 INIT18B20:
0150 D2B4 70 SETB DQ
0152 00 71 NOP
0153 C2B4 72 CLR DQ
0155 7FFA 73 MOV R7, #0FAH ; 延时: 480us--960us
0157 12011E 74 LCALL DELAY
015A D2B4 75 SETB DQ
015C 7F0F 76 MOV R7, #0FH ; 延时: 15us--60us
015E 12011E 77 LCALL DELAY
0161 00 78 NOP
0162 20B404 79 JB DQ, INIT1
0165 D200 80 SETB FLAG
0167 8002 81 SJMP INIT2
0169 C200 82 INIT1: CLR FLAG
016B 7F64 83 INIT2: MOV R7, #64H ; 延时: 60us--240us
016D 12011E 84 LCALL DELAY
0170 00 85 NOP
0171 D2B4 86 SETB DQ
0173 22 87 RET
88
89 ; 向DS18B20中写入一个字节
90 ; 入口参数: R1
0174 91 WRITEBYTE:
0174 C0E0 92 PUSH ACC
0176 C3 93 CLR C
0177 7E08 94 MOV R6, #8
0179 E9 95 MOV A, R1
017A C2B4 96 WBYTE1: CLR DQ ; 1us--15us
017C 00 97 NOP
017D 13 98 RRC A
017E 92B4 99 MOV DQ, C
0180 7F20 100 MOV R7, #20H ; 60us--120us
0182 12011E 101 LCALL DELAY
0185 D2B4 102 SETB DQ
0187 00 103 NOP
0188 DEF0 104 DJNZ R6, WBYTE1
018A D0E0 105 POP ACC
018C 22 106 RET
107
108 ; 从DS18B20中读取一个字节
109 ; 出口参数: R1
018D 110 READBYTE:
018D C0E0 111 PUSH ACC
018F 7E08 112 MOV R6, #8
0191 7400 113 MOV A, #0
0193 C3 114 RBYTE1: CLR C
0194 D2B4 115 SETB DQ
0196 00 116 NOP
0197 00 117 NOP
0198 C2B4 118 CLR DQ
019A 00 119 NOP
019B 00 120 NOP
019C 00 121 NOP
019D D2B4 122 SETB DQ
019F 7F05 123 MOV R7, #5
01A1 12011E 124 LCALL DELAY
A51 MACRO ASSEMBLER DS18B20 05/23/2006 14:45:00 PAGE 3
01A4 A2B4 125 MOV C, DQ
01A6 7F17 126 MOV R7, #23
01A8 12011E 127 LCALL DELAY
01AB 13 128 RRC A
01AC DEE5 129 DJNZ R6, RBYTE1
01AE F9 130 MOV R1, A
01AF D0E0 131 POP ACC
01B1 22 132 RET
133
134 ; 从DS18B20中读取多个字节
135 ; 入口: R4(读取个数)
136 ; 出口: 30H开始的地址中
01B2 137 READ_BYTES:
01B2 7830 138 MOV R0, #30H ; 读出数据保存首地址
01B4 139 R_BYTES1:
01B4 12018D 140 LCALL READBYTE ; 读取1字节
01B7 E9 141 MOV A, R1
01B8 F6 142 MOV @R0, A ; 保存
01B9 08 143 INC R0 ; 地址+1
01BA DCF8 144 DJNZ R4, R_BYTES1
01BC 22 145 RET
146
147 ; 读取温度
01BD 148 GETTEMP:
01BD C0E0 149 PUSH ACC
01BF C000 150 PUSH 00H
01C1 7C09 151 MOV R4, #9 ; 读取9字节
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -