⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad0803.sdi

📁 电子时钟的单片机设计
💻 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 + -