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

📄 102.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
字号:
.include "8535def.inc"
 .org $0000
 rjmp reset
 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 r16,$00         ;定义PA口为输入口,不带内部上拉电阻
        out ddra,r16
        ldi r16,$00
        out porta,r16
        ldi r16,$07         ;先第7路ADC
 	out admux,r16
        ldi r18,$e6         ;允许ADC,启动ADC,自由模式
        out adcsr,r18       ;64分频做A/D时钟
        rcall t1ms          ;延时1毫秒
aa:     in r16,adcl         ;读A/D结果放入R17:R16中
	in r17,adch         
        ldi r18,$06         ;改变ADMUX为第6路
        out admux,r18
        rcall b16td5        ;调用二转十子程见5.3.1
        ldi r22,7           ;万位显示路号7
        mov r21,r19         ;四位ADC结果送显示缓冲区
        mov r20,r18
        mov r19,r17
        mov r18,r16
        ldi r17,200         ;每一路A/D扫描200次,恰好1s
bb:     rcall smiao         ;调动态扫描子程序见7.2.2
        dec r17
        brne bb
        in r16,adcl         ;读A/D结果放入R17:R16中
        in r17,adch         
        ldi r18,$07         ;改变ADMUX为第7路
        out admux,r18
        rcall b16td5        ;调用二转十子程
    	ldi r22,6           ;万位显示路号6
        mov r21,r19         ;四位ADC结果送显示缓冲区
        mov r20,r18
        mov r19,r17
        mov r18,r16
        ldi r17,200         ;每一路A/D扫描200次,恰好1s
cc:     rcall smiao         ;调动态扫描子程序见7.2.2
        dec r17
        brne cc
        rjmp aa
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

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 + -