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

📄 pxsjp.lst

📁 电子时钟的单片机设计
💻 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:	PXSJP.ASM
	Object File:	PXSJP.HEX
	List File:	PXSJP.LST



 Line  I  Addr  Code            Source

    1:		N      0000	        org     0000h
    2:	  0000	02 00 30	        ljmp    main
    3:		N      000B	        org   000bh
    4:	  000B	02 02 AE	        ljmp  it00                ;定时中断0
    5:				;***************************;
    6:				;         主程序	    ;
    7:				;***************************;
    8:		N      0030	        org     0030h
    9:	  0030			main:
   10:	  0030	75 28 00		mov   28h,#00h		 ;标记位总清零
   11:	  0033	75 41 23		mov   41h,#23h           ;显视数字的首地址指针(即23单元)
   12:	  0036	75 50 22	        mov   50h,#22h           ;显视横杠的首地址指针(即22单元)
   13:				   ; 	mov   44h,#00h           ;定时器高位(TH0)初值
   14:				    ;    mov   43h,#00h           ;定时器低位(TL0)初值
   15:	  0039	75 5B 00		mov   5bh,#00h
   16:	  003C	75 5C 00	        mov   5ch,#00h
   17:	  003F	C2 50			clr   50h
   18:	  0041	C2 6E			clr   6eh                ;清闪动开关标志位
   19:	  0043	75 89 01		mov   tmod,#01h          ;定时方式1 (16位计数器)
   20:				   ;     mov   th0,44h            ;定时器高位(TH0)送初值
   21:				    ;    mov   tl0,43h		 ;定时器低位(TL0)送初值
   22:	  0046	D2 A9		        setb  et0                ;定时中断0 允许中断
   23:	  0048	D2 8C		        setb  tr0                ;启动定时器
   24:	  004A	D2 AF			setb  ea                 ;开中断
   25:	  004C	75 42 2E		mov   42h,#2eh
   26:	  004F	75 20 2E		mov   20h,#2eh
   27:	  0052	75 21 2E		mov   21h,#2eh
   28:	  0055	75 22 2E	        mov   22h,#2eh
   29:	  0058	75 23 2F	        mov   23h,#2fh            ;让23单元显视P
   30:	  005B	12 03 01	key:    lcall dirv
   31:				;-------------------------;
   32:				;         读键            ;
   33:				;-------------------------;
   34:	  005E			kl0:
   35:	  005E	D2 A9		       setb  et0                ;定时中断0 允许中断
   36:	  0060	D2 8C		       setb  tr0                ;启动定时器
   37:	  0062	D2 AF		       setb  ea                 ;开中断
   38:	  0064	74 0F		       mov   a,#0fh
   39:	  0066	F5 A0		       mov   p2,a
   40:	  0068	E5 A0		       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
   41:	  006A	30 E0 0F	       jnb   acc.0,kl1          ;判断有无键按下
   42:	  006D	30 E1 0C	       jnb   acc.1,kl1          ;判断有无键按下
   43:	  0070	30 E2 09	       jnb   acc.2,kl1          ;判断有无键按下

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 2



 Line  I  Addr  Code            Source

   44:	  0073	30 E3 06	       jnb   acc.3,kl1          ;判断有无键按下
   45:	  0076	12 03 01	       lcall dirv
   46:	  0079	02 00 5E	       ljmp  kl0                ;无键按下继续
   47:	  007C	12 03 01	kl1:   lcall dirv               ;20h单元位0为1处于最高位带小数点显示
   48:	  007F	74 0F		kl12:  mov   a,#0fh
   49:	  0081	F5 A0		       mov   p2,a
   50:	  0083	E5 A0		       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
   51:	  0085	30 E0 11	       jnb   acc.0,kl2
   52:	  0088	30 E1 0E	       jnb   acc.1,kl2
   53:	  008B	30 E2 0B	       jnb   acc.2,kl2
   54:	  008E	30 E3 08	       jnb   acc.3,kl2          ;判断有无键按下
   55:	  0091	C2 51		       clr   51h               ;清除键按下标记:28h单元位1为1则键按下
   56:	  0093	12 03 01	       lcall dirv
   57:	  0096	02 00 5E	       ljmp  kl0               ;为抖动没键按下继续
   58:	  0099	30 51 03	kl2:   jnb   51h,ke1y          ;28h单元位1为1则键按下已经处理过反回
   59:	  009C	02 00 5E	       ljmp  kl0
   60:	  009F	D2 51		ke1y:  setb  51h               ;打上键按下标记:28h单元位1为1则键按下
   61:	  00A1	7A EF		       mov   r2,#0efh          ;确实有键开始扫描键值
   62:	  00A3	7C 00		       mov   r4,#00h
   63:	  00A5			pk1:  ; mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
   64:	  00A5	EA		       mov   a,r2
   65:	  00A6	F5 A0		       mov   p2,a
   66:	  00A8	E5 A0		       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
   67:	  00AA	79 00		       mov   r1,#00h            ;r1中为键行数
   68:	  00AC	30 E0 15	       jnb   acc.0,pk20          ;判有无键按下
   69:	  00AF	12 00 D6	       lcall kll2
   70:	  00B2	30 E1 0F	       jnb   acc.1,pk20          ;判有无键按下
   71:	  00B5	12 00 D6	       lcall kll2
   72:	  00B8	30 E2 09	       jnb   acc.2,pk20          ;判有无键按下
   73:	  00BB	12 00 D6	       lcall kll2
   74:	  00BE	30 E3 03	       jnb   acc.3,pk20          ;判有无键按下
   75:	  00C1	02 00 CB	       ljmp  pk2
   76:	  00C4	74 00		pk20:  mov   a,#00h
   77:	  00C6	2C		       add   a,r4
   78:	  00C7	29		       add   a,r1
   79:	  00C8	02 00 DD	       ljmp  pk5               ;扫到键值去散转处理
   80:	  00CB	0C		pk2:   inc   r4
   81:	  00CC	EA		       mov   a,r2
   82:	  00CD	30 E7 04	       jnb   acc.7,pk3         ;判断4个键是否扫描完
   83:	  00D0	23		       rl    a
   84:	  00D1	FA		       mov   r2,a
   85:	  00D2	01 A5		       ajmp  pk1               ;16个键没扫完继续
   86:	  00D4	01 5E		pk3:   ajmp  kl0               ;16个键全扫完为误动作反回
   87:
   88:	  00D6	F8		kll2:  mov   r0,a
   89:	  00D7	E9		       mov   a,r1
   90:	  00D8	24 04		       add   a,#04h              ;加一行四个键
   91:	  00DA	F9		       mov   r1,a
   92:	  00DB	E8		       mov   a,r0
   93:	  00DC	22		       ret
   94:
   95:				;------------------------------;
   96:				;       键状态判断子程序       ;
   97:				;------------------------------;
   98:	  00DD	90 00 E7	pk5:    mov   dptr,#tb0         ;散转处理
   99:	  00E0	FA		        mov   r2,a

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 3



 Line  I  Addr  Code            Source

  100:	  00E1	2A		        add   a,r2
  101:	  00E2	50 02		        jnc   pk6
  102:	  00E4	05 83		        inc   dph
  103:	  00E6	73		pk6:    jmp   @a+dptr
  104:	  00E7	21 0A		tb0:    ajmp  k11                ;键7
  105:	  00E9	21 1D		        ajmp  k12                ;键8
  106:	  00EB	21 30		        ajmp  k13                ;键9
  107:	  00ED	21 43		        ajmp  k14                ;键/
  108:
  109:	  00EF	21 46		        ajmp  k21                ;键4
  110:	  00F1	21 59		        ajmp  k22                ;键5
  111:	  00F3	21 6C		        ajmp  k23                ;键6
  112:	  00F5	21 7F		        ajmp  k24                ;键x
  113:
  114:	  00F7	21 82		        ajmp  k31                ;键1
  115:	  00F9	21 95		        ajmp  k32                ;键2
  116:	  00FB	21 A8		        ajmp  k33                ;键3
  117:	  00FD	21 BB		        ajmp  k34                ;键-
  118:
  119:	  00FF	41 3A		        ajmp  k41                ;键c
  120:	  0101	41 3D		        ajmp  k42                ;键0
  121:	  0103	41 50		        ajmp  k43                ;键=
  122:	  0105	41 53		        ajmp  k44                ;键+
  123:
  124:	  0107	02 00 5E	        ljmp  kl0
  125:
  126:	  010A			k11:                            ;键7
  127:	  010A	12 02 C4	        lcall xshg
  128:	  010D	A8 41		        mov   r0,41h
  129:	  010F	76 07		        mov   @r0,#07h
  130:	  0111	12 02 EC	        lcall xs
  131:	  0114	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  132:	  0117	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  133:	  011A	02 00 5E	        ljmp  kl0
  134:	  011D			k12:                            ;键8
  135:	  011D	12 02 C4		lcall xshg
  136:	  0120	A8 41		        mov   r0,41h
  137:	  0122	76 08		        mov   @r0,#08h
  138:	  0124	12 02 EC	        lcall xs
  139:	  0127	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  140:	  012A	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  141:	  012D	02 00 5E		ljmp  kl0
  142:	  0130			k13:                            ;键9
  143:	  0130	12 02 C4		lcall xshg
  144:	  0133	A8 41		        mov   r0,41h
  145:	  0135	76 09		        mov   @r0,#09h
  146:	  0137	12 02 EC	        lcall xs
  147:	  013A	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  148:	  013D	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  149:	  0140	02 00 5E		ljmp  kl0
  150:	  0143			k14:                            ;键/
  151:	  0143	02 00 5E		ljmp  kl0
  152:
  153:	  0146			k21:                            ;键4
  154:	  0146	12 02 C4		lcall xshg
  155:	  0149	A8 41		        mov   r0,41h

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 4



 Line  I  Addr  Code            Source

  156:	  014B	76 04		        mov   @r0,#04h
  157:	  014D	12 02 EC	        lcall xs
  158:	  0150	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  159:	  0153	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  160:	  0156	02 00 5E		ljmp  kl0
  161:	  0159			k22:                            ;键5
  162:	  0159	12 02 C4		lcall xshg
  163:	  015C	A8 41		        mov   r0,41h
  164:	  015E	76 05		        mov   @r0,#05h
  165:	  0160	12 02 EC	        lcall xs
  166:	  0163	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  167:	  0166	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  168:	  0169	02 00 5E		ljmp  kl0
  169:	  016C			k23:                            ;键6
  170:	  016C	12 02 C4		lcall xshg
  171:	  016F	A8 41		        mov   r0,41h
  172:	  0171	76 06		        mov   @r0,#06h
  173:	  0173	12 02 EC	        lcall xs
  174:	  0176	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  175:	  0179	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  176:	  017C	02 00 5E		ljmp  kl0
  177:	  017F			k24:                            ;键x
  178:	  017F	02 00 5E		ljmp  kl0
  179:
  180:	  0182			k31:                            ;键1
  181:	  0182	12 02 C4		lcall xshg
  182:	  0185	A8 41		        mov   r0,41h
  183:	  0187	76 01		        mov   @r0,#01h
  184:	  0189	12 02 EC	        lcall xs
  185:	  018C	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  186:	  018F	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  187:	  0192	02 00 5E		ljmp  kl0
  188:	  0195			k32:                            ;键2
  189:	  0195	12 02 C4		lcall xshg
  190:	  0198	A8 41		        mov   r0,41h
  191:	  019A	76 02		        mov   @r0,#02h
  192:	  019C	12 02 EC	        lcall xs
  193:	  019F	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  194:	  01A2	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  195:	  01A5	02 00 5E		ljmp  kl0
  196:	  01A8			k33:                            ;键3
  197:	  01A8	12 02 C4		lcall xshg
  198:	  01AB	A8 41		        mov   r0,41h
  199:	  01AD	76 03		        mov   @r0,#03h
  200:	  01AF	12 02 EC	        lcall xs
  201:	  01B2	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  202:	  01B5	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  203:	  01B8	02 00 5E		ljmp  kl0
  204:	  01BB			k34:                            ;键-
  205:	  01BB	85 41 4A		mov   4ah,41h        ;保存当前显示指针到4ah
  206:	  01BE	05 6B		       inc   6bh            ;
  207:	  01C0	E5 6B		       mov   a,6bh
  208:	  01C2	64 01		       xrl   a,#01h         ;是否第一次按k34
  209:	  01C4	70 2C		       jnz    kw2
  210:	  01C6	A8 41		       mov   r0,41h
  211:	  01C8	E6		       mov   a,@r0          ;当前显示值送a

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 5



 Line  I  Addr  Code            Source

  212:	  01C9	45 42		       orl   a,42h          ;当前显示值与闪烁保留值"或"取出当前实际值
  213:	  01CB	F5 F0		cs:    mov   b,a            ;寻找数据末位
  214:	  01CD	E5 F0		       mov   a,b
  215:	  01CF	64 30		       xrl   a,#30h         ;当前显示位是否为"-"
  216:	  01D1	70 03		       jnz   cs10
  217:	  01D3	02 01 EE	       ljmp  kw0            ;当前显示位是为"-"
  218:	  01D6	E5 F0		cs10:  mov   a,b
  219:	  01D8	64 2E		       xrl   a,#2eh         ;当前显示位是否为"灭"
  220:	  01DA	70 03		       jnz   cs20
  221:	  01DC	02 01 EE	       ljmp  kw0            ;当前显示位是为"灭"
  222:	  01DF	18		cs20:  dec   r0             ;当前显示位不是为"灭",继续寻找数据末位
  223:	  01E0	E8		       mov   a,r0
  224:	  01E1	64 1F		       xrl   a,#1fh         ;是否找过最低显示位;20h
  225:	  01E3	60 03		       jz    kw00
  226:	  01E5	02 01 CB	       ljmp  cs
  227:	  01E8	75 5B 00	kw00:  mov   5bh,#00h       ;显示位全为数据:5bh指向显示末位
  228:	  01EB	02 01 F2	       ljmp  kw2
  229:	  01EE	88 5B		kw0:   mov   5bh,r0        ;
  230:	  01F0	05 5B		       inc   5bh            ;是第一次按k17当前显示指针加一(指向有数末位)存5bh
  231:	  01F2	15 41		kw2:   dec   41h            ;当前指针减一
  232:	  01F4	E5 41		       mov   a,41h
  233:	  01F6	64 1F		       xrl   a,#1fh
  234:	  01F8	70 05		       jnz   k170           ;是否减过最低显示位
  235:	  01FA	75 41 23	       mov   41h,#23h       ;减过最低显示位回到最高显示位
  236:	  01FD	21 FF		       ajmp  k170
  237:	  01FF	A8 4A		k170:  mov   r0,4ah         ;当前显示指针存r0
  238:	  0201	E5 41		       mov   a,41h
  239:	  0203	64 23		       xrl   a,#23h         ;减一后的显示指针是否指向最高显示位
  240:	  0205	70 0E		       jnz   kw3
  241:	  0207	E5 5B		       mov   a,5bh
  242:	  0209	64 00		       xrl   a,#00h
  243:	  020B	70 03		       jnz   k171
  244:	  020D	02 02 31	       ljmp  kw
  245:	  0210	75 42 2E	k171:  mov   42h,#2eh       ;减一后的显示指针是指向最高显示位,当前显示"灭"
  246:	  0213	A6 42		       mov   @r0,42h
  247:	  0215	E5 41		kw3:   mov   a,41h
  248:	  0217	04		       inc   a
  249:	  0218	65 5B		       xrl   a,5bh          ;是否第一次按k34
  250:	  021A	60 0A		       jz     kw12
  251:	  021C	E5 41		       mov   a,41h          ;不是第一次按k34
  252:	  021E	04		       inc   a
  253:	  021F	95 5B		       subb  a,5bh          ;
  254:	  0221	50 0E		       jnc   kw
  255:	  0223	75 42 2E	       mov   42h,#2eh
  256:	  0226	A6 42		kw12:  mov   @r0,42h        ;当前显示位是显示"灭"
  257:	  0228	A8 41		       mov   r0,41h
  258:	  022A	76 30		       mov   @r0,#30h
  259:	  022C	86 42		       mov   42h,@r0
  260:	  022E	02 00 5E	       ljmp  kl0
  261:	  0231			kw:
  262:	  0231	A6 42		       mov   @r0,42h
  263:	  0233	A8 41		       mov   r0,41h
  264:	  0235	86 42		       mov   42h,@r0
  265:	  0237	02 00 5E		ljmp  kl0
  266:
  267:	  023A			k41:                            ;键c

ASEM-51 V1.2                                         Copyright (c) 1996 by W.W. Heinz                                         PAGE 6



 Line  I  Addr  Code            Source

  268:	  023A	02 00 5E		ljmp  kl0
  269:	  023D			k42:                            ;键0
  270:	  023D	12 02 C4		lcall xshg
  271:	  0240	A8 41		        mov   r0,41h
  272:	  0242	76 00		        mov   @r0,#00h
  273:	  0244	12 02 EC	        lcall xs
  274:	  0247	75 6B 00	        mov   6bh,#00h          ;清除键"-"记忆
  275:	  024A	75 5B 00	        mov   5bh,#00h          ;显示数据末位指针清零
  276:	  024D	02 00 5E		ljmp  kl0
  277:	  0250			k43:                            ;键=
  278:	  0250	02 00 5E		ljmp  kl0
  279:	  0253			k44:                            ;键+
  280:	  0253	85 41 4A		mov   4ah,41h
  281:	  0256	05 41		       inc   41h
  282:	  0258	E5 41		       mov   a,41h
  283:	  025A	85 41 6C	       mov   6ch,41h
  284:	  025D	64 24		       xrl   a,#24h
  285:	  025F	70 05		       jnz   k160
  286:	  0261	75 41 20	       mov   41h,#20h
  287:	  0264	41 66		       ajmp  k160
  288:	  0266	E5 41		k160:  mov   a,41h
  289:	  0268	64 20		       xrl   a,#20h
  290:	  026A	70 09		       jnz   kw4
  291:	  026C	85 21 6C	       mov   6ch,21h
  292:	  026F	E5 6C		       mov   a,6ch
  293:	  0271	95 5B		       subb  a,5bh

⌨️ 快捷键说明

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