📄 pxsjp.lst
字号:
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 + -