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

📄 demo_7_1.asm

📁 AVR原理与应用例程
💻 ASM
字号:
;******************************************************** 
;AVR汇编程序实例:Demo_7_1.asm 
;使用INT0、INT1控制LED数码管显示 
;Mega16  4MHz 
;******************************************************** 

.include "m16def.inc"
.def temp		=	r23				;临时变量 
.def counter	=	r24				;计数变量 

;中断向量区配置,FLASH空间$000~$028
.org  $000
jmp 	RESET 		; 复位处理
jmp 	EXT_INT0	; IRQ0 中断向量
jmp 	EXT_INT1	; IRQ1 中断向量
reti 			; Timer2 比较中断向量
nop
reti 			; Timer2 溢出中断向量
nop
reti 			; Timer1 捕捉中断向量
nop
reti 			; Timer1 比较A 中断向量
nop
reti 			; Timer1 比较B 中断向量
nop
reti 			; Timer1 溢出中断向量
nop
reti 			; Timer0 溢出中断向量
nop
reti 			; SPI 传输结束中断向量
nop
reti 			; USART RX 结束中断向量
nop
reti 			; UDR 空中断向量
nop
reti 			; USART TX 结束中断向量
nop
reti			; ADC 转换结束中断向量
nop
reti			; EEPROM 就绪中断向量
nop
reti 			; 模拟比较器中断向量
nop
reti 			; 两线串行接口中断向量
nop
reti 			; IRQ2 中断向量
nop
reti 			; 定时器0 比较中断向量
nop
reti 			; SPM 就绪中断向量
nop

.org  $02A
RESET:					; 上电初始化程序
	ldi r16, high(RAMEND) 
	out SPH, r16 
	ldi r16, low(RAMEND)
	out SPL, r16 		; 设置堆栈指针为RAM 的顶部

	ser temp
	out ddra, temp		; 设置PORTA为输出,段码输出
	out porta,temp		; 设置PORTA输出全1 

	ldi temp, 0x0a
	out mcucr, temp		; INT0、INT1下降沿触发
	ldi temp, 0xc0
	out gicr, temp		; 允许INT0、INT1中断
	out gifr, temp		; 清除INT0、INT1中断标志位

	clr counter
	sei	 				; 使能中断

MAIN:
	clr r0
	ldi zl, low(led_7 * 2)
	ldi zh, high(led_7 * 2)	; Z寄存器取得7段码组的首指针
	add zl,counter			; 加上要显示的数字
	adc zh,r0				; 加上低位进位
	lpm						; 读对应七段码到R0中
	out porta, r0			; LED段码输出
	rjmp MAIN				; 循环显示

EXT_INT0:
	in temp, sreg
	push temp				; 中断现场保护
	inc counter				; 计数单元加1 
	cpi counter, 0x10		; 与16比较
	brne EXT_INT0_RET		; 小于16转中断返回 
   	clr counter				; 计数单元清0 
EXT_INT0_RET:
	pop temp
	out sreg, temp			; 中断现场恢复
	reti					; 中断返回

EXT_INT1:
	in temp, sreg
	push temp				; 中断现场保护
	dec counter				; 计数单元减1
	cpi counter, 0xFF		; 与255比较
	brne EXT_INT1_RET		; 未到255转中断返回
	ldi counter, 0x0F		; 计数单元设置为15
EXT_INT1_RET:
	pop temp
	out sreg, temp			; 中断现场恢复
	reti					; 中断返回

led_7:           			;7段码表 
.db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
.db 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

⌨️ 快捷键说明

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