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

📄 933.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
字号:
.include "8535def.inc"
.org $0000
 rjmp reset
.org $009
 rjmp tim0_ovf
 tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f;七段码表
reset:  ldi r16,low(ramend) ;栈指针置初值
        out spl,r16
        ldi r16,high(ramend)
        out sph,r16
        ldi r16,$ff         ;定义PB、PD为输出口
        out ddrb,r16
        out ddrd,r16
        ldi r17,$ff         ;设初值在r17:r16
        ldi r16,$ff
        rcall b16td5        ;调用二转十子程
        mov r23,r16         ;查七段码,送给$100~$104
        rcall cqm1
        sts $100,r0
        mov r23,r17
        rcall cqm1
        sts $101,r0
        mov r23,r18
        rcall cqm1
        sts $102,r0
        mov r23,r19
        rcall cqm1
        sts $103,r0
        mov r23,r20
        rcall cqm1
        sts $104,r0
        ldi r16,$01         ;允许T/C0溢出中断
        out timsk,r16
        ldi r16,$03         ;64分频,2ms一位
        out tccr0,r16
        ldi r16,$00         ;T/C0置初值0
        out tcnt0,r16
        out tifr,r16
        ldi r21,$fe         ;位线置初值
        sei
here:   rjmp here
tim0_ovf:
         in r1,sreg         ;保存sreg
         cpi r21,$fe        ;该显示个位?
         brne t21          ;否则转t21
         lds r20,$100       ;送个位七段码给字线
         out portb,r20
         out portd,r21      ;送个位位线
         ldi r21,$fd         ;修改位线(下次显示十位)
         rjmp t25
t21:     cpi r21,$fd         ;该显示十位?
         brne t22          ;否则转t22
         lds r20,$101       ;送十位七段码给字线
         out portb,r20
         out portd,r21      ;送十位位线
         ldi r21,$fb        ;修改位线(下次显示百位)
         rjmp t25
t22:     cpi r21,$fb         ;该显示百位?
         brne t23          ;否则转t23
         lds r20,$102       ;送百位七段码给字线
         out portb,r20
         out portd,r21      ;送百位位线
         ldi r21,$f7        ;修改位线(下次显示千位)
         rjmp t25
t23:     cpi r21,$f7         ;该显示千位?
         brne t24          ;否则转t24
         lds r20,$103      ;送千位七段码给字线
         out portb,r20
         out portd,r21      ;送千位位线
         ldi r21,$ef        ;修改位线(下次显示万位)
         rjmp t25
t24:      lds r20,$104       ;送万位七段码给字线
         out portb,r20
         out portd,r21      ;送万位位线
         ldi r21,$fe         ;修改位线(下次显示个位)
t25:     out sreg,r1        ;恢复sreg
         reti
cqm1:  ldi zh,high(tab*2)  ;七段码的首地址给Z
       ldi zl,low(tab*2)
       add zl,r23          ;首地址+偏移量
       lpm                 ;查表送B口输出
       ret

t1ms:  ldi r24,71         ;延时1毫秒子程
       push r24
del2:  push r24
del3:  dec r24
       brne del3
       pop r24
       dec r24
       brne del2
       pop r24
       ret 
b16td5:
	ser r20                    ;r20先送-1
b16td5_1:  
	inc r20                    ;r20增1
subi r16,low(10000)                ;(r17:r16)-10000
	sbci r17,high(10000)
	brcc 	b16td5_1           ;够减则返回b16td5_1
	subi r16,low(-10000)       ;不够减+10000,恢复余数
	sbci r17,high(-10000)
	ser r19                    ;r19先送-1
b16td5_2:
        inc r19                    ;r19增1   
        subi r16,low(1000)         ;(r17:r16)-10000
	sbci r17,high(1000)            
	brcc 	b16td5_2           ;够减则返回b16td5_2
	subi r16,low(-1000)        ;不够减+1000,恢复余数
	sbci r17,high(-1000)
	ser r18                    ;r18先送-1
b16td5_3:
	inc r18                    ;r18增1    
subi r16,low(100)                  ;(r17:r16)-100
	sbci r17,high(100)             
	brcc 	b16td5_3           ;够减则返回b16td5_3
	subi r16,low(-100)         ;不够减+100,恢复余数
	sbci r17,high(-100)
	ser r17                    ;r17先送-1
b16td5_4:
        inc r17                    ;r17增1
        subi r16,10                ;(r17:r16)-10          
	brcc 	b16td5_4           ;够减则返回b16td5_4               
	subi r16,-10               ;不够减+10,恢复余数
        ret

⌨️ 快捷键说明

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