📄 ad0808.sdi
字号:
,,,zb equ 50h
,,, org 0000h
0000,02 00 30,, ljmp main
,,, org 0003h
0003,02 00 B3,, ljmp int00
,,, org 000bh
000B,02 00 B9,, ljmp tr00
,,,
,,, 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 89 00,, mov tmod,#00h ;定时方式0
0057,75 8A 09,, mov tl0,#09h ;T0置初值
005A,75 8C F8,, mov th0,#0f8h
005D,D2 8C,, setb tr0 ;启动T0
005F,D2 A9,, setb et0 ;允许T0中断
0061,D2 AF,, setb ea ;允许中断
0063,75 3A FF,, mov 3ah,#0ffh
0066,12 01 4D,, lcall dirv
,,,;-------------------------;
,,,; 读键 ;
,,,;-------------------------;
0069,,kl0,kl0:
0069,12 01 4D,, lcall dirv
,,,
006C,7B 00,, mov r3,#00h
006E,AA 3A,, mov r2,3ah
0070,12 00 C2,, lcall lh ;量化(转换成um)
0073,78 32,, mov r0,#32h ;被解压BCD码高位存32h
0075,79 23,, mov r1,#23h ;解压后BCD码高位存20h
0077,7A 35,, mov r2,#35h ;被解压BCD码最低位:r2-1
0079,12 00 DE,, lcall bcdjy ;BCD码解压缩(5字节)
,,,
,,,; jb zb,kl0
,,,
007C,C0 24,, push 24h
007E,C0 1F,, push 1fh
0080,C0 28,, push 28h
,,,
0082,7B 00,, mov r3,#00h
0084,AA 3A,, mov r2,3ah
0086,12 00 C2,, lcall lh ;量化(转换成um)
0089,78 32,, mov r0,#32h ;被解压BCD码高位存32h
008B,79 1F,, mov r1,#1fh ;解压后BCD码高位存20h
008D,7A 35,, mov r2,#35h ;被解压BCD码最低位:r2-1
008F,12 00 DE,, lcall bcdjy ;BCD码解压缩(5字节)
,,,
0092,D0 28,, pop 28h
0094,D0 1F,, pop 1fh
0096,D0 24,, pop 24h
,,,
0098,E5 20,, mov a,20h ;最高位为加小数点
009A,24 0A,, add a,#0ah
009C,F5 20,, mov 20h,a
009E,E5 24,, mov a,24h ;最高位加小数点
00A0,24 0A,, add a,#0ah
00A2,F5 24,, mov 24h,a
00A4,12 01 4D,, lcall dirv
,,,
00A7,C2 B5,, clr p3.5 ;选通0808
00A9,F0,, movx @dptr,a ;启动AD转换
00AA,D2 AF,, setb ea ;允许中断
00AC,D2 A8,, setb ex0 ;允许外部中断0
00AE,D2 50,, setb zb
00B0,02 00 69,, ljmp kl0 ;无键按下继续
,,,;---------------------;
,,,; 外部中断0 ;
,,,;---------------------;
00B3,,int00,int00:
00B3,E0,, movx a,@dptr
00B4,F5 3A,, mov 3ah,a
,,, ; setb p3.5
00B6,C2 50,, clr zb
00B8,32,, reti
,,,;---------------------;
,,,; 定时中断0 ;
,,,;---------------------;
00B9,,tr00,tr00:
00B9,75 8A FF,, mov tl0,#0ffh ;T0置初值
00BC,75 8C F9,, mov th0,#0f9h
00BF,B2 B4,, cpl p3.4 ;产生0808时钟
00C1,32,, reti
,,,;---------------------;
,,,; 量化(转换成um) ;
,,,;---------------------;
00C2,12 00 EF,lh,lh: lcall B16BCD ;二进制到BCD码(双字节)
00C5,8E 30,, mov 30h,r6 ;被乘数十万、万位
00C7,8D 31,, mov 31h,r5 ;被乘数干位、百位
00C9,8C 32,, mov 32h,r4 ;被乘数十位、个位
00CB,75 40 01,, mov 40h,#01h ;乘数百位、十位
00CE,75 41 95,, mov 41h,#95h ;乘数个位、小数点后第一位(2.443um)
00D1,75 42 31,, mov 42h,#31h ;乘数小数点后第二位、小数点后第三位
00D4,78 30,, mov r0,#30h ;被乘数入口指针
00D6,79 40,, mov r1,#40h ;乘数入口指针
00D8,7B 03,, mov r3,#03h ;参加乘法运算的压缩的BCD码位数
00DA,12 01 0B,, lcall CMUL ;无符号压缩BCD码乘法(CMUL)(积的小数位舍去送显示)
00DD,22,, ret
,,,;---------------------------------------;
,,,; @r0中BCD码解压缩到@r1(r2-r1字节);
,,,;---------------------------------------;
,,,
00DE,E6,bcdjy,bcdjy: mov a,@r0 ;分解一字节高位
00DF,54 F0,, anl a,#0f0h
00E1,C4,, swap a
00E2,F7,, mov @r1,a
00E3,09,, inc r1
00E4,E6,, mov a,@r0 ;分解一字节低位
00E5,54 0F,, anl a,#0fh
00E7,F7,, mov @r1,a
00E8,09,, inc r1
00E9,08,, inc r0
00EA,E8,, mov a,r0
00EB,6A,, xrl a,r2
00EC,70 F0,, jnz bcdjy
00EE,22,, ret
,,,;-------------------------------;
,,,; 二进制到BCD码(双字节) ;
,,,;-------------------------------;
,,,; (1)入口,R3R2,(16位无符号二进制整数).
,,,; (2)出口:R6(万位)、R5(干位、百位)、R4(十位、个位)存放5位BCD码。
,,,;2.程序清单
,,,
00EF,,B16BCD,B16BCD:
00EF,E4,, CLR A ;BCD码寄存器清零
00F0,FC,, MOV R4,A
00F1,FD,, MOV R5,A
00F2,FE,, MOV R6,A
00F3,7F 10,, MOV R7,#10H ;设循环指针
00F5,C3,LP0,LP0: CLR C ;左移一位,移入c
00F6,EA,, MOV A,R2
00F7,33,, RLC A
00F8,FA,, MOV R2,A
00F9,EB,, MOV A,R3
00FA,33,, RLC A
00FB,FB,, MOV R3,A
00FC,EC,, MOV A,R4 ;实现(…)X2十ai运算
,,,
00FD,3C,, ADDC A,R4
00FE,D4,, DA A
00FF,FC,, MOV R4,A
0100,ED,, MOV A,R5
0101,3D,, ADDC A,R5
0102,D4,, DA A
0103,FD,, MOV R5,A
0104,EE,, MOV A,R6
0105,3E,, ADDC A,R6
0106,D4,, DA A
0107,FE,, MOV R6,A
0108,DF EB,, DJNZ R7,LP0
010A,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
,,, ;程序清单:
010B,EB,CMUL,CMUL: MOV A, R3
010C,FE,, MOV R6, A
010D,2B,, ADD A, R3
010E,FA,, MOV R2, A
010F,EB,, MOV A, R3
0110,28,, ADD A, R0
0111,F8,, MOV R0, A
0112,E9,, MOV A, R1
0113,2B,, ADD A, R3
0114,14,, DEC A
0115,F9,, MOV R1, A
0116,E4,, CLR A
0117,F6,CMUL1,CMUL1: MOV @R0, A
0118,08,, INC R0
0119,DE FC,, DJNZ R6, CMUL1
011B,EA,, MOV A, R2
011C,FE,, MOV R6, A
011D,18,, DEC R0
011E,E4,CMUL2,CMUL2: CLR A
011F,C6,CMUL3,CMUL3: XCH A, @R0
0120,C4,, SWAP A
0121,D6,, XCHD A, @R0
0122,C6,, XCH A, @R0
0123,18,, DEC R0
0124,DA F9,, DJNZ R2,CMUL3
0126,FF,, MOV R7, A
0127,60 1C,, JZ CMUL7
0129,EB,CMUIA,CMUIA: MOV A, R3
012A,FA,, MOV R2, A
012B,2B,, ADD A, R3
012C,28,, ADD A, R0
012D,F8,, MOV R0, A
012E,C3,, CLR C
012F,E6,CMUL5,CMUL5: MOV A, @R0
0130,37,, ADDC A, @R1
0131,D4,, DA A
0132,F6,, MOV @R0,A
0133,18,, DEC R0
0134,19,, DEC R1
0135,DA F8,, DJNZ R2, CMUL5
0137,EB,, MOV A, R3
0138,FA,, MOV R2, A
0139,E4,CMUL6,CMUL6: CLR A
013A,36,, ADDC A, @R0
013B,D4,, DA A
013C,F6,, MOV @R0,A
013D,18,, DEC R0
013E,DA F9,, DJNZ R2, CMUL6
0140,EB,, MOV A, R3
0141,29,, ADD A, R1
0142,F9,, MOV R1, A
0143,DF E4,, DJNZ R7, CMUIA
0145,EB,CMUL7,CMUL7: MOV A, R3
0146,2B,, ADD A, R3
0147,FA,, MOV R2, A
0148,28,, ADD A, R0
0149,F8,, MOV R0, A
014A,DE D2,, DJNZ R6, CMUL2
014C,22,, RET
,,,;-------------------------;
,,,; 显示 ;
,,,;-------------------------;
,,,;********************************************************
014D,78 FE,dirv,dirv: mov r0,#0feh
014F,79 27,, mov r1,#27h
0151,E8,, mov a,r0
0152,20 E0 05,di1,di1: jb acc.0,di10 ;位选
0155,C2 90,, clr p1.0
0157,02 01 A0,, ljmp di17
015A,D2 90,di10,di10: setb p1.0
015C,20 E1 05,, jb acc.1,di11
015F,C2 91,, clr p1.1
0161,02 01 A2,, ljmp di18
0164,D2 91,di11,di11: setb p1.1
0166,20 E2 05,, jb acc.2,di12
0169,C2 92,, clr p1.2
016B,02 01 A2,, ljmp di18
016E,D2 92,di12,di12: setb p1.2
0170,20 E3 05,, jb acc.3,di13
0173,C2 93,, clr p1.3
0175,02 01 A2,, ljmp di18
0178,D2 93,di13,di13: setb p1.3
017A,20 E4 05,, jb acc.4,di14
017D,C2 94,, clr p1.4
017F,02 01 A2,, ljmp di18
0182,D2 94,di14,di14: setb p1.4
0184,20 E5 05,, jb acc.5,di15
0187,C2 95,, clr p1.5
0189,02 01 A2,, ljmp di18
018C,D2 95,di15,di15: setb p1.5
018E,20 E6 05,, jb acc.6,di16
0191,C2 96,, clr p1.6
0193,02 01 A2,, ljmp di18
0196,D2 96,di16,di16: setb p1.6
0198,20 E7 05,, jb acc.7,di17
019B,C2 97,, clr p1.7
019D,02 01 A2,, ljmp di18
01A0,D2 97,di17,di17: setb p1.7
01A2,90 01 BC,di18,di18: mov dptr,#tabdis ;查段选表
01A5,E7,, mov a,@r1
01A6,93,, movc a,@a+dptr
01A7,F5 A0,, mov p2,a ;段选
,,,; mov r7,#01h
,,,;di2: mov r6,#01h
,,,;di3: djnz r6,di3
,,,; djnz r7,di2
01A9,7F 03,, mov r7,#03h
01AB,7E FF,di2,di2: mov r6,#0ffh
01AD,DE FE,di3,di3: djnz r6,di3
01AF,DF FA,, djnz r7,di2
01B1,19,, dec r1 ;
01B2,E8,, mov a,r0
01B3,30 E7 05,, jnb acc.7, di4
01B6,23,, rl a ;下一位(左移)
01B7,F8,, mov r0,a
01B8,02 01 52,, ljmp di1
01BB,22,di4,di4: ret
,,,
,,,;********************************************************
,,,
01BC,,tabdis,tabdis:
01BC,3F 06 5B 4F,,DB 03fh,06H,05bH,04fH,066H,06dH,07dH,07H
,,,; "0" "1" "2" "3" "4" "5" "6" "7"
01C4,7F 6F BF 86,,DB 07fH,06fH,0Bfh,86H,0dbH,0cfH,0e6H,0edH
,,,; "8" "9" "0." "1." "2." "3." "4." "5."
01CC,7D 07 FF EF,,DB 07dH,07H,0ffH,0efH,077H,07cH,039H,05eH
,,,; "6." "7.""8." "9." "A" "b" "C" "d"
01D4,79 71 3D 76,,DB 079H,071H,03dH,076H,00fH,00eH,0f0H,038H
,,,; "E" "F" "G" "H" "I" "J" "k" "L"
01DC,D4 54 5C 73,,DB 0d4H,054H,05cH,073H,0dcH,050H,0d8H,078H
,,,; "m" "n" "o" "P" "Q" "r "s" "t"
01E4,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 + -