1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ATmega48、 ATmega88 与 ATmega168 的中断向量基本相同,只有如下差别:
ATmega168的每个中断向量占据两个指令字,而 ATmega48 与ATmega88的只占一 个指令字。 ATmega48 没有独立的 Boot Loader 区。在 ATmega88 与 ATmega168 中,复位向量 由 BOOTRST 熔丝位决定,中断向量的起始地址由MCUCR寄存器的 IVSEL 决定。 。 (点击图片放大) Notes: 1. 熔丝位BOOTRST被编程时,MCU复位后程序跳转到Boot Loader。请参见 P241”Boot Loader 支持RWW自编程,ATmega88 与 ATmega168” 2. 当寄存器MCUCR的IVSEL置位时,中断向量转移到Boot区的起始地址。此时各个中断 向量的实际地址为表中地址与Boot 区起始地址之和。 Table31 给出了不同的BOOTRST/IVSEL设置条件下的复位和中断向量的位置。如果程序 没有使用中断,中断向量就没有意义。用户可以在此直接写程序。同样,如果复位向量位 于应用区,而其他中断向量位于 Boot 区,则复位向量之后可以直接写程序。反过来亦是 如此。 |
|
|
|
ATmega168 典型的复位和中断设置如下:
地址···代码 ···代码说明 0x000 rjmp RESET ; 复位处理 0x001 rjmp EXT_INT0 ; IRQ0处理 0x002 rjmp EXT_INT1 ; IRQ1处理 0x003 rjmp PCINT0 ; PCINT0处理 0x004 rjmp PCINT1 ; PCINT1处理 0x005 rjmp PCINT2 ; PCINT2处理 0x006 rjmp WDT ;看门狗定时器处理 0x007 rjmp TIM2_COMPA ; 定时器 2 比较 A处理 0x008 rjmp TIM2_COMPB ; 定时器 2比较 B处理 0x009 rjmp TIM2_OVF ; 定时器 2溢出处理 0x00A rjmp TIM1_CAPT ; 定时器 1捕获处理 0x00B rjmp rjmp TIM1_COMPA ; 定时器 1比较 A处理 0x00C rjmp TIM1_COMPB ; 定时器 1比较 B处理 0x00D rjmp TIM1_OVF ; 定时器 1溢出处理 0x00E rjmp TIM0_COMPA ; 定时器 0比较 A处理 0x00F rjmp TIM0_COMPB ; 定时器 0比较 B处理 0x010 rjmp TIM0_OVF ; 定时器 0溢出处理 0x011 rjmp SPI_STC ; SPI 传输结束处理 0x012 rjmp rjmp USART_RXC ; USART, RX结束处理 0x013 rjmp USART_UDRE ; USART, UDR空处理 0x014 rjmp USART_TXC ; USART, TX Complete 处理 0x015 rjmp ADC ; ADC转换结束处理 0x016 rjmp EE_RDY ; EEPROM就绪处理 0x017 rjmp ANA_COMP ; 模拟比较器处理 0x018 rjmp TWI ; 两线串行接口处理 0x019 rjmp SPM_RDY ; SPM 就绪处理 ; 0x01A RESET: ldi r16, high(RAMEND); 主程序 0x01B out SPH,r16 ; 设置堆栈指针为 RAM的顶部 0x01C ldi r16, low(RAMEND) 0x01D out SPL,r16 0x01E sei ; 使能中断 0x01F 、、、、 、、、、 、、、、 当熔丝位 BOOTRST被编程,Boot 区为 2K 字节,且寄存器 MCUCR 的 IVSEL 在使能任 何中断之前被置位时, ATmega168 典型的复位和中断设置如下: 地址··· 符号··· 代码··· 说明 0x0000 RESET: ldi r16,high(RAMEND) ; 主程序 0x0001 out SPH,r16 ; 设置堆栈指针为 RAM的顶部 0x0002 ldi r16,low(RAMEND) 0x0003 out SPL,r16 0x0004 sei ; 使能中断 0x0005 xxx ; .org 0xC02 0x1C02 jmp EXT_INT0 ; IRQ0处理 0x1C04 jmp EXT_INT1 ; IRQ1处理 ... ... ... ; 0x1C32 jmp SPM_RDY ; SPM 就绪处理 当熔丝位 BOOTRST 未编程, Boot 区为 2K 字节, ATmega168 典型的复位和中断设置 如下: 地址··· 符号··· 代码 ···说明 .org 0x0002 0x0002 jmp EXT_INT0 ; IRQ0处理 0x0004 jmp EXT_INT1 ; IRQ1处理 ... ... ... ; 0x0032 jmp SPM_RDY ; SPM 就绪处理 ; .org 0x1C00 0x1C00 RESET: ldi r16,high(RAMEND) ; 主程序 0x1C01 out SPH,r16 ; 设置堆栈指针为 RAM的顶部 0x1C02 ldi r16,low(RAMEND) 0x1C03 out SPL,r16 0x1C04 sei ; 使能中断 0x1C05 xxx ATmega168 当熔丝位BOOTRST被编程,Boot区为2K 字节,且寄存器MCUCR的IVSEL 在使能任何中断之前被置位时, ATmega168 典型的复位和中断设置如下: 地址···符号···代码···说明 ; .org 0x1C00 0x1C00 jmp RESET ; 复位处理 0x1C02 jmp EXT_INT0 ; IRQ0处理 0x1C04 jmp EXT_INT1 ; IRQ1处理 ... ... ... ; 0x1C32 jmp SPM_RDY ; SPM 就绪处理 ; 0x1C33 RESET: ldi r16,high(RAMEND) ; 主程序 0x1C34 out SPH,r16 ; 设置堆栈指针为 RAM的顶部 0x1C35 ldi r16,low(RAMEND) 0x1C36 out SPL,r16 0x1C37 sei ; 使能中断 0x1C38 xxx |
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1073浏览 3评论
195浏览 2评论
457浏览 2评论
370浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 06:19 , Processed in 1.046041 second(s), Total 49, Slave 40 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号