用汇编实现利用中断控制LED灯定时的亮和灭

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用汇编实现利用中断控制LED灯定时的亮和灭

;********************************************************

;AVR汇编程序实例

;使用INT0、INT1控制LED数码管显示

;Mega16 4MHz

;********************************************************

.include "m16def.inc"

.def temp = r23 ;临时变量

.def counter = r24 ;计数变量

.def flag=r25

;中断向量区配置,FLASH空间$000~$028

.org $000

jmp RESET ; 复位处理

jmp EXT_INT0 ; IRQ0 中断向量

nop

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 的顶部ldi r16, 156

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

clr flag

sei ; 使能中断

state: ldi zl, low(led_7 * 2)

ldi zh, high(led_7 * 2) ; Z寄存器取得7段码组的首指针clr counter

loop:

cpi flag,1

brbs 1,stop

cpi counter,0x10

brbs 1,state

lpm

inc counter

inc zl

out porta, r0

call delay

rjmp loop

stop: cpi flag,0

brbs 1,loop

rjmp stop

EXT_INT0: in temp, sreg

push temp

;mov temp,counter

;push temp

cpi flag,1

brbs 1,abc

inc flag

;pop temp

;mov counter, temp

pop temp

out sreg, temp ; 中断现场恢复

reti

abc: dec flag

pop temp

;mov counter,temp

;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

相关文档
最新文档