⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex10-4.lst

📁 ds18b20温度采集及数码管显示
💻 LST
📖 第 1 页 / 共 3 页
字号:
  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里的温度报警值拷贝回暂存器
  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      		;写入数据
  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数据写入操作子程序 ************************
  297:	  02C5	7A 08		WRITE:  MOV R2,#8            	;一共8位数据
  298:	  02C7	C3		        CLR  C
  299:	  02C8	C2 B3		WR1:    CLR DQ        			;开始写入DS18B20总线要处于复位(低)状态
  300:	  02CA	7B 07		        MOV R3,#07
  301:	  02CC	DB FE		        DJNZ R3,$            	;总线复位保持16微妙以上
  302:	  02CE	13		        RRC A                	;把一个字节DATA 分成8个BIT环移给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数据读取操作子程序  **************************
  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           	;延时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                	;把读得的位值环移给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         ;温度零上转
  341:	  0308	C3		               CLR  C
  342:	  0309	E5 25		               MOV  A,TEMPL       ;二进制数求补(双字节)
  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		;负温度标志
  351:	  031A	75 2B 0B				   MOV   TEMPFC,#0BH
  352:	  031D	80 06		               SJMP  TEMPC11
  353:	  031F	75 29 0A	TEMPC1:        MOV  TEMPHC,#0AH     	;正温度标志
  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=小数部分 BCD
  363:	  0334	E5 25		               MOV  A,TEMPL             ;整数部分
  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 = 十位数 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 = 个位数 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 = 百位数 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:				;************************ 二-十进制转换子程序 *****************************
  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  ; 小数部分码表
	  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:				;********************** 查询温度报警值子程序 ***************************
  408:	  0386	90 03 BA	LOOK_ALARM:	  MOV  DPTR,#M_ALAX2   	;指针指到显示信息区
  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数据
  414:	  0395	75 2F 03	          MOV  LCD_X,#3        		;设置显示位置
  415:	  0398	12 03 E0	          LCALL  SHOW_DIG2H     	;显示数据
  416:	  039B	74 CE		          MOV  A,#0CEH
  417:	  039D	12 03 CB	          LCALL  TEMP_BJ1
  418:	  03A0	E5 28		          MOV  A,TEMP_TL       		;加载TL数据
  419:	  03A2	75 2F 0C	          MOV  LCD_X,#12       		;设置显示位置
  420:	  03A5	12 04 10	          LCALL  SHOW_DIG2L     	;显示数据
  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      		;指针指到显示信息区
  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:				;************************ 显示区 BCD 码温度值刷新子程序 **********************
  479:	  0432	E5 2A		DISPBCD:      MOV  A,TEMPLC
  480:	  0434	54 0F		              ANL  A,#0FH
  481:	  0436	F5 70		              MOV  70H,A                 ;小数位
  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                 ;个位
  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 显示数据处理子程序 *************************
  496:	  044D	E5 73		CONV:     MOV  A,73H         			;加载百位数据
  497:	  044F	75 2F 06	          MOV  LCD_X,#6      			;设置位置
  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,#"-"		  			;"-"号显示
  502:	  045D	02 04 62			  JMP  CONV111
  503:	  0460	74 20		CONV11:   MOV  A,#" "		  			;"+"号不显示
  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    			;显示数据
  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         			;个位
  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         			;加载小数点位
  519:	  0488	05 2F		          INC  LCD_X         			;设置显示位置
  520:	  048A	12 04 8E	          LCALL  SHOW_DIG2    			;显示数据
  521:	  048D	22		          RET
  522:
  523:				;*************************** 第二行显示数字子程序 *************************
  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:				;*************************** 第二行显示数字子程序 *************************
  530:	  0497	C0 E0		LCDP2:   PUSH  ACC
  531:	  0499	E5 F0		         MOV  A,B         	;设置显示地址
  532:	  049B	24 C0		         ADD  A,#0C0H     	;设置LCD的第二行地址
  533:	  049D	12 05 23	         LCALL  WCOM       ;写入命令
  534:	  04A0	D0 E0		         POP  ACC         	;由堆栈取出A
  535:	  04A2	12 05 31	         LCALL  WDATA      	;写入数据
  536:	  04A5	22		         RET
  537:
  538:				;*************************** 对 LCD 做初始化设置及测试*************************
  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点阵
  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        ;开显示,显示光标,光标不闪烁
  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        ;设置 LCD 的第一行地址
  564:	  04DA	12 05 23	          LCALL  WCOM
  565:	  04DD	78 18		          MOV  R0,#24        ;设置计数值
  566:	  04DF	74 20		    C1:   MOV  A,#' '        ;载入空格符至LCD
  567:	  04E1	12 05 31	          LCALL  WDATA       ;输出字符至LCD
  568:	  04E4	D8 F9		          DJNZ  R0,C1        ;计数结束
  569:	  04E6	22		          RET
  570:				;************************* LCD的第一行或第二行显示字符 **********************
  571:	  04E7	B4 01 10	LCD_PRINT:CJNE  A,#1,LINE2  ;判断是否为第一行

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -