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

📄 ex9-7.lst

📁 《单片机原理实用教程——基于Proteus虚拟仿真》一书的配套光盘
💻 LST
📖 第 1 页 / 共 2 页
字号:

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:	EX9-7.ASM
	Object File:	EX9-7.HEX
	List File:	EX9-7.LST



 Line  I  Addr  Code            Source

    1:		N      0040	 	KD   EQU 40H  		;键值单元
    2:		N      0041	    	ST   EQU 41H		;状态单元
    3:		N      0000	        ORG  0000H              ;复位入口
    4:	  0000	02 00 30	    	LJMP MAIN
    5:		N      0030	        ORG  0030H
    6:	  0030	75 81 50	MAIN:   MOV  SP, #50H
    7:	  0033	75 7A 11	 	MOV  7AH,#11H
    8:	  0036	75 7B 10		MOV  7BH,#10H
    9:	  0039	75 7C 10		MOV  7CH,#10H
   10:	  003C	75 7D 12		MOV  7DH,#12H
   11:	  003F	75 7E 10		MOV  7EH,#10H
   12:	  0042	75 7F 10		MOV  7FH,#10H
   13:	  0045	75 41 00	        MOV  ST, #00H
   14:	  0048	75 40 00	        MOV  KD, #00H
   15:	  004B	90 7F 00		MOV  DPTR,#7F00H          ;8155命令口地址
   16:	  004E	74 03			MOV  A,#03H               ;置8155PA、PB口为输出,PC口为输入
   17:	  0050	F0			MOVX @DPTR,A
   18:	  0051	00		ML0:    NOP
   19:	  0052	12 01 C9	        LCALL 	DISP
   20:	  0055	12 00 5A	        LCALL   READKEY             ;调读键值程序
   21:	  0058	80 F7		        SJMP    ML0                 ;无键按下,循环等待
   22:	  005A	12 01 68	READKEY:LCALL   KEY                 ;调按键识别程序
   23:	  005D	EC		        MOV     A, R4               ;得到键值在A中
   24:	  005E	B4 88 01	        CJNE    A,#88H,KLD          ;有键按下,转到键值分析
   25:	  0061	22		        RET
   26:	  0062	F5 40		KLD:    MOV     KD, A               ;将键值存于KD单元
   27:	  0064	E5 41		KDD0:   MOV     A, ST               ;读状态子表入口地址→DPTR
   28:	  0066	23			RL      A
   29:	  0067	C0 E0		    	PUSH    ACC
   30:	  0069	90 00 C6	    	MOV     DPTR, #TBB1
   31:	  006C	93		    	MOVC    A, @A+DPTR
   32:	  006D	F5 F0		    	MOV     B, A
   33:	  006F	D0 E0		    	POP     ACC
   34:	  0071	04		    	INC     A
   35:	  0072	93		    	MOVC    A, @A+DPTR
   36:	  0073	F5 82		    	MOV     DPL, A
   37:	  0075	85 F0 83	    	MOV     DPH, B
   38:	  0078	E4		CTT:    CLR     A
   39:	  0079	93		    	MOVC    A, @A+DPTR          ;读判定码
   40:	  007A	B5 40 02	    	CJNE    A, KD, NEE          ;功能键判定
   41:	  007D	80 12		    	SJMP    QEE                 ;是功能键
   42:	  007F	B4 FF 02	NEE:    CJNE    A, #0FFH, NCC       ;未用键判定
   43:	  0082	80 0D		    	SJMP    QEE                 ;是未用键

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 2



 Line  I  Addr  Code            Source

   44:	  0084	B4 09 05	NCC:    CJNE    A, #09H, NNN        ;数字键判定
   45:	  0087	B5 40 00	        CJNE    A, KD, NPP
   46:	  008A	50 05		NPP:    JNC     QEE                 ;是数字键
   47:	  008C	A3		NNN:    INC     DPTR                ;条目不符
   48:	  008D	A3		        INC     DPTR
   49:	  008E	A3		        INC     DPTR
   50:	  008F	80 E7		        SJMP    CTT                 ;返回,继续读键值并判定
   51:	  0091	E4		QEE:    CLR     A                   ;判定符合
   52:	  0092	A3		        INC     DPTR
   53:	  0093	93			MOVC    A, @A+DPTR          ;读次态码→ST
   54:	  0094	F5 41			MOV     ST, A
   55:	  0096	60 CC			JZ      KDD0                ;若为0态,返回KDD0重新进行
   56:	  0098	E4			CLR     A
   57:	  0099	A3			INC     DPTR
   58:	  009A	93			MOVC    A, @A+DPTR          ;读子程序号
   59:	  009B	90 00 A2		MOV     DPTR, #SUBJ
   60:	  009E	F8			MOV 	R0,A
   61:	  009F	23			RL      A
   62:	  00A0	28			ADD	A,R0
   63:	  00A1	73			JMP     @A+DPTR             ;散转到子程序入口
   64:	  00A2	02 01 14	SUBJ:   LJMP  SUB0      	    ;转移到不同的子程序
   65:	  00A5	02 01 1B	    	LJMP SUB1
   66:	  00A8	02 01 22	    	LJMP SUB2
   67:	  00AB	02 01 29	    	LJMP SUB3
   68:	  00AE	02 01 30	    	LJMP SUB4
   69:	  00B1	02 01 37	    	LJMP SUB5
   70:	  00B4	02 01 3E	    	LJMP SUB6
   71:	  00B7	02 01 45	    	LJMP SUB7
   72:	  00BA	02 01 4C	    	LJMP SUB8
   73:	  00BD	02 01 53	    	LJMP SUB9
   74:	  00C0	02 01 5A	    	LJMP SUB10
   75:	  00C3	02 01 61	    	LJMP SUB11
   76:	  00C6	00 D2		TBB1:  	DW  TB20 		    ;状态子表入口地址索引表
   77:	  00C8	00 EA			DW  TB21
   78:	  00CA	00 F9			DW  TB22
   79:	  00CC	01 02			DW  TB23
   80:	  00CE	01 0B		    	DW  TB24
   81:	  00D0	01 11			DW  TB25
   82:	  00D2	0B 05 01	TB20:   DB  0BH,5,1     	    ;0状态子表
   83:	  00D5	0C 05 02	    	DB  0CH,5,2
   84:	  00D8	0D 05 03	    	DB  0DH,5,3
   85:	  00DB	0E 05 04	    	DB  0EH,5,4
   86:	  00DE	0F 01 00	    	DB  0FH,1,0
   87:	  00E1	10 02 00	    	DB  10H,2,0
   88:	  00E4	11 05 05	    	DB  11H,5,5
   89:	  00E7	FF 05 00	    	DB  0FFH,5,0
   90:	  00EA	09 01 07	TB21:   DB  09,1,7      ;1状态子表
   91:	  00ED	12 01 08	    	DB  12H,1,8
   92:	  00F0	0F 03 00	    	DB  0FH,3,0
   93:	  00F3	13 05 06	    	DB  13H,5,6
   94:	  00F6	FF 00 00	    	DB  0FFH,0,0
   95:	  00F9	09 05 09	TB22:  	DB  09,5,9      ;2状态子表
   96:	  00FC	13 05 06	    	DB  13H,5,6
   97:	  00FF	FF 00 00	    	DB  0FFH,0,0
   98:	  0102	09 03 0A	TB23:  	DB  09,3,10     ;3状态子表
   99:	  0105	13 04 00	 	DB  13H,4,0

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 3



 Line  I  Addr  Code            Source

  100:	  0108	FF 00 00		DB  0FFH,0,0
  101:	  010B	13 05 06	TB24:  	DB  13H,5,6     ;4状态子表
  102:	  010E	FF 04 0B	    	DB  0FFH,4,11
  103:	  0111	FF 00 00	TB25:  	DB  0FFH,0,0    ;5状态子表
  104:	  0114	75 7E 00	SUB0:  	MOV 7EH,#0
  105:	  0117	85 41 7B		MOV 7BH,ST
  106:	  011A	22			RET         ;功能子程序,略
  107:	  011B	75 7E 01	SUB1:  	MOV 7EH,#1
  108:	  011E	85 41 7B		MOV 7BH,ST
  109:	  0121	22			RET
  110:	  0122	75 7E 02	SUB2:	MOV 7EH,#2
  111:	  0125	85 41 7B		MOV 7BH,ST
  112:	  0128	22			RET
  113:	  0129	75 7E 03	SUB3:  	MOV 7EH,#3
  114:	  012C	85 41 7B		MOV 7BH,ST
  115:	  012F	22			RET
  116:	  0130	75 7E 04	SUB4:	MOV 7EH,#4
  117:	  0133	85 41 7B		MOV 7BH,ST
  118:	  0136	22			RET
  119:	  0137	75 7E 05	SUB5:	MOV 7EH,#5
  120:	  013A	85 41 7B		MOV 7BH,ST
  121:	  013D	22			RET
  122:	  013E	75 7E 06	SUB6:	MOV 7EH,#6
  123:	  0141	85 41 7B		MOV 7BH,ST
  124:	  0144	22			RET
  125:	  0145	75 7E 07	SUB7:	MOV 7EH,#7
  126:	  0148	85 41 7B		MOV 7BH,ST
  127:	  014B	22			RET
  128:	  014C	75 7E 08	SUB8:	MOV 7EH,#8
  129:	  014F	85 41 7B		MOV 7BH,ST
  130:	  0152	22			RET
  131:	  0153	75 7E 09	SUB9:	MOV 7EH,#9
  132:	  0156	85 41 7B		MOV 7BH,ST
  133:	  0159	22			RET
  134:	  015A	75 7E 0A	SUB10:	MOV 7EH,#10
  135:	  015D	85 41 7B		MOV 7BH,ST
  136:	  0160	22			RET
  137:	  0161	75 7E 0B	SUB11:	MOV 7EH,#11
  138:	  0164	85 41 7B		MOV 7BH,ST
  139:	  0167	22			RET
  140:
  141:				;按键识别子程序
  142:	  0168	7C 00		KEY:	MOV    R4,#00H             ;0→键号寄存器R4
  143:	  016A	7A 01			MOV    R2,#01H             ;扫描模式01H→R2
  144:	  016C	90 7F 02	KEY1:   MOV    DPTR,#7F02H
  145:	  016F	EA			MOV    A,R2
  146:	  0170	F0			MOVX   @DPTR,A             ;扫描模式→8155PB口
  147:	  0171	A3			INC    DPTR
  148:	  0172	E0			MOVX   A,@DPTR             ;读8155 PC口
  149:	  0173	20 E0 0B		JB     ACC.0,KEY2          ;0列无键闭合,转判1列
  150:	  0176	12 02 06		LCALL  DELAY1		   ;延时,反弹跳
  151:	  0179	E0			MOVX   A,@DPTR
  152:	  017A	20 E0 04		JB     ACC.0,KEY2          ;0列无键闭合,转判1列
  153:	  017D	74 00			MOV    A,#00H              ;0列有键闭合,0→A
  154:	  017F	21 B7			AJMP   KEY55
  155:	  0181	20 E1 0B	KEY2:  	JB     ACC.1,KEY3          ;1列无键闭合,转判2列

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 4



 Line  I  Addr  Code            Source

  156:	  0184	12 02 06		LCALL  DELAY1		   ;延时,反弹跳
  157:	  0187	E0			MOVX   A,@DPTR
  158:	  0188	20 E1 04		JB     ACC.1,KEY3          ;0列无键闭合,转判1列
  159:	  018B	74 01			MOV    A,#01H              ;1列有键闭合,列线号01H→A
  160:	  018D	21 B7			AJMP   KEY55
  161:	  018F	20 E2 0B	KEY3:  	JB     ACC.2,KEY4          ;2列无键闭合,转判3列
  162:	  0192	12 02 06		LCALL  DELAY1		   ;延时,反弹跳
  163:	  0195	E0			MOVX   A,@DPTR
  164:	  0196	20 E2 04		JB     ACC.2,KEY4          ;0列无键闭合,转判1列
  165:	  0199	74 02			MOV    A,#02H              ;2列有键闭合,02H→A
  166:	  019B	21 B7			AJMP   KEY55
  167:	  019D	20 E3 0B	KEY4:  	JB     ACC.3,KEY5          ;3列无键闭合,转判下一行
  168:	  01A0	12 02 06		LCALL  DELAY1		   ;延时,反弹跳
  169:	  01A3	E0			MOVX   A,@DPTR
  170:	  01A4	20 E3 04		JB     ACC.3,KEY5          ;0列无键闭合,转判1列
  171:	  01A7	74 03			MOV    A,#03H              ;3列有键闭合,03H→A
  172:	  01A9	21 B7			AJMP   KEY55
  173:	  01AB	20 E4 0C	KEY5:  	JB     ACC.4,NEXT          ;4列无键闭合,转判下一行
  174:	  01AE	12 02 06		LCALL  DELAY1		   ;延时,反弹跳
  175:	  01B1	E0			MOVX   A,@DPTR
  176:	  01B2	20 E4 05		JB     ACC.4,NEXT          ;0列无键闭合,转判1列
  177:	  01B5	74 04			MOV    A,#04H              ;4列有键闭合,04H→A
  178:	  01B7	2C		KEY55: 	ADD    A,R4                ;列线号+(R4)作为键值→A

⌨️ 快捷键说明

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