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