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

📄 11232.asm

📁 单片机开发资料光盘-双龙-686M.zip
💻 ASM
字号:
.include "8535def.inc"
.org $0000
rjmp reset
.org $00b
rjmp UART_RXC
.org $00d
rjmp UART_TXC
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口为输出口
       out ddrb,r16
       ldi r16,$7f          ;定义PD7为带上拉的输入,PD0~PD6为输出
       out ddrd,r16
       sbi portd,7
       ldi r16,$d8          ;允许串发、串收及相应中断
       out ucr,r16
       ldi r16,51           ;波特率为9600
       out ubrr,r16
       sei                  ;开中断
       ldi r18,0            ;四位显示送初值BCD码
       ldi r19,1
       ldi r20,2
       ldi r21,3 
       ldi Xl,$10           ;X发送缓冲区指针置初值
       ldi Xh,$01          
       ldi Yl,$12           ;Y接收缓冲区(显示)指针置初值
       ldi Yh,$00
       ldi r16,5            ;发送缓冲区(四个BCD码)送初值  
       sts $110,r16
       ldi r16,6
       sts $111,r16
       ldi r16,7
       sts $112,r16
       ldi r16,8
       sts $113,r16  
aa:    rcall smiao4
       in r16,pind          ;读PD7,有键按下就转异步发送
       sbrs r16,7
       rjmp bb
       rjmp aa              ;否则继续动态扫描
bb:    ldi r17,$03          ;要发送四个字节
       ld r16,X+  	    ;主程序先发送第一个字节
       out udr,r16
cc:    rcall smiao4	    ;动态扫描显示	
       rjmp cc      
UART_RXC:                   ;串收中断子程
       in r1,sreg           ;保护标志寄存器
       in r22,udr  	    ;读串收数据寄存器
       st Y+,r22            ;送接收缓冲区
       out sreg,r1          ;恢复标志寄存器
       reti             
UART_TXC:                   ;串收中断子程      
       in r1,sreg           ;保护标志寄存器
       ld r24,X+            ;串发一个字节
       out udr,r24
       dec r17              
       brne ee              ;没发完,中断返回,下次中断再发
       cbi ucr,txcie        ;发完规定的字节数,清发送中断使能位      
ee:    out sreg,r1          ;恢复标志寄存器         
       reti
smiao4:ldi r16,$fb          ;选中PD2,先显示个位
       out portd, r16      
       mov r23,r18          ;将待显示的数放在R23中   
       rcall cqb            ;查七段码送字线
       rcall t1ms           ;延时1ms
       ldi r16,$f7          ;选中PD3,先显示十位
       out portd, r16
       mov r23,r19          ;将待显示的数放在R23中
       rcall cqb            ;查七段码送字线
       rcall t1ms           ;延时1ms
       ldi r16,$ef          ;选中PD4,先显示百位
       out portd,r16
       mov r23,r20          ;将待显示的数放在R23中
       rcall cqb            ;查七段码送字线
       rcall t1ms           ;延时1ms  
       ldi r16,$df          ;选中PD5,先显示千位
       out portd,r16
       mov r23,r21          ;将待显示的数放在R23中
       rcall cqb            ;查七段码送字线
       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 

⌨️ 快捷键说明

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