📄 ds18b20-温度控制.lst
字号:
00EF 120085 197 LCALL WRITE
00F2 E529 198 MOV A,TEMP_TL ;TL(报警下限)
00F4 120085 199 LCALL WRITE
00F7 747F 200 MOV A,#7FH ;12位精确度
00F9 120085 201 LCALL WRITE
00FC 22 202 RET
203
204 ;====================================================
205 ;功能键扫描子程序
206 ;====================================================
00FD 207 SCANKEY:
00FD 7590F0 208 MOV P1,#0F0H
0100 209414 209 JB K1,SCAN_K2
0103 71B9 210 CALL BEEP_BL
0105 7130 211 SCAN_K1: CALL ALERT_TL
0107 717E 212 CALL ALERT_PLAY
0109 2094F9 213 JB K1,SCAN_K1
010C 71B9 214 CALL BEEP_BL
010E 7157 215 SCAN_K11: CALL ALERT_TH
0110 717E 216 CALL ALERT_PLAY
0112 2094F9 217 JB K1,SCAN_K11
0115 71B9 218 CALL BEEP_BL
0117 209502 219 SCAN_K2: JB K2,SCAN_K3
011A 71B9 220 CALL BEEP_BL
011C 20960B 221 SCAN_K3: JB K3,SCAN_K4
011F 71B9 222 CALL BEEP_BL
0121 120130 223 LCALL RESET_ALERT
0124 1200DD 224 LCALL RE_18B20
0127 120224 225 LCALL WRITE_E2
012A 209702 226 SCAN_K4: JB K4,SCAN_END
012D 71B9 227 CALL BEEP_BL
012F 22 228 SCAN_END: RET
229
230 ;================================================
231 ;设置温度报警值
232 ;================================================
0130 233 RESET_ALERT:
0130 7130 234 CALL ALERT_TL
0132 717E 235 CALL ALERT_PLAY
0134 3096FD 236 JNB K3,$ ;K3为位移键
0137 D28C 237 SETB TR0
0139 238 RESET_TL:
0139 717E 239 CALL ALERT_PLAY
013B 30010A 240 JNB FLAG2,R_TL01
013E 857F75 241 MOV 75H,7FH ;送入熄灭符
0141 857F76 242 MOV 76H,7FH
0144 717E 243 CALL ALERT_PLAY
0146 800A 244 JMP R_TL02
0148 7130 245 R_TL01: CALL ALERT_TL
014A 857E75 246 MOV 75H,7EH ;送设定值
014D 857D76 247 MOV 76H,7DH
0150 717E 248 CALL ALERT_PLAY ;显示设定值
0152 309408 249 R_TL02: JNB K1,K011A
0155 309513 250 JNB K2,K011B
0158 30961E 251 JNB K3,RESET_TH
015B 80DC 252 JMP RESET_TL
015D 253 K011A:
015D 0529 254 INC TEMP_TL
015F E529 255 MOV A,TEMP_TL
0161 B47803 256 CJNE A,#120,K012A ;没有到设定上限值,转
A51 MACRO ASSEMBLER DS18B20_温禵縚制 12/20/2006 22:04:19 PAGE 5
0164 752900 257 MOV TEMP_TL,#0
0167 31C3 258 K012A: CALL TL_DEL
0169 80CE 259 JMP RESET_TL
016B 260 K011B:
016B 1529 261 DEC TEMP_TL
016D E529 262 MOV A,TEMP_TL
016F B40003 263 CJNE A,#00H,K012B ;没有到设定下限值,转
0172 752977 264 MOV TEMP_TL,#119
0175 31C3 265 K012B: CALL TL_DEL
0177 80C0 266 JMP RESET_TL
267 ;-------------------------------------------------------
0179 268 RESET_TH:
0179 71B9 269 CALL BEEP_BL
017B 3096FD 270 JNB K3,$
017E 271 RESET_TH1:
017E 717E 272 CALL ALERT_PLAY
0180 30010A 273 JNB FLAG2,R_TH01
0183 857F75 274 MOV 75H,7FH ;送入熄灭符
0186 857F76 275 MOV 76H,7FH
0189 717E 276 CALL ALERT_PLAY
018B 800A 277 JMP R_TH02
018D 7157 278 R_TH01: CALL ALERT_TH
018F 857E75 279 MOV 75H,7EH ;
0192 857D76 280 MOV 76H,7DH
0195 717E 281 CALL ALERT_PLAY
0197 309408 282 R_TH02: JNB K1,K021A
019A 309513 283 JNB K2,K021B
019D 30961E 284 JNB K3,K002
01A0 80DC 285 JMP RESET_TH1
01A2 286 K021A:
01A2 0528 287 INC TEMP_TH
01A4 E528 288 MOV A,TEMP_TH
01A6 B47803 289 CJNE A,#120,K022A ;没有到设定上限值,转
01A9 752800 290 MOV TEMP_TH,#0
01AC 31CC 291 K022A: CALL TH_DEL
01AE 80CE 292 JMP RESET_TH1
293
01B0 294 K021B:
01B0 1528 295 DEC TEMP_TH ;减1
01B2 E528 296 MOV A,TEMP_TH
01B4 B40003 297 CJNE A,#00H,K022B ;没有到设定下限值,转
01B7 752877 298 MOV TEMP_TH,#119
01BA 31CC 299 K022B: CALL TH_DEL
01BC 80C0 300 JMP RESET_TH1
301
01BE 71B9 302 K002: CALL BEEP_BL
01C0 C28C 303 CLR TR0 ;关闭中断
01C2 22 304 RET
305 ;-----------------------------------------------------
306 ;键延时子程序
307 ;多次调用报警值显示程序来延时
308 ;-----------------------------------------------------
01C3 309 TL_DEL: ;报警低值延时
01C3 7A0A 310 MOV R2,#0AH
01C5 7130 311 TL_DEL1: CALL ALERT_TL
01C7 717E 312 CALL ALERT_PLAY
01C9 DAFA 313 DJNZ R2,TL_DEL1
01CB 22 314 RET
01CC 315 TH_DEL: ;报警高值延时
01CC 7A0A 316 MOV R2,#0AH
01CE 7157 317 TH_DEL1: CALL ALERT_TH
01D0 717E 318 CALL ALERT_PLAY
01D2 DAFA 319 DJNZ R2,TH_DEL1
01D4 22 320 RET
321 ;====================================================
322 ;实时温度值与设定报警温度值 TH、TL 比较子程序
A51 MACRO ASSEMBLER DS18B20_温禵縚制 12/20/2006 22:04:19 PAGE 6
323 ;当实际温度大于 TH 的设定值时,显示“H”,继电器关闭。
324 ;当实际温度小于 TH 的设定值时,显示“O”,继电器吸合。
325 ;当实际温度小于 TL 的设定值时,显示“L”。
326 ;闪动显示标记符 H、L、O
327 ;====================================================
01D5 328 TEMP_COMP:
01D5 D28C 329 SETB TR0 ;启动中断
01D7 E52C 330 MOV A,TEMP_ZH
01D9 B52800 331 CJNE A,TEMP_TH,T_COMP0
01DC 332 T_COMP0:
01DC 501C 333 JNC CHULI1
01DE E52C 334 MOV A,TEMP_ZH
01E0 9529 335 SUBB A,TEMP_TL ;减数>被减数,则
01E2 402C 336 JC CHULI2 ;借位标志位C=1,转
01E4 300108 337 JNB FLAG2,T_COMP1 ;FLAG2=0,显示标记字符
01E7 75740A 338 MOV 74H,#0AH ;熄灭符
01EA 1202E1 339 LCALL TEMP_PLAER
01ED 8006 340 JMP T_COMP2
01EF 757400 341 T_COMP1: MOV 74H,#00H
01F2 1202E1 342 LCALL TEMP_PLAER ;显示"O"
01F5 C293 343 T_COMP2: CLR RELAY ;继电器吸合
01F7 C28C 344 CLR TR0 ;关闭中断
01F9 22 345 RET
346 ;---------------------------------------------
347 ;超温处理
348 ;---------------------------------------------
01FA 349 CHULI1:
01FA D293 350 SETB RELAY ;继电器关闭
01FC 300108 351 JNB FLAG2,CHULI10
01FF 75740A 352 MOV 74H,#0AH ;熄灭符
0202 1202E1 353 LCALL TEMP_PLAER
0205 8006 354 JMP CHULI11
0207 75740D 355 CHULI10: MOV 74H,#0DH
020A 1202E1 356 LCALL TEMP_PLAER ;显示"H"
357 ; CALL BEEP_BL ;蜂鸣器响
020D 358 CHULI11:
020D C28C 359 CLR TR0 ;关闭中断
020F 22 360 RET
361 ;---------------------------------------------
362 ;欠温处理
363 ;---------------------------------------------
0210 364 CHULI2: ;欠温处理
0210 300108 365 JNB FLAG2,CHULI20
0213 75740A 366 MOV 74H,#0AH ;熄灭符
0216 1202E1 367 LCALL TEMP_PLAER
0219 8006 368 JMP CHULI21
021B 75740C 369 CHULI20: MOV 74H,#0CH
021E 1202E1 370 LCALL TEMP_PLAER ;显示"L"
371 ; CALL BEEP_BL ;蜂鸣器响
0221 C28C 372 CHULI21: CLR TR0 ;关闭中断
0223 22 373 RET
374 ;------------------------------------------------------------
375 ;把 DS18B20 暂存器里的温度报警值拷贝到EEROM
376 ;------------------------------------------------------------
0224 377 WRITE_E2:
0224 115B 378 CALL RESET
0226 74CC 379 MOV A,#0CCH ;跳过ROM匹配
0228 120085 380 LCALL WRITE
022B 7448 381 MOV A,#48H ;温度报警值拷贝到EEROM
022D 120085 382 LCALL WRITE
0230 22 383 RET
384 ;--------------------------------------------------------------
385 ;把 DS18B20 EEROM 里的温度报警值拷贝回暂存器
386 ;-------------------------------------------------------------
0231 387 READ_E2:
0231 115B 388 CALL RESET
A51 MACRO ASSEMBLER DS18B20_温禵縚制 12/20/2006 22:04:19 PAGE 7
0233 74CC 389 MOV A,#0CCH ;跳过ROM匹配
0235 120085 390 LCALL WRITE
0238 74B8 391 MOV A,#0B8H ;温度报警值拷贝回暂存器
023A 1185 392 CALL WRITE
023C 22 393 RET
394
395 ;*****************************************************
396 ; 处理温度 BCD 码子程序
397 ;****************************************************
023D E527 398 CONVTEMP: MOV A,TEMPH ;判温度是否零下
023F 5480 399 ANL A,#80H
0241 6014 400 JZ TEMPC1 ;温度零上转
0243 C3 401 CLR C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -