📄 ad0803.sdi
字号:
,,,
,,, org 0000h
0000,02 00 30,, ljmp main
,,, org 0003h
0003,02 00 A2,, ljmp int00
,,,
,,, org 0030h
0030,75 90 FF,main,main: mov p1,#0ffh
0033,75 2A 00,, mov 2Ah,#00h ;2Ah设为标志位
0036,75 20 01,, mov 20h,#01h ;显示最高位缓冲
0039,75 21 02,, mov 21h,#02h
003C,75 22 03,, mov 22h,#03h
003F,75 23 04,, mov 23h,#04h
0042,75 24 05,, mov 24h,#05h
0045,75 25 06,, mov 25h,#06h
0048,75 26 07,, mov 26h,#07h
004B,75 27 08,, mov 27h,#08h ;显示最地位缓冲
004E,D2 B5,, setb p3.5
0050,D2 88,, setb it0 ;外部中断0为边沿触发方式
0052,D2 A8,, setb ex0 ;允许外部中断0
0054,75 3A FF,, mov 3ah,#0ffh
0057,12 01 33,, lcall dirv
,,,;-------------------------;
,,,; 读键 ;
,,,;-------------------------;
005A,,kl0,kl0:
005A,12 01 33,, lcall dirv
,,,
005D,7B 00,, mov r3,#00h
005F,AA 3A,, mov r2,3ah
0061,12 00 A8,, lcall lh ;量化(转换成um)
0064,78 32,, mov r0,#32h ;被解压BCD码高位存32h
0066,79 23,, mov r1,#23h ;解压后BCD码高位存20h
0068,7A 35,, mov r2,#35h ;被解压BCD码最低位:r2-1
006A,12 00 C4,, lcall bcdjy ;BCD码解压缩(5字节)
,,,
006D,C2 AF,, clr ea
006F,C0 24,, push 24h
0071,C0 1F,, push 1fh
0073,C0 28,, push 28h
,,,
0075,7B 00,, mov r3,#00h
0077,AA 3A,, mov r2,3ah
0079,12 00 A8,, lcall lh ;量化(转换成um)
007C,78 32,, mov r0,#32h ;被解压BCD码高位存32h
007E,79 1F,, mov r1,#1fh ;解压后BCD码高位存20h
0080,7A 35,, mov r2,#35h ;被解压BCD码最低位:r2-1
0082,12 00 C4,, lcall bcdjy ;BCD码解压缩(5字节)
,,,
0085,D0 28,, pop 28h
0087,D0 1F,, pop 1fh
0089,D0 24,, pop 24h
,,,
008B,E5 20,, mov a,20h ;最高为加小数点
008D,24 0A,, add a,#0ah
008F,F5 20,, mov 20h,a
0091,E5 24,, mov a,24h ;最高为加小数点
0093,24 0A,, add a,#0ah
0095,F5 24,, mov 24h,a
0097,12 01 33,, lcall dirv
,,,
009A,C2 B5,, clr p3.5 ;选通0803
009C,F0,, movx @dptr,a ;启动AD转换
009D,D2 AF,, setb ea ;允许中断
009F,02 00 5A,, ljmp kl0 ;无键按下继续
,,,;---------------------;
,,,; 外部中断0 ;
,,,;---------------------;
00A2,,int00,int00:
00A2,E0,, movx a,@dptr
00A3,F5 3A,, mov 3ah,a
00A5,D2 B5,, setb p3.5
00A7,32,, reti
,,,;---------------------;
,,,; 量化(转换成um) ;
,,,;---------------------;
00A8,12 00 D5,lh,lh: lcall B16BCD ;二进制到BCD码(双字节)
00AB,8E 30,, mov 30h,r6 ;被乘数十万、万位
00AD,8D 31,, mov 31h,r5 ;被乘数干位、百位
00AF,8C 32,, mov 32h,r4 ;被乘数十位、个位
00B1,75 40 03,, mov 40h,#03h ;乘数百位、十位
00B4,75 41 92,, mov 41h,#92h ;乘数个位、小数点后第一位(2.443um)
00B7,75 42 57,, mov 42h,#57h ;乘数小数点后第二位、小数点后第三位
00BA,78 30,, mov r0,#30h ;被乘数入口指针
00BC,79 40,, mov r1,#40h ;乘数入口指针
00BE,7B 03,, mov r3,#03h ;参加乘法运算的压缩的BCD码位数
00C0,12 00 F1,, lcall CMUL ;无符号压缩BCD码乘法(CMUL)(积的小数位舍去送显示)
00C3,22,, ret
,,,;---------------------------------------;
,,,; @r0中BCD码解压缩到@r1(r2-r1字节);
,,,;---------------------------------------;
,,,
00C4,E6,bcdjy,bcdjy: mov a,@r0 ;分解一字节高位
00C5,54 F0,, anl a,#0f0h
00C7,C4,, swap a
00C8,F7,, mov @r1,a
00C9,09,, inc r1
00CA,E6,, mov a,@r0 ;分解一字节低位
00CB,54 0F,, anl a,#0fh
00CD,F7,, mov @r1,a
00CE,09,, inc r1
00CF,08,, inc r0
00D0,E8,, mov a,r0
00D1,6A,, xrl a,r2
00D2,70 F0,, jnz bcdjy
00D4,22,, ret
,,,;-------------------------------;
,,,; 二进制到BCD码(双字节) ;
,,,;-------------------------------;
,,,; (1)入口,R3R2,(16位无符号二进制整数).
,,,; (2)出口:R6(万位)、R5(干位、百位)、R4(十位、个位)存放5位BCD码。
,,,;2.程序清单
,,,
00D5,,B16BCD,B16BCD:
00D5,E4,, CLR A ;BCD码寄存器清零
00D6,FC,, MOV R4,A
00D7,FD,, MOV R5,A
00D8,FE,, MOV R6,A
00D9,7F 10,, MOV R7,#10H ;设循环指针
00DB,C3,LP0,LP0: CLR C ;左移一位,移入c
00DC,EA,, MOV A,R2
00DD,33,, RLC A
00DE,FA,, MOV R2,A
00DF,EB,, MOV A,R3
00E0,33,, RLC A
00E1,FB,, MOV R3,A
00E2,EC,, MOV A,R4 ;实现(…)X2十ai运算
,,,
00E3,3C,, ADDC A,R4
00E4,D4,, DA A
00E5,FC,, MOV R4,A
00E6,ED,, MOV A,R5
00E7,3D,, ADDC A,R5
00E8,D4,, DA A
00E9,FD,, MOV R5,A
00EA,EE,, MOV A,R6
00EB,3E,, ADDC A,R6
00EC,D4,, DA A
00ED,FE,, MOV R6,A
00EE,DF EB,, DJNZ R7,LP0
00F0,22,, RET
,,,;-------------------------------------;
,,,; 无符号压缩BCD码乘法子程序(CMUL) ;
,,,;-------------------------------------;
,,,
,,, ;功能:将(R0)指向的n字节压缩的BCD码乘以(R1)指向的n
,,, ;字节压缩的BCD码。
,,, ;入口:十进制被乘数存放在addrl—addr+n—1单元,高位在前。
,,, ;十进制乘数存放在addr2—acldr2+n—1单元,高位在前。
,,, ;(R0):addrl,(R1)=addr2,(R3)=n
,,, ;出口:积存放在addr-addrl+2n—1单元中,(R0)=addrl。
,,, ;使用寄存器:A,R0,R1,n2,R3,R6,R7及标志cy0
,,, ;例如:(R0)=20;(20)=01;(21)=25;(R1)=40;(40)=00;
,,, ;(41)=25;(R3)=02
,,, ;执行后得:(R0)=20;(20)=00;(21)=00;(22)=31; (23)=25
,,, ;程序清单:
00F1,EB,CMUL,CMUL: MOV A, R3
00F2,FE,, MOV R6, A
00F3,2B,, ADD A, R3
00F4,FA,, MOV R2, A
00F5,EB,, MOV A, R3
00F6,28,, ADD A, R0
00F7,F8,, MOV R0, A
00F8,E9,, MOV A, R1
00F9,2B,, ADD A, R3
00FA,14,, DEC A
00FB,F9,, MOV R1, A
00FC,E4,, CLR A
00FD,F6,CMUL1,CMUL1: MOV @ R0, A
00FE,08,, INC R0
00FF,DE FC,, DJNZ R6, CMUL1
0101,EA,, MOV A, R2
0102,FE,, MOV R6, A
0103,18,, DEC R0
0104,E4,CMUL2,CMUL2: CLR A
0105,C6,CMUL3,CMUL3: XCH A, @R0
0106,C4,, SWAP A
0107,D6,, XCHD A, @R0
0108,C6,, XCH A, @R0
0109,18,, DEC R0
010A,DA F9,, DJNZ R2,CMUL3
010C,FF,, MOV R7, A
010D,60 1C,, JZ CMUL7
010F,EB,CMUIA,CMUIA: MOV A, R3
0110,FA,, MOV R2, A
0111,2B,, ADD A, R3
0112,28,, ADD A, R0
0113,F8,, MOV R0, A
0114,C3,, CLR C
0115,E6,CMUL5,CMUL5: MOV A, @R0
0116,37,, ADDC A, @R1
0117,D4,, DA A
0118,F6,, MOV @R0,A
0119,18,, DEC R0
011A,19,, DEC R1
011B,DA F8,, DJNZ R2, CMUL5
011D,EB,, MOV A, R3
011E,FA,, MOV R2, A
011F,E4,CMUL6,CMUL6: CLR A
0120,36,, ADDC A, @R0
0121,D4,, DA A
0122,F6,, MOV @R0,A
0123,18,, DEC R0
0124,DA F9,, DJNZ R2, CMUL6
0126,EB,, MOV A, R3
0127,29,, ADD A, R1
0128,F9,, MOV R1, A
0129,DF E4,, DJNZ R7, CMUIA
012B,EB,CMUL7,CMUL7: MOV A, R3
012C,2B,, ADD A, R3
012D,FA,, MOV R2, A
012E,28,, ADD A, R0
012F,F8,, MOV R0, A
0130,DE D2,, DJNZ R6, CMUL2
0132,22,, RET
,,,;-------------------------;
,,,; 显示 ;
,,,;-------------------------;
,,,;********************************************************
0133,78 FE,dirv,dirv: mov r0,#0feh
0135,79 27,, mov r1,#27h
0137,E8,, mov a,r0
0138,20 E0 05,di1,di1: jb acc.0,di10 ;位选
013B,C2 90,, clr p1.0
013D,02 01 86,, ljmp di17
0140,D2 90,di10,di10: setb p1.0
0142,20 E1 05,, jb acc.1,di11
0145,C2 91,, clr p1.1
0147,02 01 88,, ljmp di18
014A,D2 91,di11,di11: setb p1.1
014C,20 E2 05,, jb acc.2,di12
014F,C2 92,, clr p1.2
0151,02 01 88,, ljmp di18
0154,D2 92,di12,di12: setb p1.2
0156,20 E3 05,, jb acc.3,di13
0159,C2 93,, clr p1.3
015B,02 01 88,, ljmp di18
015E,D2 93,di13,di13: setb p1.3
0160,20 E4 05,, jb acc.4,di14
0163,C2 94,, clr p1.4
0165,02 01 88,, ljmp di18
0168,D2 94,di14,di14: setb p1.4
016A,20 E5 05,, jb acc.5,di15
016D,C2 95,, clr p1.5
016F,02 01 88,, ljmp di18
0172,D2 95,di15,di15: setb p1.5
0174,20 E6 05,, jb acc.6,di16
0177,C2 96,, clr p1.6
0179,02 01 88,, ljmp di18
017C,D2 96,di16,di16: setb p1.6
017E,20 E7 05,, jb acc.7,di17
0181,C2 97,, clr p1.7
0183,02 01 88,, ljmp di18
0186,D2 97,di17,di17: setb p1.7
0188,90 01 A2,di18,di18: mov dptr,#tabdis ;查段选表
018B,E7,, mov a,@r1
018C,93,, movc a,@a+dptr
018D,F5 A0,, mov p2,a ;段选
,,,; mov r7,#01h
,,,;di2: mov r6,#01h
,,,;di3: djnz r6,di3
,,,; djnz r7,di2
018F,7F 03,, mov r7,#03h
0191,7E FF,di2,di2: mov r6,#0ffh
0193,DE FE,di3,di3: djnz r6,di3
0195,DF FA,, djnz r7,di2
0197,19,, dec r1 ;
0198,E8,, mov a,r0
0199,30 E7 05,, jnb acc.7, di4
019C,23,, rl a ;下一位(左移)
019D,F8,, mov r0,a
019E,02 01 38,, ljmp di1
01A1,22,di4,di4: ret
,,,
,,,;********************************************************
,,,
01A2,,tabdis,tabdis:
01A2,3F 06 5B 4F,,DB 03fh,06H,05bH,04fH,066H,06dH,07dH,07H
,,,; "0" "1" "2" "3" "4" "5" "6" "7"
01AA,7F 6F BF 86,,DB 07fH,06fH,0Bfh,86H,0dbH,0cfH,0e6H,0edH
,,,; "8" "9" "0." "1." "2." "3." "4." "5."
01B2,7D 07 FF EF,,DB 07dH,07H,0ffH,0efH,077H,07cH,039H,05eH
,,,; "6." "7.""8." "9." "A" "b" "C" "d"
01BA,79 71 3D 76,,DB 079H,071H,03dH,076H,00fH,00eH,0f0H,038H
,,,; "E" "F" "G" "H" "I" "J" "k" "L"
01C2,D4 54 5C 73,,DB 0d4H,054H,05cH,073H,0dcH,050H,0d8H,078H
,,,; "m" "n" "o" "P" "Q" "r "s" "t"
01CA,3E 18 98 F2,,DB 03eH,018H,098H,0f2H,06eh,0ccH,000h
,,,; "U" "v" "w" "x" "y" "z" " "
,,,
000E,,,end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -