📄 18b2.lst
字号:
A51 MACRO ASSEMBLER 18B2 04/25/2008 09:07:01 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN 18b2.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 18b2.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0036 1 TEMPER_L EQU 36H ;从DS18B20中读回高位,低位暂存区
0035 2 TEMPER_H EQU 35H ;
0060 3 TEMPER_NUM EQU 60H;温度值存储
0061 4 TEMPER_GE EQU 61H
0062 5 TEMPER_SHI EQU 62H
0063 6 TEMPER_SAVE EQU 63H
0000 7 FLAG1 BIT 00H
0001 8 FLAG2 BIT 01H
9
00A7 10 DQ BIT P2.7;单总线口
0000 11 ORG 0000H
0000 0130 12 AJMP MAIN
0030 13 ORG 0030H
0030 758170 14 MAIN: MOV SP,#70H
0033 120040 15 LCALL GET_TEMPER
0036 1200CE 16 LCALL TEMPER_COV
0039 12011C 17 LCALL DISPLAY
003C 020030 18 LJMP MAIN
003F 00 19 NOP
20 ;**************************************************
21 ;读出转换后的温度值
22 ;**************************************************
0040 23 GET_TEMPER:
0040 D2A7 24 SETB DQ ; 定时入口
0042 1200F6 25 BCD: LCALL INIT_1820
0045 200003 26 JB FLAG1,S22
0048 020042 27 LJMP BCD ; 若DS18B20不存在则返回
004B 120144 28 S22: LCALL DELAY1
004E 74CC 29 MOV A,#0CCH ; 跳过ROM匹配------0CC命令
0050 120092 30 LCALL WRITE_1820
0053 7444 31 MOV A,#44H ; 发出温度转换命令
0055 120092 32 LCALL WRITE_1820
0058 00 33 NOP
0059 12013F 34 LCALL DELAY
005C 1200F6 35 CBA:LCALL INIT_1820
005F 200003 36 JB FLAG1,ABC
0062 02005C 37 LJMP CBA
0065 120144 38 ABC:LCALL DELAY1
0068 74CC 39 MOV A,#0CCH ; 跳过ROM匹配
006A 120092 40 LCALL WRITE_1820
006D 74BE 41 MOV A,#0BEH ; 发出读温度命令
006F 120092 42 LCALL WRITE_1820
0072 1200AA 43 LCALL READ_18200 ;READ_1820
0075 22 44 RET
45 ;**************************************************************
46 ;读DS18B20的程序,从DS18B20中读出一个字节的数据
47 ;**************************************************************
0076 48 READ_1820:
0076 7A08 49 MOV R2,#8
0078 50 RE1:
0078 C3 51 CLR C
0079 D2A7 52 SETB DQ
007B 00 53 NOP
007C 00 54 NOP
007D C2A7 55 CLR DQ
007F 00 56 NOP
0080 00 57 NOP
0081 00 58 NOP
A51 MACRO ASSEMBLER 18B2 04/25/2008 09:07:01 PAGE 2
0082 D2A7 59 SETB DQ
0084 7B07 60 MOV R3,#7
0086 DBFE 61 DJNZ R3,$
0088 A2A7 62 MOV C,DQ
008A 7B17 63 MOV R3,#23
008C DBFE 64 DJNZ R3,$
008E 13 65 RRC A
008F DAE7 66 DJNZ R2,RE1
0091 22 67 RET
68 ;******************************************************
69 ;写DS18B20的程序
70 ;******************************************************
0092 71 WRITE_1820:
0092 7A08 72 MOV R2,#8
0094 C3 73 CLR C
0095 74 WR1:
0095 C2A7 75 CLR DQ
0097 7B06 76 MOV R3,#6
0099 DBFE 77 DJNZ R3,$
009B 13 78 RRC A
009C 92A7 79 MOV DQ,C
009E 7B17 80 MOV R3,#23
00A0 DBFE 81 DJNZ R3,$
00A2 D2A7 82 SETB DQ
00A4 00 83 NOP
00A5 DAEE 84 DJNZ R2,WR1
00A7 D2A7 85 SETB DQ
00A9 22 86 RET
87 ;****************************************************
88 ;读DS18B20的程序,从DS18B20中读出两个字节的温度数据
89 ;****************************************************
00AA 90 READ_18200:
00AA 7C02 91 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
00AC 7936 92 MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
00AE 93 RE00:
00AE 7A08 94 MOV R2,#8
00B0 95 RE01:
00B0 C3 96 CLR C
00B1 D2A7 97 SETB DQ
00B3 00 98 NOP
00B4 00 99 NOP
00B5 C2A7 100 CLR DQ
00B7 00 101 NOP
00B8 00 102 NOP
00B9 00 103 NOP
00BA D2A7 104 SETB DQ
00BC 7B07 105 MOV R3,#7
00BE DBFE 106 DJNZ R3,$
00C0 A2A7 107 MOV C,DQ
00C2 7B17 108 MOV R3,#23
00C4 DBFE 109 DJNZ R3,$
00C6 13 110 RRC A
00C7 DAE7 111 DJNZ R2,RE01
00C9 F7 112 MOV @R1,A
00CA 19 113 DEC R1
00CB DCE1 114 DJNZ R4,RE00
00CD 22 115 RET
116 ;;****************************************************
117 ;将从DS18B20中读出的温度数据进行转换
118 ;;****************************************************
00CE 119 TEMPER_COV:
00CE 74F0 120 MOV A,#0F0H
00D0 5536 121 ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值
00D2 C4 122 SWAP A
00D3 F560 123 MOV TEMPER_NUM,A ;得到低四位
00D5 E536 124 MOV A,TEMPER_L
A51 MACRO ASSEMBLER 18B2 04/25/2008 09:07:01 PAGE 3
00D7 30E302 125 JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值
00DA 0560 126 INC TEMPER_NUM
127
00DC 128 TEMPER_COV1:
00DC 856061 129 mov temper_ge,temper_num
00DF E535 130 MOV A,TEMPER_H
00E1 5407 131 ANL A,#07H
132
133 ;得到高四位,再与低四位相或得到值
00E3 75F010 134 MOV b,#16
00E6 A4 135 mul ab
00E7 2561 136 add a,temper_ge
00E9 75F00A 137 mov b,#10
00EC 84 138 div ab
00ED F562 139 mov temper_shi,a
140
00EF 85F061 141 mov temper_ge,b ; 保存变换后的温度数据
00F2 12011C 142 lcall display
00F5 22 143 RET
144 ;;****************************************************
145 ;将16进制的温度数据转换成压缩BCD码
146 ;;****************************************************
147
148
149
150
151
152
153
154
155 ;****************************************************
156 ;DS18B20初始化程序
157 ;;****************************************************
00F6 158 INIT_1820:
00F6 D2A7 159 SETB DQ
00F8 00 160 NOP
00F9 C2A7 161 CLR DQ
00FB 78FA 162 MOV R0,#250
00FD 163 TSR1:
00FD D8FE 164 DJNZ R0,TSR1 ; 延时520us
00FF D2A7 165 SETB DQ
0101 7825 166 MOV R0,#25H ;96US-25H
0103 167 TSR2:
0103 D8FE 168 DJNZ R0,TSR2
0105 30A703 169 JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在
0108 020110 170 LJMP TSR4 ; 延时
010B 171 TSR3:
010B D200 172 SETB FLAG1 ; 置标志位,表示DS1820存在
010D 020115 173 LJMP TSR5
0110 174 TSR4:
0110 C200 175 CLR FLAG1 ; 清标志位,表示DS1820不存在
0112 020119 176 LJMP TSR7
0115 177 TSR5:
0115 786B 178 MOV R0,#06BH ;200US
0117 179 TSR6:
0117 D8FE 180 DJNZ R0,TSR6 ; 延时
0119 181 TSR7:
0119 D2A7 182 SETB DQ ;拉高总线
011B 22 183 RET
184 ;*************************************************
185 ;数码显示程序
186 ;*************************************************
011C 187 Display:
011C 900149 188 MOV DPTR,#disptab
011F E561 189 MOV A,TEMPER_GE
0121 93 190 MOVC A,@A+DPTR
A51 MACRO ASSEMBLER 18B2 04/25/2008 09:07:01 PAGE 4
0122 2480 191 add a,#80h
0124 F580 192 MOV P0,A
0126 D2A1 193 setb P2.1
0128 313F 194 CALL DELAY
012A 313F 195 CALL DELAY
012C C2A1 196 clr P2.1
012E 900149 197 MOV DPTR,#disptab
0131 E562 198 MOV A,TEMPER_SHI
0133 93 199 MOVC A,@A+DPTR
0134 F580 200 MOV P0,A
0136 D2A0 201 setb P2.0
0138 313F 202 CALL DELAY
013A 313F 203 CALL DELAY
013C C2A0 204 clr P2.0
013E 22 205 RET
013F 206 DELAY:
013F 7EFA 207 MOV R6,#250;延时500us
0141 DEFE 208 DJNZ R6,$
0143 22 209 RET
0144 7F20 210 DELAY1:MOV R7,#20H
0146 DFFE 211 DJNZ R7,$
0148 22 212 RET
0149 C0F9A4B0 213 disptab:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
014D 999282F8
0151 8090
214
215 end
A51 MACRO ASSEMBLER 18B2 04/25/2008 09:07:01 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ABC. . . . . . . . C ADDR 0065H A
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
BCD. . . . . . . . C ADDR 0042H A
CBA. . . . . . . . C ADDR 005CH A
DELAY. . . . . . . C ADDR 013FH A
DELAY1 . . . . . . C ADDR 0144H A
DISPLAY. . . . . . C ADDR 011CH A
DISPTAB. . . . . . C ADDR 0149H A
DQ . . . . . . . . B ADDR 00A0H.7 A
FLAG1. . . . . . . B ADDR 0020H.0 A
FLAG2. . . . . . . B ADDR 0020H.1 A
GET_TEMPER . . . . C ADDR 0040H A
INIT_1820. . . . . C ADDR 00F6H A
MAIN . . . . . . . C ADDR 0030H A
P0 . . . . . . . . D ADDR 0080H A
P2 . . . . . . . . D ADDR 00A0H A
RE00 . . . . . . . C ADDR 00AEH A
RE01 . . . . . . . C ADDR 00B0H A
RE1. . . . . . . . C ADDR 0078H A
READ_1820. . . . . C ADDR 0076H A
READ_18200 . . . . C ADDR 00AAH A
S22. . . . . . . . C ADDR 004BH A
SP . . . . . . . . D ADDR 0081H A
TEMPER_COV . . . . C ADDR 00CEH A
TEMPER_COV1. . . . C ADDR 00DCH A
TEMPER_GE. . . . . N NUMB 0061H A
TEMPER_H . . . . . N NUMB 0035H A
TEMPER_L . . . . . N NUMB 0036H A
TEMPER_NUM . . . . N NUMB 0060H A
TEMPER_SAVE. . . . N NUMB 0063H A
TEMPER_SHI . . . . N NUMB 0062H A
TSR1 . . . . . . . C ADDR 00FDH A
TSR2 . . . . . . . C ADDR 0103H A
TSR3 . . . . . . . C ADDR 010BH A
TSR4 . . . . . . . C ADDR 0110H A
TSR5 . . . . . . . C ADDR 0115H A
TSR6 . . . . . . . C ADDR 0117H A
TSR7 . . . . . . . C ADDR 0119H A
WR1. . . . . . . . C ADDR 0095H A
WRITE_1820 . . . . C ADDR 0092H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -