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

📄 951.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
字号:
.include "8535def.inc"
.org $000
 rjmp main
.org $009
 rjmp tim0_ovf
tab:.db  $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f  ;七段码表
main:    ldi r16,low(ramend)    ;栈指针置初值
         out spl,r16
         ldi r16,high(ramend)
         out sph,r16
         ldi r16,$ff            ;定义C口、D口为输出
         out ddrd,r16
         out ddrc,r16
         ldi r16,$01            ;允许T/C0中断
         out timsk,r16
         ldi r16,$04            ;定时器8分频
         out tccr0,r16
         ldi r16,6              ;定时器0置初值0
         out tcnt0,r16
         cbi ddrb,1             ;PB1定义为输入口
         ldi r24,$06            ;T1(PB1)引脚每一次上升沿计数一次
         out tccr1b,r24
         ldi r27,125
         rcall t2pwm1           ;PD7产生频率为15686的PWM方波
         sei
loop:    mov r16,r10            ;将TCNT1的增量值送r17:r16
         mov r17,r11
         rcall b16td5           ;二转十
         mov r22,r20            ;送r18~r22
         mov r21,r19
         mov r20,r18
         mov r19,r17
         mov r18,r16   
         rcall smiao            ;动态扫描显示
         rjmp loop
t1ms:    ldi r24,71             ;延时1毫秒子程
         push r24
del2:    push r24
del3:    dec r24
         brne del3
         pop r24
         dec r24
         brne del2
         pop r24
         ret 

t2pwm1:
       ldi r16,$71              ;PWM2使能,向上计数置引脚
       out tccr2,r16            ;向下计数清引脚,时钟1分频
       ldi r16,$80
       out ocr2,r16     
       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
smiao: ldi r16,$fe         ;送个位位线
       out portd, r16      
       mov r23,r18         ;将个位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ldi r16,$fd         ;送十位位线
       out portd, r16       
       mov r23,r19         ;将十位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ldi r16,$fb         ;送百位位线
       out portd,r16
       mov r23,r20         ;将百位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms  
       ldi r16,$f7         ;送千位位线
       out portd,r16
       mov r23,r21         ;将千位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ldi r16,$ef         ;送万位位线
       out portd,r16
       mov r23,r22         ;将万位的BCD码送R23
       rcall cqb           ;查七段码,送B口输出
       rcall t1ms          ;延时1ms
       ret 

cqb:   ldi zh,high(tab*2)  ;七段码的首地址给Z
       ldi zl,low(tab*2)
       add zl,r23          ;首地址+偏移量
       lpm                 ;查表送B口输出
       out portb,r0               
       ret
tim0_ovf:in r1,sreg        ;保护现场
         ldi r24,6         ;T/C0送初值
         out TCNT0,r24
         subi r27,1        ;中断计数减1
         brne qq           ;不为0,则返回
         in r10,tcnt1l     ;读TCNT1计数值到R11:R10
         in r11,tcnt1h            
         push r10          ;入栈保存
         push r11
         sub r10,r12       ;求两次T/C1计数差值
         sbc r11,r13
         pop r13           ;将本次T/C1计数值放入R13:R12中,
         pop r12           ;为下次计算计数器差值作准备
         ldi r27,125
qq:      out sreg,r1       ;恢复现场	
         reti

⌨️ 快捷键说明

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