匿名
未登录
登录
丢石头百科
搜索
查看“ATmega168 中断向量”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
ATmega168 中断向量
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
<table border="0" cellpadding="0" cellspacing="0" style="color: rgb(72, 61, 139); font-family: Arial, 新宋体, 微软雅黑; font-size: 12px;" width="780"><tbody><tr><th class="type_483D8B" scope="col" style="line-height: 20px; font-weight: normal; border-top-style: none;" valign="top"> 本节描述ATmega168 的中断处理。更一般的 AVR 中断处理请参见 P11” 复位与中断处理 ” ATmega48、 ATmega88 与 ATmega168 的中断向量基本相同,只有如下差别: * ATmega168的每个中断向量占据两个指令字,而 ATmega48 与ATmega88的只占一 个指令字。 * ATmega48 没有独立的 Boot Loader 区。在 ATmega88 与 ATmega168 中,复位向量 由 BOOTRST 熔丝位决定,中断向量的起始地址由MCUCR寄存器的 IVSEL 决定。 。 [[File:mega168_P53_S.jpg]] (点击图片放大) [[File:mega168_P54_1.jpg]]Notes: 1. 熔丝位BOOTRST被编程时,MCU复位后程序跳转到Boot Loader。请参见 P241”Boot Loader 支持RWW自编程,ATmega88 与 ATmega168” 2. 当寄存器MCUCR的IVSEL置位时,中断向量转移到Boot区的起始地址。此时各个中断 向量的实际地址为表中地址与Boot 区起始地址之和。 Table31 给出了不同的BOOTRST/IVSEL设置条件下的复位和中断向量的位置。如果程序 没有使用中断,中断向量就没有意义。用户可以在此直接写程序。同样,如果复位向量位 于应用区,而其他中断向量位于 Boot 区,则复位向量之后可以直接写程序。反过来亦是 如此。 [[File:mega168_P54_2.jpg]] 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 <instr><instr> xxx 、、、、 、、、、 、、、、 当熔丝位 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 <instr>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 <instr>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 <instr>xxx</instr></instr></instr></instr></th></tr></tbody></table>
返回至
ATmega168 中断向量
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志