?? 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 ;設(shè)置/調(diào)整鍵
12: B 0096 K3 EQU P1.6 ;調(diào)整鍵
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 ;設(shè)定按鍵的增、減標志
22: B 00B3 DQ EQU P3.3 ;DS18B20數(shù)據(jù)信號
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 ;調(diào)用18B20復(fù)位子程序
36: 0046 30 00 15 JNB FLAG1,START1 ;DS1820不存在
37: 0049 12 01 D6 LCALL MENU_OK ;DS1820存在,調(diào)用顯示正確信息子程序
38: 004C 75 27 55 MOV TEMP_TH,#055H ;設(shè)置TH初值85度
39: 004F 75 28 19 MOV TEMP_TL,#019H ;設(shè)置TL初值25度
40: 0052 12 02 6F LCALL RE_18B20A ;調(diào)用暫存器操作子程序
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 ;調(diào)用顯示出錯信息子程序
45: 0061 12 01 BF LCALL TEMP_BJ ;顯示溫度標記
46: 0064 80 FE SJMP $
47: 0066 12 02 3C START2: LCALL RST ;調(diào)用DS18B20復(fù)位子程序
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 ;溫度轉(zhuǎn)換命令
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 ;調(diào)用DS18B20數(shù)據(jù)讀取操作子程序
59: 0086 12 03 02 LCALL CONVTEMP ;調(diào)用溫度數(shù)據(jù)BCD 碼處理子程序
60: 0089 12 04 32 LCALL DISPBCD ;調(diào)用溫度數(shù)據(jù)顯示子程序
61: 008C 12 04 4D LCALL CONV ;調(diào)用LCD顯示處理子程序
62: 008F 12 01 73 LCALL TEMP_COMP ;調(diào)用實測溫度值與設(shè)定溫度值比較子程序
63: 0092 12 00 97 LCALL PROC_KEY ;調(diào)用鍵掃描子程序
64: 0095 80 CF SJMP START2 ;循環(huán)
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 ;將設(shè)定的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: ;*************************** 設(shè)定溫度報警值 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值調(diào)整(增加)
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值調(diào)整(增加)
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 ;確定調(diào)整
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值調(diào)整(減少)
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值調(diào)整(減少)
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: ;*********************** 實測溫度值與設(shè)定溫度值比較子程序 **********************
148: 0173 E5 27 TEMP_COMP:MOV A,TEMP_TH
149: 0175 95 24 SUBB A,TEMP_ZH ;減數(shù)>被減數(shù),則
150: 0177 40 16 JC CHULI1 ;借位標志位C=1,轉(zhuǎn)
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 ;減數(shù)>被減數(shù),則
156: 0184 40 15 JC CHULI2 ;借位標志位C=1,轉(zhuǎn)
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復(fù)位子程序 *****************************
223: 023C D2 B3 RST: SETB DQ
224: 023E 00 NOP
225: 023F C2 B3 CLR DQ
226: 0241 78 6B MOV R0,#6BH ;主機發(fā)出延時復(fù)位低脈沖
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 ;拉高數(shù)據(jù)線
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回應(yīng)
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: ;************************ 復(fù)制暫存器子程序 *******************************
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -