📄 ad0803.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: AD0803.ASM
Object File: AD0803.HEX
List File: AD0803.LST
Line I Addr Code Source
1:
2: N 0000 org 0000h
3: 0000 02 00 30 ljmp main
4: N 0003 org 0003h
5: 0003 02 00 A2 ljmp int00
6:
7: N 0030 org 0030h
8: 0030 75 90 FF main: mov p1,#0ffh
9: 0033 75 2A 00 mov 2Ah,#00h ;2Ah设为标志位
10: 0036 75 20 01 mov 20h,#01h ;显示最高位缓冲
11: 0039 75 21 02 mov 21h,#02h
12: 003C 75 22 03 mov 22h,#03h
13: 003F 75 23 04 mov 23h,#04h
14: 0042 75 24 05 mov 24h,#05h
15: 0045 75 25 06 mov 25h,#06h
16: 0048 75 26 07 mov 26h,#07h
17: 004B 75 27 08 mov 27h,#08h ;显示最地位缓冲
18: 004E D2 B5 setb p3.5
19: 0050 D2 88 setb it0 ;外部中断0为边沿触发方式
20: 0052 D2 A8 setb ex0 ;允许外部中断0
21: 0054 75 3A FF mov 3ah,#0ffh
22: 0057 12 01 33 lcall dirv
23: ;-------------------------;
24: ; 读键 ;
25: ;-------------------------;
26: 005A kl0:
27: 005A 12 01 33 lcall dirv
28:
29: 005D 7B 00 mov r3,#00h
30: 005F AA 3A mov r2,3ah
31: 0061 12 00 A8 lcall lh ;量化(转换成um)
32: 0064 78 32 mov r0,#32h ;被解压BCD码高位存32h
33: 0066 79 23 mov r1,#23h ;解压后BCD码高位存20h
34: 0068 7A 35 mov r2,#35h ;被解压BCD码最低位:r2-1
35: 006A 12 00 C4 lcall bcdjy ;BCD码解压缩(5字节)
36:
37: 006D C2 AF clr ea
38: 006F C0 24 push 24h
39: 0071 C0 1F push 1fh
40: 0073 C0 28 push 28h
41:
42: 0075 7B 00 mov r3,#00h
43: 0077 AA 3A mov r2,3ah
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 0079 12 00 A8 lcall lh ;量化(转换成um)
45: 007C 78 32 mov r0,#32h ;被解压BCD码高位存32h
46: 007E 79 1F mov r1,#1fh ;解压后BCD码高位存20h
47: 0080 7A 35 mov r2,#35h ;被解压BCD码最低位:r2-1
48: 0082 12 00 C4 lcall bcdjy ;BCD码解压缩(5字节)
49:
50: 0085 D0 28 pop 28h
51: 0087 D0 1F pop 1fh
52: 0089 D0 24 pop 24h
53:
54: 008B E5 20 mov a,20h ;最高为加小数点
55: 008D 24 0A add a,#0ah
56: 008F F5 20 mov 20h,a
57: 0091 E5 24 mov a,24h ;最高为加小数点
58: 0093 24 0A add a,#0ah
59: 0095 F5 24 mov 24h,a
60: 0097 12 01 33 lcall dirv
61:
62: 009A C2 B5 clr p3.5 ;选通0803
63: 009C F0 movx @dptr,a ;启动AD转换
64: 009D D2 AF setb ea ;允许中断
65: 009F 02 00 5A ljmp kl0 ;无键按下继续
66: ;---------------------;
67: ; 外部中断0 ;
68: ;---------------------;
69: 00A2 int00:
70: 00A2 E0 movx a,@dptr
71: 00A3 F5 3A mov 3ah,a
72: 00A5 D2 B5 setb p3.5
73: 00A7 32 reti
74: ;---------------------;
75: ; 量化(转换成um) ;
76: ;---------------------;
77: 00A8 12 00 D5 lh: lcall B16BCD ;二进制到BCD码(双字节)
78: 00AB 8E 30 mov 30h,r6 ;被乘数十万、万位
79: 00AD 8D 31 mov 31h,r5 ;被乘数干位、百位
80: 00AF 8C 32 mov 32h,r4 ;被乘数十位、个位
81: 00B1 75 40 03 mov 40h,#03h ;乘数百位、十位
82: 00B4 75 41 92 mov 41h,#92h ;乘数个位、小数点后第一位(2.443um)
83: 00B7 75 42 57 mov 42h,#57h ;乘数小数点后第二位、小数点后第三位
84: 00BA 78 30 mov r0,#30h ;被乘数入口指针
85: 00BC 79 40 mov r1,#40h ;乘数入口指针
86: 00BE 7B 03 mov r3,#03h ;参加乘法运算的压缩的BCD码位数
87: 00C0 12 00 F1 lcall CMUL ;无符号压缩BCD码乘法(CMUL)(积的小数位舍去送显示)
88: 00C3 22 ret
89: ;---------------------------------------;
90: ; @r0中BCD码解压缩到@r1(r2-r1字节);
91: ;---------------------------------------;
92:
93: 00C4 E6 bcdjy: mov a,@r0 ;分解一字节高位
94: 00C5 54 F0 anl a,#0f0h
95: 00C7 C4 swap a
96: 00C8 F7 mov @r1,a
97: 00C9 09 inc r1
98: 00CA E6 mov a,@r0 ;分解一字节低位
99: 00CB 54 0F anl a,#0fh
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 00CD F7 mov @r1,a
101: 00CE 09 inc r1
102: 00CF 08 inc r0
103: 00D0 E8 mov a,r0
104: 00D1 6A xrl a,r2
105: 00D2 70 F0 jnz bcdjy
106: 00D4 22 ret
107: ;-------------------------------;
108: ; 二进制到BCD码(双字节) ;
109: ;-------------------------------;
110: ; (1)入口,R3R2,(16位无符号二进制整数).
111: ; (2)出口:R6(万位)、R5(干位、百位)、R4(十位、个位)存放5位BCD码。
112: ;2.程序清单
113:
114: 00D5 B16BCD:
115: 00D5 E4 CLR A ;BCD码寄存器清零
116: 00D6 FC MOV R4,A
117: 00D7 FD MOV R5,A
118: 00D8 FE MOV R6,A
119: 00D9 7F 10 MOV R7,#10H ;设循环指针
120: 00DB C3 LP0: CLR C ;左移一位,移入c
121: 00DC EA MOV A,R2
122: 00DD 33 RLC A
123: 00DE FA MOV R2,A
124: 00DF EB MOV A,R3
125: 00E0 33 RLC A
126: 00E1 FB MOV R3,A
127: 00E2 EC MOV A,R4 ;实现(…)X2十ai运算
128:
129: 00E3 3C ADDC A,R4
130: 00E4 D4 DA A
131: 00E5 FC MOV R4,A
132: 00E6 ED MOV A,R5
133: 00E7 3D ADDC A,R5
134: 00E8 D4 DA A
135: 00E9 FD MOV R5,A
136: 00EA EE MOV A,R6
137: 00EB 3E ADDC A,R6
138: 00EC D4 DA A
139: 00ED FE MOV R6,A
140: 00EE DF EB DJNZ R7,LP0
141: 00F0 22 RET
142: ;-------------------------------------;
143: ; 无符号压缩BCD码乘法子程序(CMUL) ;
144: ;-------------------------------------;
145:
146: ;功能:将(R0)指向的n字节压缩的BCD码乘以(R1)指向的n
147: ;字节压缩的BCD码。
148: ;入口:十进制被乘数存放在addrl—addr+n—1单元,高位在前。
149: ;十进制乘数存放在addr2—acldr2+n—1单元,高位在前。
150: ;(R0):addrl,(R1)=addr2,(R3)=n
151: ;出口:积存放在addr-addrl+2n—1单元中,(R0)=addrl。
152: ;使用寄存器:A,R0,R1,n2,R3,R6,R7及标志cy0
153: ;例如:(R0)=20;(20)=01;(21)=25;(R1)=40;(40)=00;
154: ;(41)=25;(R3)=02
155: ;执行后得:(R0)=20;(20)=00;(21)=00;(22)=31; (23)=25
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
156: ;程序清单:
157: 00F1 EB CMUL: MOV A, R3
158: 00F2 FE MOV R6, A
159: 00F3 2B ADD A, R3
160: 00F4 FA MOV R2, A
161: 00F5 EB MOV A, R3
162: 00F6 28 ADD A, R0
163: 00F7 F8 MOV R0, A
164: 00F8 E9 MOV A, R1
165: 00F9 2B ADD A, R3
166: 00FA 14 DEC A
167: 00FB F9 MOV R1, A
168: 00FC E4 CLR A
169: 00FD F6 CMUL1: MOV @ R0, A
170: 00FE 08 INC R0
171: 00FF DE FC DJNZ R6, CMUL1
172: 0101 EA MOV A, R2
173: 0102 FE MOV R6, A
174: 0103 18 DEC R0
175: 0104 E4 CMUL2: CLR A
176: 0105 C6 CMUL3: XCH A, @R0
177: 0106 C4 SWAP A
178: 0107 D6 XCHD A, @R0
179: 0108 C6 XCH A, @R0
180: 0109 18 DEC R0
181: 010A DA F9 DJNZ R2,CMUL3
182: 010C FF MOV R7, A
183: 010D 60 1C JZ CMUL7
184: 010F EB CMUIA: MOV A, R3
185: 0110 FA MOV R2, A
186: 0111 2B ADD A, R3
187: 0112 28 ADD A, R0
188: 0113 F8 MOV R0, A
189: 0114 C3 CLR C
190: 0115 E6 CMUL5: MOV A, @R0
191: 0116 37 ADDC A, @R1
192: 0117 D4 DA A
193: 0118 F6 MOV @R0,A
194: 0119 18 DEC R0
195: 011A 19 DEC R1
196: 011B DA F8 DJNZ R2, CMUL5
197: 011D EB MOV A, R3
198: 011E FA MOV R2, A
199: 011F E4 CMUL6: CLR A
200: 0120 36 ADDC A, @R0
201: 0121 D4 DA A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -