📄 ex10-4.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: EX10-4.ASM
Object File: EX10-4.HEX
List File: EX10-4.LST
Line I Addr Code Source
1:
2: N 0024 TEMP_ZH EQU 24H ;实测温度值存放单元
3: N 0025 TEMPL EQU 25H
4: N 0026 TEMPH EQU 26H
5: N 0027 TEMP_TH EQU 27H ;高温报警值存放单元
6: N 0028 TEMP_TL EQU 28H ;低温报警值存放单元
7: N 0029 TEMPHC EQU 29H ;正、负温度值标记
8: N 002A TEMPLC EQU 2AH
9: N 002B TEMPFC EQU 2BH
10: B 0094 K1 EQU P1.4 ;查询按键
11: B 0095 K2 EQU P1.5 ;设置/调整键
12: B 0096 K3 EQU P1.6 ;调整键
13: B 0097 K4 EQU P1.7 ;确定键
14: B 00B7 BEEP EQU P3.7 ;蜂鸣器
15: B 0093 RELAY EQU P1.3 ;指示灯
16: N 002F LCD_X EQU 2FH ;LCD 字符显示位置
17: B 00A0 LCD_RS EQU P2.0 ;LCD 寄存器选择信号
18: B 00A1 LCD_RW EQU P2.1 ;LCD 读写信号
19: B 00A2 LCD_EN EQU P2.2 ;LCD 允许信号
20: B 0000 FLAG1 EQU 20H.0 ;DS18B20是否存在标志
21: B 0001 KEY_UD EQU 20H.1 ;设定按键的增、减标志
22: B 00B3 DQ EQU P3.3 ;DS18B20数据信号
23: N 0000 ORG 0000H
24: 0000 02 00 30 LJMP MAIN
25: N 0030 ORG 0030H
26: 0030 75 81 60 MAIN: MOV SP,#60H
27: 0033 74 00 MOV A,#00H
28: 0035 78 20 MOV R0,#20H ;将20H~2FH 单元清零
29: 0037 79 10 MOV R1,#10H
30: 0039 F6 CLEAR: MOV @R0,A
31: 003A 08 INC R0
32: 003B D9 FC DJNZ R1,CLEAR
33: 003D 12 04 A6 LCALL SET_LCD
34: 0040 12 02 6B LCALL RE_18B20
35: 0043 12 02 3C START: LCALL RST ;调用18B20复位子程序
36: 0046 30 00 15 JNB FLAG1,START1 ;DS1820不存在
37: 0049 12 01 D6 LCALL MENU_OK ;DS1820存在,调用显示正确信息子程序
38: 004C 75 27 55 MOV TEMP_TH,#055H ;设置TH初值85度
39: 004F 75 28 19 MOV TEMP_TL,#019H ;设置TL初值25度
40: 0052 12 02 6F LCALL RE_18B20A ;调用暂存器操作子程序
41: 0055 12 02 8C LCALL WRITE_E2 ;写入DS18B20
42: 0058 12 01 BF LCALL TEMP_BJ ;显示温度标记
43: 005B 02 00 66 JMP START2
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 005E 12 02 09 START1: LCALL MENU_ERROR ;调用显示出错信息子程序
45: 0061 12 01 BF LCALL TEMP_BJ ;显示温度标记
46: 0064 80 FE SJMP $
47: 0066 12 02 3C START2: LCALL RST ;调用DS18B20复位子程序
48: 0069 30 00 F2 JNB FLAG1,START1 ;DS18B20不存在
49: 006C 74 CC MOV A,#0CCH ;跳过ROM匹配命令
50: 006E 12 02 C5 LCALL WRITE
51: 0071 74 44 MOV A,#44H ;温度转换命令
52: 0073 12 02 C5 LCALL WRITE
53: 0076 12 02 3C LCALL RST
54: 0079 74 CC MOV A,#0CCH ;跳过ROM匹配
55: 007B 12 02 C5 LCALL WRITE
56: 007E 74 BE MOV A,#0BEH ;读温度命令
57: 0080 12 02 C5 LCALL WRITE
58: 0083 12 02 DD LCALL READ ;调用DS18B20数据读取操作子程序
59: 0086 12 03 02 LCALL CONVTEMP ;调用温度数据BCD 码处理子程序
60: 0089 12 04 32 LCALL DISPBCD ;调用温度数据显示子程序
61: 008C 12 04 4D LCALL CONV ;调用LCD显示处理子程序
62: 008F 12 01 73 LCALL TEMP_COMP ;调用实测温度值与设定温度值比较子程序
63: 0092 12 00 97 LCALL PROC_KEY ;调用键扫描子程序
64: 0095 80 CF SJMP START2 ;循环
65: ;*************************** 键扫描子程序 *****************************
66: 0097 20 94 1A PROC_KEY:JB K1,PROC_K1
67: 009A 12 05 51 LCALL BEEP_BL
68: 009D 30 94 FD JNB K1,$
69: 00A0 90 03 A9 MOV DPTR,#M_ALAX1
70: 00A3 74 01 MOV A,#1
71: 00A5 12 04 E7 LCALL LCD_PRINT
72: 00A8 12 03 86 LCALL LOOK_ALARM
73: 00AB 20 96 FD JB K3,$
74: 00AE 12 05 51 LCALL BEEP_BL
75: 00B1 02 00 CE JMP PROC_K2
76: 00B4 20 95 1D PROC_K1: JB K2,PROC_END
77: 00B7 12 05 51 LCALL BEEP_BL
78: 00BA 30 95 FD JNB K2,$
79: 00BD 90 01 62 MOV DPTR,#RST_A1
80: 00C0 74 01 MOV A,#1
81: 00C2 12 04 E7 LCALL LCD_PRINT
82: 00C5 12 00 D5 LCALL SET_ALARM
83: 00C8 12 02 6B LCALL RE_18B20 ;将设定的TH,TL值写入DS18B20
84: 00CB 12 02 8C LCALL WRITE_E2
85: 00CE 12 01 D6 PROC_K2: LCALL MENU_OK
86: 00D1 12 01 BF LCALL TEMP_BJ
87: 00D4 22 PROC_END:RET
88:
89: ;*************************** 设定温度报警值 TH、TL ***************************
90: 00D5 12 03 86 SET_ALARM:LCALL LOOK_ALARM
91: 00D8 20 94 08 AS0: JB K1,AS00
92: 00DB 12 05 51 LCALL BEEP_BL
93: 00DE 30 94 FD JNB K1,$
94: 00E1 B2 01 CPL 20H.1 ;UP/DOWN 标记
95: 00E3 20 01 03 AS00: JB 20H.1,ASZ01 ;20H.1=1,增加
96: 00E6 02 01 27 JMP ASJ01 ;20H.1=0,减小
97: 00E9 20 95 17 ASZ01: JB K2,ASZ02 ;TH值调整(增加)
98: 00EC 12 05 51 LCALL BEEP_BL
99: 00EF 05 27 INC TEMP_TH
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 00F1 E5 27 MOV A,TEMP_TH
101: 00F3 B4 78 03 CJNE A,#120,ASZ011
102: 00F6 75 27 00 MOV TEMP_TH,#0
103: 00F9 12 03 86 ASZ011: LCALL LOOK_ALARM
104: 00FC 7D 0A MOV R5,#10
105: 00FE 12 05 68 LCALL DELAY
106: 0101 80 E6 JMP ASZ01
107: 0103 20 96 17 ASZ02: JB K3,ASZ03 ;TL值调整(增加)
108: 0106 12 05 51 LCALL BEEP_BL
109: 0109 05 28 INC TEMP_TL
110: 010B E5 28 MOV A,TEMP_TL
111: 010D B4 63 03 CJNE A,#99,ASZ021
112: 0110 75 28 00 MOV TEMP_TL,#00H
113: 0113 12 03 86 ASZ021: LCALL LOOK_ALARM
114: 0116 7D 0A MOV R5,#10
115: 0118 12 05 68 LCALL DELAY
116: 011B 80 E6 JMP ASZ02
117: 011D 20 97 B8 ASZ03: JB K4,AS0 ;确定调整
118: 0120 12 05 51 LCALL BEEP_BL
119: 0123 30 97 FD JNB K4,$
120: 0126 22 RET
121: 0127 20 95 17 ASJ01: JB K2,ASJ02 ;TH值调整(减少)
122: 012A 12 05 51 LCALL BEEP_BL
123: 012D 15 27 DEC TEMP_TH
124: 012F E5 27 MOV A,TEMP_TH
125: 0131 B4 FF 03 CJNE A,#0FFH,ASJ011
126: 0134 02 01 5B JMP ASJ022
127: 0137 12 03 86 ASJ011: LCALL LOOK_ALARM
128: 013A 7D 0A MOV R5,#10
129: 013C 12 05 68 LCALL DELAY
130: 013F 80 97 JMP AS0
131: 0141 20 96 1B ASJ02: JB K3,ASJ03 ;TL值调整(减少)
132: 0144 12 05 51 LCALL BEEP_BL
133: 0147 15 28 DEC TEMP_TL
134: 0149 E5 28 MOV A,TEMP_TL
135: 014B B4 FF 03 CJNE A,#0FFH,ASJ021
136: 014E 02 01 5B JMP ASJ022
137: 0151 12 03 86 ASJ021: LCALL LOOK_ALARM ;
138: 0154 7D 0A MOV R5,#10
139: 0156 12 05 68 LCALL DELAY
140: 0159 01 D8 JMP AS0
141: 015B B2 01 ASJ022: CPL 20H.1
142: 015D 80 8A JMP ASZ01
143: 015F 80 BC ASJ03: JMP ASZ03
144: 0161 22 RET
145: 0162 20 53 45 54 RST_A1: DB " SET ALERT CODE " ,0
0166 20 41 4C 45
016A 52 54 20 43
016E 4F 44 45 20
0172 00
146:
147: ;*********************** 实测温度值与设定温度值比较子程序 **********************
148: 0173 E5 27 TEMP_COMP:MOV A,TEMP_TH
149: 0175 95 24 SUBB A,TEMP_ZH ;减数>被减数,则
150: 0177 40 16 JC CHULI1 ;借位标志位C=1,转
151: 0179 E5 2B MOV A,TEMPFC
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
152: 017B B4 0B 02 CJNE A,#0BH,COMP
153: 017E 80 1B SJMP CHULI2
154: 0180 E5 24 COMP: MOV A,TEMP_ZH
155: 0182 95 28 SUBB A,TEMP_TL ;减数>被减数,则
156: 0184 40 15 JC CHULI2 ;借位标志位C=1,转
157: 0186 90 01 BD MOV DPTR,#BJ5
158: 0189 12 01 A7 LCALL TEMP_BJ3
159: 018C C2 93 CLR RELAY ;点亮指示灯
160: 018E 22 RET
161: 018F 90 01 B9 CHULI1: MOV DPTR,#BJ3
162: 0192 12 01 A7 LCALL TEMP_BJ3
163: 0195 D2 93 SETB RELAY ;熄灭指示灯
164: 0197 12 05 51 LCALL BEEP_BL ;蜂鸣器响
165: 019A 22 RET
166: 019B 90 01 BB CHULI2: MOV DPTR,#BJ4
167: 019E 12 01 A7 LCALL TEMP_BJ3
168: 01A1 D2 93 SETB RELAY ;熄灭指示灯
169: 01A3 12 05 51 LCALL BEEP_BL ;蜂鸣器响
170: 01A6 22 RET
171: ;-----------------------------------------
172: 01A7 74 CE TEMP_BJ3: MOV A,#0CEH
173: 01A9 12 05 23 LCALL WCOM
174: 01AC 79 00 MOV R1,#0
175: 01AE 78 02 MOV R0,#2
176: 01B0 E9 BBJJ3: MOV A,R1
177: 01B1 93 MOVC A,@A+DPTR
178: 01B2 12 05 31 LCALL WDATA
179: 01B5 09 INC R1
180: 01B6 D8 F8 DJNZ R0,BBJJ3
181: 01B8 22 RET
182: 01B9 3E 48 BJ3: DB ">H"
183: 01BB 3C 4C BJ4: DB "<L"
184: 01BD 20 21 BJ5: DB " !"
185: ;
186: ;**************************** 显示温度标记子程序 ***************************
187: 01BF 74 CB TEMP_BJ: MOV A,#0CBH
188: 01C1 12 05 23 LCALL WCOM
189: 01C4 90 01 D4 MOV DPTR,#BJ1 ;指针指到显示消息
190: 01C7 79 00 MOV R1,#0
191: 01C9 78 02 MOV R0,#2
192: 01CB E9 BBJJ1: MOV A,R1
193: 01CC 93 MOVC A,@A+DPTR
194: 01CD 12 05 31 LCALL WDATA
195: 01D0 09 INC R1
196: 01D1 D8 F8 DJNZ R0,BBJJ1
197: 01D3 22 RET
198: 01D4 00 43 BJ1: DB 00H,"C"
199:
200: ;******************************** 显示正确信息子程序 ***************************
201: 01D6 90 01 E7 MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息
202: 01D9 74 01 MOV A,#1 ;显示在第一行
203: 01DB 12 04 E7 LCALL LCD_PRINT
204: 01DE 90 01 F8 MOV DPTR,#M_OK2 ;指针指到显示消息
205: 01E1 74 02 MOV A,#2 ;显示在第一行
206: 01E3 12 04 E7 LCALL LCD_PRINT
207: 01E6 22 RET
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 5
Line I Addr Code Source
208: 01E7 20 20 20 44 M_OK1: DB " DS18B20 OK ",0
01EB 53 31 38 42
01EF 32 30 20 4F
01F3 4B 20 20 20
01F7 00
209: 01F8 20 54 45 4D M_OK2: DB " TEMP: ",0
01FC 50 3A 20 20
0200 20 20 20 20
0204 20 20 20 20
0208 00
210:
211: ;******************************** 显示出错信息子程序 ***************************
212: 0209 90 02 1A MENU_ERROR:MOV DPTR,#M_ERROR1 ;指针指到显示消息
213: 020C 74 01 MOV A,#1 ;显示在第一行
214: 020E 12 04 E7 LCALL LCD_PRINT
215: 0211 90 02 2B MOV DPTR,#M_ERROR2 ;指针指到显示消息1
216: 0214 74 02 MOV A,#2 ;显示在第一行
217: 0216 12 04 E7 LCALL LCD_PRINT
218: 0219 22 RET
219: 021A 20 44 53 31 M_ERROR1: DB " DS18B20 ERROR ",0
021E 38 42 32 30
0222 20 45 52 52
0226 4F 52 20 20
022A 00
220: 022B 20 54 45 4D M_ERROR2: DB " TEMP: ---- ",0
022F 50 3A 20 2D
0233 2D 2D 2D 20
0237 20 20 20 20
023B 00
221:
222: ;****************************DS18B20复位子程序 *****************************
223: 023C D2 B3 RST: SETB DQ
224: 023E 00 NOP
225: 023F C2 B3 CLR DQ
226: 0241 78 6B MOV R0,#6BH ;主机发出延时复位低脉冲
227: 0243 79 04 MOV R1,#04H
228: 0245 D8 FE TSR1: DJNZ R0,$
229: 0247 78 6B MOV R0,#6BH
230: 0249 D9 FA DJNZ R1,TSR1
231: 024B D2 B3 SETB DQ ;拉高数据线
232: 024D 00 NOP
233: 024E 00 NOP
234: 024F 00 NOP
235: 0250 78 32 MOV R0,#32H
236: 0252 30 B3 05 TSR2: JNB DQ,TSR3 ;等待DS18B20回应
237: 0255 D8 FB DJNZ R0,TSR2
238: 0257 02 02 5F JMP TSR4 ; 延时
239: 025A D2 00 TSR3: SETB FLAG1 ; 置1标志位,表示DS1820存在
240: 025C 02 02 64 JMP TSR5
241: 025F C2 00 TSR4: CLR FLAG1 ; 清0标志位,表示DS1820不存在
242: 0261 02 02 68 JMP TSR7
243: 0264 78 6B TSR5: MOV R0,#06BH
244: 0266 D8 FE TSR6: DJNZ R0,$ ; 时序要求延时一段时间
245: 0268 D2 B3 TSR7: SETB DQ
246: 026A 22 RET
247:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 6
Line I Addr Code Source
248: ;************************ DS18B20暂存器操作子程序 ***************************
249: 026B 20 00 01 RE_18B20:JB FLAG1,RE_18B20A
250: 026E 22 RET
251: 026F RE_18B20A:
252: 026F 12 02 3C LCALL RST
253: 0272 74 CC MOV A,#0CCH ;跳过ROM匹配
254: 0274 12 02 C5 LCALL WRITE
255: 0277 WR_SCRAPD:
256: 0277 74 4E MOV A,#4EH ;写暂器
257: 0279 12 02 C5 LCALL WRITE
258: 027C E5 27 MOV A,TEMP_TH ;TH(报警上限)
259: 027E 12 02 C5 LCALL WRITE
260: 0281 E5 28 MOV A,TEMP_TL ;TL(报警下限)
261: 0283 12 02 C5 LCALL WRITE
262: 0286 74 7F MOV A,#7FH ;12位精度
263: 0288 12 02 C5 LCALL WRITE
264: 028B 22 RET
265:
266: ;************************ 复制暂存器子程序 *******************************
267: 028C 12 02 3C WRITE_E2:LCALL RST
268: 028F 74 CC MOV A,#0CCH ;跳过ROM匹配
269: 0291 12 02 C5 LCALL WRITE
270: 0294 74 48 MOV A,#48H ;把暂存器里的温度报警值拷贝到EEROM
271: 0296 12 02 C5 LCALL WRITE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -