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

📄 ad0808.asm

📁 电子时钟的单片机设计
💻 ASM
字号:
zb      equ     50h
	org     0000h
        ljmp    main
	org     0003h
	ljmp    int00
	org     000bh
	ljmp    tr00
	
        org     0030h
main:	mov	p1,#0ffh
	mov     2Ah,#00h	;2Ah设为标志位
	mov     20h,#01h	;显示最高位缓冲
        mov     21h,#02h
	mov     22h,#03h
        mov     23h,#04h
        mov     24h,#05h
        mov     25h,#06h
	mov     26h,#07h
        mov     27h,#08h	;显示最地位缓冲
       	setb    p3.5
	setb    it0		;外部中断0为边沿触发方式
        setb    ex0		;允许外部中断0
        mov     tmod,#00h	;定时方式0
	mov     tl0,#09h	;T0置初值
	mov 	th0,#0f8h	
	setb	tr0		;启动T0
	setb	et0	        ;允许T0中断
	setb  ea                ;允许中断
	mov     3ah,#0ffh
        lcall   dirv
;-------------------------;
;         读键            ;
;-------------------------;
kl0:
        lcall dirv

        mov   r3,#00h
        mov   r2,3ah
	lcall lh		;量化(转换成um)
        mov   r0,#32h		;被解压BCD码高位存32h
        mov   r1,#23h		;解压后BCD码高位存20h
        mov   r2,#35h		;被解压BCD码最低位:r2-1
        lcall bcdjy		;BCD码解压缩(5字节)
	
;	jb    zb,kl0
 
	push  24h
        push  1fh
	push  28h

	mov   r3,#00h
        mov   r2,3ah
	lcall lh		;量化(转换成um)
        mov   r0,#32h		;被解压BCD码高位存32h
        mov   r1,#1fh		;解压后BCD码高位存20h
        mov   r2,#35h		;被解压BCD码最低位:r2-1
        lcall bcdjy		;BCD码解压缩(5字节)

	pop   28h
	pop   1fh
	pop   24h

	mov   a,20h		;最高位为加小数点
        add   a,#0ah
        mov   20h,a 
        mov   a,24h		;最高位加小数点
        add   a,#0ah
        mov   24h,a 
	lcall dirv

        clr   p3.5		;选通0808
 	movx  @dptr,a           ;启动AD转换
	setb  ea                ;允许中断
	setb    ex0		;允许外部中断0
	setb  zb
        ljmp  kl0               ;无键按下继续
;---------------------;
;     外部中断0	      ;
;---------------------;
int00:
       movx   a,@dptr
       mov    3ah,a
  ;     setb   p3.5
       clr    zb
       reti
;---------------------;
;     定时中断0	      ;
;---------------------;
tr00:
       mov    tl0,#0ffh	;T0置初值
       mov    th0,#0f9h    
       cpl    p3.4	;产生0808时钟
       reti	
;---------------------;
;     量化(转换成um) ;
;---------------------;
lh:	lcall B16BCD		;二进制到BCD码(双字节)
        mov   30h,r6		;被乘数十万、万位
	mov   31h,r5		;被乘数干位、百位
	mov   32h,r4		;被乘数十位、个位
	mov   40h,#01h		;乘数百位、十位
	mov   41h,#95h		;乘数个位、小数点后第一位(2.443um)
        mov   42h,#31h		;乘数小数点后第二位、小数点后第三位
	mov   r0,#30h		;被乘数入口指针
	mov   r1,#40h		;乘数入口指针
        mov   r3,#03h		;参加乘法运算的压缩的BCD码位数
        lcall CMUL		;无符号压缩BCD码乘法(CMUL)(积的小数位舍去送显示)
	ret
;---------------------------------------;
;     @r0中BCD码解压缩到@r1(r2-r1字节);
;---------------------------------------;

bcdjy:  mov   a,@r0		;分解一字节高位
	anl   a,#0f0h
        swap  a
	mov   @r1,a  
        inc   r1
	mov   a,@r0		;分解一字节低位
	anl   a,#0fh
        mov   @r1,a  
        inc   r1
        inc   r0
        mov   a,r0
        xrl   a,r2               
        jnz   bcdjy             
	ret
;-------------------------------;
;     二进制到BCD码(双字节)   ;
;-------------------------------;
;    (1)入口,R3R2,(16位无符号二进制整数).
;    (2)出口:R6(万位)、R5(干位、百位)、R4(十位、个位)存放5位BCD码。
;2.程序清单

B16BCD:   
        CLR  A      	;BCD码寄存器清零
        MOV  R4,A
        MOV  R5,A
        MOV  R6,A
        MOV  R7,#10H	;设循环指针
LP0:    CLR  C		;左移一位,移入c
        MOV  A,R2
        RLC  A
        MOV  R2,A
        MOV  A,R3
        RLC  A
        MOV  R3,A
        MOV  A,R4	;实现(…)X2十ai运算

        ADDC A,R4
        DA   A
        MOV  R4,A
        MOV  A,R5
        ADDC A,R5
        DA   A
        MOV  R5,A
        MOV  A,R6
        ADDC A,R6
        DA   A
        MOV  R6,A
        DJNZ R7,LP0
        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
	;程序清单:
CMUL:   MOV    A, R3
        MOV    R6, A
        ADD    A, R3
        MOV    R2, A
        MOV    A, R3
        ADD    A, R0
        MOV    R0, A
        MOV    A, R1
        ADD    A, R3
        DEC    A
        MOV    R1, A
        CLR    A
CMUL1:  MOV    @R0, A
        INC    R0
        DJNZ   R6, CMUL1
        MOV    A, R2
        MOV    R6, A
        DEC    R0
CMUL2:  CLR    A
CMUL3:  XCH    A, @R0
        SWAP   A
        XCHD   A, @R0
        XCH    A, @R0
        DEC    R0
        DJNZ   R2,CMUL3
        MOV    R7, A
        JZ     CMUL7
CMUIA:  MOV    A, R3
        MOV    R2, A
        ADD    A, R3
        ADD    A, R0
        MOV    R0, A
        CLR    C
CMUL5:  MOV    A, @R0
        ADDC   A, @R1
 	DA     A
        MOV    @R0,A
        DEC    R0
        DEC    R1
        DJNZ   R2, CMUL5
        MOV    A, R3
        MOV    R2, A
CMUL6:  CLR    A
        ADDC   A, @R0
        DA     A
        MOV    @R0,A
        DEC    R0
        DJNZ   R2, CMUL6
        MOV    A, R3
        ADD    A, R1
        MOV    R1, A
        DJNZ   R7, CMUIA
CMUL7:  MOV    A, R3
        ADD    A, R3
        MOV    R2, A
        ADD    A, R0
        MOV    R0, A
        DJNZ   R6, CMUL2
        RET
;-------------------------;
;       显示		  ;
;-------------------------;
;********************************************************
dirv:   mov   r0,#0feh
        mov   r1,#27h
        mov   a,r0
di1:    jb   acc.0,di10		;位选
	clr   p1.0
	ljmp  di17
di10:   setb  p1.0
	jb   acc.1,di11
	clr   p1.1
       	ljmp  di18
di11:   setb  p1.1
	jb   acc.2,di12
	clr   p1.2
	ljmp  di18
di12:   setb  p1.2
	jb   acc.3,di13
	clr   p1.3
	ljmp  di18
di13:   setb  p1.3
	jb   acc.4,di14
	clr   p1.4
	ljmp  di18
di14:   setb  p1.4
	jb   acc.5,di15
	clr   p1.5
	ljmp  di18
di15:   setb  p1.5
	jb   acc.6,di16
	clr   p1.6
	ljmp  di18
di16:   setb  p1.6
	jb   acc.7,di17
	clr   p1.7
	ljmp  di18
di17:   setb  p1.7
di18:	mov   dptr,#tabdis         ;查段选表
        mov   a,@r1
        movc  a,@a+dptr
        mov   p2,a                 ;段选
;       mov   r7,#01h
;di2:    mov   r6,#01h
;di3:    djnz  r6,di3
;        djnz  r7,di2
        mov   r7,#03h
di2:    mov   r6,#0ffh
di3:    djnz  r6,di3
        djnz  r7,di2
        dec   r1                   ;
        mov   a,r0
        jnb   acc.7, di4
        rl    a                    ;下一位(左移)
        mov   r0,a
        ljmp  di1
di4:    ret

;********************************************************

tabdis:
DB 03fh,06H,05bH,04fH,066H,06dH,07dH,07H
;  "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"
DB 07fH,06fH,0Bfh,86H,0dbH,0cfH,0e6H,0edH
;  "8"  "9"  "0." "1." "2." "3." "4." "5."  
DB 07dH,07H,0ffH,0efH,077H,07cH,039H,05eH
;  "6." "7.""8."  "9." "A"  "b"  "C"  "d" 
DB 079H,071H,03dH,076H,00fH,00eH,0f0H,038H
;  "E"  "F"  "G"  "H"  "I"  "J"  "k"  "L" 
DB 0d4H,054H,05cH,073H,0dcH,050H,0d8H,078H
;   "m"  "n" "o"  "P"  "Q"  "r   "s"  "t"  
DB 03eH,018H,098H,0f2H,06eh,0ccH,000h
;  "U"  "v"  "w"  "x"  "y"  "z"  "  "

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -