?? ex10-4.lst
字號(hào):
272: 0299 22 RET
273:
274: ;*********************** 重讀EEROM子程序 ********************************
275: 029A 12 02 3C READ_E2:LCALL RST
276: 029D 74 CC MOV A,#0CCH ;跳過ROM匹配
277: 029F 12 02 C5 LCALL WRITE
278: 02A2 74 B8 MOV A,#0B8H ;把EEROM里的溫度報(bào)警值拷貝回暫存器
279: 02A4 12 02 C5 LCALL WRITE
280: 02A7 22 RET
281:
282: ;************************ 將自定義字符寫入LCD的CGRAM中 *********************
283: 02A8 STORE_DATA:
284: 02A8 74 40 MOV A,#40H
285: 02AA 12 05 23 LCALL WCOM
286: 02AD 7A 08 MOV R2,#08H
287: 02AF 90 02 BD MOV DPTR,#D_DATA
288: 02B2 7B 00 MOV R3,#00H
289: 02B4 EB S_DATA: MOV A,R3
290: 02B5 93 MOVC A,@A+DPTR
291: 02B6 12 05 31 LCALL WDATA ;寫入數(shù)據(jù)
292: 02B9 0B INC R3
293: 02BA DA F8 DJNZ R2,S_DATA
294: 02BC 22 RET
295: 02BD 0C 12 12 0C D_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H
02C1 00 00 00 00
296: ;*********************** DS18B20數(shù)據(jù)寫入操作子程序 ************************
297: 02C5 7A 08 WRITE: MOV R2,#8 ;一共8位數(shù)據(jù)
298: 02C7 C3 CLR C
299: 02C8 C2 B3 WR1: CLR DQ ;開始寫入DS18B20總線要處于復(fù)位(低)狀態(tài)
300: 02CA 7B 07 MOV R3,#07
301: 02CC DB FE DJNZ R3,$ ;總線復(fù)位保持16微妙以上
302: 02CE 13 RRC A ;把一個(gè)字節(jié)DATA 分成8個(gè)BIT環(huán)移給C
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 7
Line I Addr Code Source
303: 02CF 92 B3 MOV DQ,C ;寫入一位
304: 02D1 7B 3C MOV R3,#3CH
305: 02D3 DB FE DJNZ R3,$ ;等待100微妙
306: 02D5 D2 B3 SETB DQ ;重新釋放總線
307: 02D7 00 NOP
308: 02D8 DA EE DJNZ R2,WR1 ;寫入下一位
309: 02DA D2 B3 SETB DQ
310: 02DC 22 RET
311:
312: ;********************** DS18B20數(shù)據(jù)讀取操作子程序 **************************
313: 02DD 7C 04 READ: MOV R4,#4 ;將溫度低位、高位、TH、TL從DS18B20中讀出
314: 02DF 79 25 MOV R1,#TEMPL ;存入25H、26H、27H、28H單元
315: 02E1 7A 08 RE00: MOV R2,#8
316: 02E3 C2 D7 RE01: CLR CY
317: 02E5 D2 B3 SETB DQ
318: 02E7 00 NOP
319: 02E8 00 NOP
320: 02E9 C2 B3 CLR DQ ;讀前總線保持為低
321: 02EB 00 NOP
322: 02EC 00 NOP
323: 02ED 00 NOP
324: 02EE D2 B3 SETB DQ ;開始讀總線釋放
325: 02F0 7B 09 MOV R3,#09 ;延時(shí)18微妙
326: 02F2 DB FE DJNZ R3,$
327: 02F4 A2 B3 MOV C,DQ ;從DS18B20總線讀得一位
328: 02F6 7B 3C MOV R3,#3CH
329: 02F8 DB FE DJNZ R3,$ ;等待100微妙
330: 02FA 13 RRC A ;把讀得的位值環(huán)移給A
331: 02FB DA E6 DJNZ R2,RE01 ;讀下一位
332: 02FD F7 MOV @R1,A
333: 02FE 09 INC R1
334: 02FF DC E0 DJNZ R4,RE00
335: 0301 22 RET
336:
337: ;************************ 溫度值 BCD 碼處理子程序 *************************
338: 0302 E5 26 CONVTEMP: MOV A,TEMPH ;判溫度是否零下
339: 0304 54 08 ANL A,#08H
340: 0306 60 17 JZ TEMPC1 ;溫度零上轉(zhuǎn)
341: 0308 C3 CLR C
342: 0309 E5 25 MOV A,TEMPL ;二進(jìn)制數(shù)求補(bǔ)(雙字節(jié))
343: 030B F4 CPL A ;取反加1
344: 030C 24 01 ADD A,#01H
345: 030E F5 25 MOV TEMPL,A
346: 0310 E5 26 MOV A,TEMPH
347: 0312 F4 CPL A
348: 0313 34 00 ADDC A,#00H
349: 0315 F5 26 MOV TEMPH,A
350: 0317 75 29 0B MOV TEMPHC,#0BH ;負(fù)溫度標(biāo)志
351: 031A 75 2B 0B MOV TEMPFC,#0BH
352: 031D 80 06 SJMP TEMPC11
353: 031F 75 29 0A TEMPC1: MOV TEMPHC,#0AH ;正溫度標(biāo)志
354: 0322 75 2B 0A MOV TEMPFC,#0AH
355: 0325 E5 29 TEMPC11: MOV A,TEMPHC
356: 0327 C4 SWAP A
357: 0328 F5 29 MOV TEMPHC,A
358: 032A E5 25 MOV A,TEMPL
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 8
Line I Addr Code Source
359: 032C 54 0F ANL A,#0FH ;乘0.0625
360: 032E 90 03 76 MOV DPTR,#TEMPDOTTAB
361: 0331 93 MOVC A,@A+DPTR
362: 0332 F5 2A MOV TEMPLC,A ;TEMPLC LOW=小數(shù)部分 BCD
363: 0334 E5 25 MOV A,TEMPL ;整數(shù)部分
364: 0336 54 F0 ANL A,#0F0H ;取出高四位
365: 0338 C4 SWAP A
366: 0339 F5 25 MOV TEMPL,A
367: 033B E5 26 MOV A,TEMPH ;取出低四位
368: 033D 54 0F ANL A,#0FH
369: 033F C4 SWAP A
370: 0340 45 25 ORL A,TEMPL ;重新組合
371: 0342 F5 24 MOV TEMP_ZH,A
372: 0344 12 03 68 LCALL HEX2BCD1
373: 0347 F5 25 MOV TEMPL,A
374: 0349 54 F0 ANL A,#0F0H
375: 034B C4 SWAP A
376: 034C 45 29 ORL A,TEMPHC ;TEMPHC LOW = 十位數(shù) BCD
377: 034E F5 29 MOV TEMPHC,A
378: 0350 E5 25 MOV A,TEMPL
379: 0352 54 0F ANL A,#0FH
380: 0354 C4 SWAP A ;TEMPLC HI = 個(gè)位數(shù) BCD
381: 0355 45 2A ORL A,TEMPLC
382: 0357 F5 2A MOV TEMPLC,A
383: 0359 EC MOV A,R4
384: 035A 60 0B JZ TEMPC12
385: 035C 54 0F ANL A,#0FH
386: 035E C4 SWAP A
387: 035F FC MOV R4,A
388: 0360 E5 29 MOV A,TEMPHC ;TEMPHC HI = 百位數(shù) BCD
389: 0362 54 0F ANL A,#0FH
390: 0364 4C ORL A,R4
391: 0365 F5 29 MOV TEMPHC,A
392: 0367 22 TEMPC12: RET
393:
394: ;************************ 二-十進(jìn)制轉(zhuǎn)換子程序 *****************************
395: 0368 75 F0 64 HEX2BCD1: MOV B,#064H
396: 036B 84 DIV AB
397: 036C FC MOV R4,A
398: 036D 74 0A MOV A,#0AH
399: 036F C5 F0 XCH A,B
400: 0371 84 DIV AB
401: 0372 C4 SWAP A
402: 0373 45 F0 ORL A,B
403: 0375 22 RET
404: 0376 00 00 01 01 TEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H ; 小數(shù)部分碼表
037A 02 03 03 04
405: 037E 05 05 06 06 DB 05H,05H,06H,06H,07H,08H,08H,09H
0382 07 08 08 09
406:
407: ;********************** 查詢溫度報(bào)警值子程序 ***************************
408: 0386 90 03 BA LOOK_ALARM: MOV DPTR,#M_ALAX2 ;指針指到顯示信息區(qū)
409: 0389 74 02 MOV A,#2 ;顯示在第二行
410: 038B 12 04 E7 LCALL LCD_PRINT
411: 038E 74 C6 MOV A,#0C6H
412: 0390 12 03 CB LCALL TEMP_BJ1
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 9
Line I Addr Code Source
413: 0393 E5 27 MOV A,TEMP_TH ;加載TH數(shù)據(jù)
414: 0395 75 2F 03 MOV LCD_X,#3 ;設(shè)置顯示位置
415: 0398 12 03 E0 LCALL SHOW_DIG2H ;顯示數(shù)據(jù)
416: 039B 74 CE MOV A,#0CEH
417: 039D 12 03 CB LCALL TEMP_BJ1
418: 03A0 E5 28 MOV A,TEMP_TL ;加載TL數(shù)據(jù)
419: 03A2 75 2F 0C MOV LCD_X,#12 ;設(shè)置顯示位置
420: 03A5 12 04 10 LCALL SHOW_DIG2L ;顯示數(shù)據(jù)
421: 03A8 22 RET
422: 03A9 20 4C 4F 4F M_ALAX1: DB " LOOK ALERT CODE",0
03AD 4B 20 41 4C
03B1 45 52 54 20
03B5 43 4F 44 45
03B9 00
423: 03BA 54 48 3A 20 M_ALAX2: DB "TH: TL: ",0
03BE 20 20 20 20
03C2 20 54 4C 3A
03C6 20 20 20 20
03CA 00
424: 03CB 12 05 23 TEMP_BJ1: LCALL WCOM
425: 03CE 90 03 DE MOV DPTR,#BJ2 ;指針指到顯示信息區(qū)
426: 03D1 79 00 MOV R1,#0
427: 03D3 78 02 MOV R0,#2
428: 03D5 E9 BBJJ2: MOV A,R1
429: 03D6 93 MOVC A,@A+DPTR
430: 03D7 12 05 31 LCALL WDATA
431: 03DA 09 INC R1
432: 03DB D8 F8 DJNZ R0,BBJJ2
433: 03DD 22 RET
434: 03DE 00 43 BJ2: DB 00H,"C"
435:
436: ;************************** LCD顯示子程序 **********************************
437: 03E0 75 F0 64 SHOW_DIG2H: MOV B,#100
438: 03E3 84 DIV AB
439: 03E4 24 30 ADD A,#30H
440: 03E6 C0 F0 PUSH B
441: 03E8 85 2F F0 MOV B,LCD_X
442: 03EB 12 04 97 LCALL LCDP2
443: 03EE D0 F0 POP B
444: 03F0 74 0A MOV A,#0AH
445: 03F2 C5 F0 XCH A,B
446: 03F4 84 DIV AB
447: 03F5 24 30 ADD A,#30H
448: 03F7 05 2F INC LCD_X
449: 03F9 C0 F0 PUSH B
450: 03FB 85 2F F0 MOV B,LCD_X
451: 03FE 12 04 97 LCALL LCDP2
452: 0401 D0 F0 POP B
453: 0403 05 2F INC LCD_X
454: 0405 E5 F0 MOV A,B
455: 0407 85 2F F0 MOV B,LCD_X
456: 040A 24 30 ADD A,#30H
457: 040C 12 04 97 LCALL LCDP2
458: 040F 22 RET
459:
460: 0410 SHOW_DIG2L:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 10
Line I Addr Code Source
461: 0410 75 F0 64 MOV B,#100
462: 0413 84 DIV AB
463: 0414 74 0A MOV A,#0AH
464: 0416 C5 F0 XCH A,B
465: 0418 84 DIV AB
466: 0419 24 30 ADD A,#30H
467: 041B C0 F0 PUSH B
468: 041D 85 2F F0 MOV B,LCD_X
469: 0420 12 04 97 LCALL LCDP2
470: 0423 D0 F0 POP B
471: 0425 05 2F INC LCD_X
472: 0427 E5 F0 MOV A,B
473: 0429 85 2F F0 MOV B,LCD_X
474: 042C 24 30 ADD A,#30H
475: 042E 12 04 97 LCALL LCDP2
476: 0431 22 RET
477:
478: ;************************ 顯示區(qū) BCD 碼溫度值刷新子程序 **********************
479: 0432 E5 2A DISPBCD: MOV A,TEMPLC
480: 0434 54 0F ANL A,#0FH
481: 0436 F5 70 MOV 70H,A ;小數(shù)位
482: 0438 E5 2A MOV A,TEMPLC
483: 043A C4 SWAP A
484: 043B 54 0F ANL A,#0FH
485: 043D F5 71 MOV 71H,A ;個(gè)位
486: 043F E5 29 MOV A,TEMPHC
487: 0441 54 0F ANL A,#0FH
488: 0443 F5 72 MOV 72H,A ;十位
489: 0445 E5 29 MOV A,TEMPHC
490: 0447 C4 SWAP A
491: 0448 54 0F ANL A,#0FH
492: 044A F5 73 MOV 73H,A ;百位
493: 044C 22 DISPBCD2: RET
494:
495: ;*************************** LCD 顯示數(shù)據(jù)處理子程序 *************************
496: 044D E5 73 CONV: MOV A,73H ;加載百位數(shù)據(jù)
497: 044F 75 2F 06 MOV LCD_X,#6 ;設(shè)置位置
498: 0452 B4 01 03 CJNE A,#1,CONV1
499: 0455 02 04 6B JMP CONV2
500: 0458 B4 0B 05 CONV1: CJNE A,#0BH,CONV11
501: 045B 74 2D MOV A,#"-" ;"-"號(hào)顯示
502: 045D 02 04 62 JMP CONV111
503: 0460 74 20 CONV11: MOV A,#" " ;"+"號(hào)不顯示
504: 0462 85 2F F0 CONV111: MOV B,LCD_X
505: 0465 12 04 97 LCALL LCDP2
506: 0468 02 04 6E JMP CONV3
507: 046B 12 04 8E CONV2: LCALL SHOW_DIG2 ;顯示數(shù)據(jù)
508: 046E 05 2F CONV3: INC LCD_X
509: 0470 E5 72 MOV A,72H ;十位
510: 0472 12 04 8E LCALL SHOW_DIG2
511: 0475 05 2F INC LCD_X
512: 0477 E5 71 MOV A,71H ;個(gè)位
513: 0479 12 04 8E LCALL SHOW_DIG2
514: 047C 05 2F INC LCD_X
515: 047E 74 2E MOV A,#'.'
516: 0480 85 2F F0 MOV B,LCD_X
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 11
Line I Addr Code Source
517: 0483 12 04 97 LCALL LCDP2
518: 0486 E5 70 MOV A,70H ;加載小數(shù)點(diǎn)位
519: 0488 05 2F INC LCD_X ;設(shè)置顯示位置
520: 048A 12 04 8E LCALL SHOW_DIG2 ;顯示數(shù)據(jù)
521: 048D 22 RET
522:
523: ;*************************** 第二行顯示數(shù)字子程序 *************************
524: 048E 24 30 SHOW_DIG2:ADD A,#30H
525: 0490 85 2F F0 MOV B,LCD_X
526: 0493 12 04 97 LCALL LCDP2
527: 0496 22 RET
528:
529: ;*************************** 第二行顯示數(shù)字子程序 *************************
530: 0497 C0 E0 LCDP2: PUSH ACC
531: 0499 E5 F0 MOV A,B ;設(shè)置顯示地址
532: 049B 24 C0 ADD A,#0C0H ;設(shè)置LCD的第二行地址
533: 049D 12 05 23 LCALL WCOM ;寫入命令
534: 04A0 D0 E0 POP ACC ;由堆棧取出A
535: 04A2 12 05 31 LCALL WDATA ;寫入數(shù)據(jù)
536: 04A5 22 RET
537:
538: ;*************************** 對(duì) LCD 做初始化設(shè)置及測(cè)試*************************
539: 04A6 C2 A2 SET_LCD: CLR LCD_EN
540: 04A8 12 04 AF LCALL INIT_LCD ;初始化 LCD
541: 04AB 12 02 A8 LCALL STORE_DATA ;將自定義字符存入LCD的CGRAM
542: 04AE 22 RET
543:
544: ;****************************** LCD初始化 ***********************************
545: 04AF 74 38 INIT_LCD: MOV A,#38H ;2行顯示,字形5*7點(diǎn)陣
546: 04B1 12 05 23 LCALL WCOM
547: 04B4 12 05 73 LCALL DELAY1
548: 04B7 74 38 MOV A,#38H
549: 04B9 12 05 23 LCALL WCOM
550: 04BC 12 05 73 LCALL DELAY1
551: 04BF 74 38 MOV A,#38H
552: 04C1 12 05 23 LCALL WCOM
553: 04C4 12 05 73 LCALL DELAY1
554: 04C7 74 0C MOV A,#0CH ;開顯示,顯示光標(biāo),光標(biāo)不閃爍
555: 04C9 12 05 23 LCALL WCOM
556: 04CC 12 05 73 LCALL DELAY1
557: 04CF 74 01 MOV A,#01H ;清除 LCD 顯示屏
558: 04D1 12 05 23 LCALL WCOM
559: 04D4 12 05 73 LCALL DELAY1
560: 04D7 22 RET
561:
562: ;***************************** 清除LCD的第一行字符 **************************
563: 04D8 74 80 CLR_LINE1:MOV A,#80H ;設(shè)置 LCD 的第一行地址
564: 04DA 12 05 23 LCALL WCOM
565: 04DD 78 18 MOV R0,#24 ;設(shè)置計(jì)數(shù)值
566: 04DF 74 20 C1: MOV A,#' ' ;載入空格符至LCD
567: 04E1 12 05 31 LCALL WDATA ;輸出字符至LCD
568: 04E4 D8 F9 DJNZ R0,C1 ;計(jì)數(shù)結(jié)束
569: 04E6 22 RET
570: ;************************* LCD的第一行或第二行顯示字符 **********************
571: 04E7 B4 01 10 LCD_PRINT:CJNE A,#1,LINE2 ;判斷是否為第一行
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -