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

📄 ex10-4.lst

📁 ds18b20温度采集及数码管显示
💻 LST
📖 第 1 页 / 共 3 页
字号:

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 + -