预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第页共NUMPAGES5页 IARAVRC语言中断编程 一、AVRmega16中断向量表 向量号程序地址中断源描述IARAVR中的定义1000RESET外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及JTAGAVR复位RESET_vect2002INT0外部中断请求0INT0_vect3004INT1外部中断请求1INT1_vect4006TIMER2COMP定时器/计数2比较匹配TIMER2_COMP_vect5008TIMER2OVF定时器/计数2溢出TIMER2_OVF_vect600ATIMER1CAPT定时器/计数1事件捕捉TIMER_CAPT_vect700CTIMER1COMPA定时器/计数1比较匹配ATIMER1_COMPA_vect800ETIMER1COMPB定时器/计数1比较匹配BTIMER1_COMPB_vect9010TIMER1OVF定时器/计数1溢出TIMER1_OVF_vect10012TIMER0OVF定时器/计数0溢出TIMER0_OVF_vect11014SPI,STCSPI串行传输结束SPI_STC_vect12016USART,RXCUSART,Rx结束USART_RXC_vect13018USART,UDREUSART数据寄存器空USART_UDRE_vect1401AUSART,TXCUSART,Tx结束USART_TXC_vect1501CADCADC转换结束ADC_vect1601EEE_RDYEEPROM就绪EE_RDY_vect17020ANA_COMP模拟比较器ANA_COMP_vect18022TWI两线串行接口TWI_vect19024INT2外部中断请求2INT2_vect20026TIMER0_COMP定时器/计数0比较匹配TIMER0_COMP_vect21028SPM_RDY保存程序存储器内容就绪SPM_RDY_vect二、AVR状态寄存器-SREG 76543210ITHSVNZC初始值00000000Bit7–I:全局中断使能 I置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果I清零,则不论单独中断标志置位与否,都不会产生中断。任意一个中断发生后I清零,而执行RETI指令后I恢复置位以使能中断。I也可以通过SEI和CLI指令来置位和清零。 三、MCU控制寄存器-MCUCR 76543210SM2SESM1SM0ISC11ISC10ISC01ISC00初始值00000000Bit3,2–ISC11,ISC10:中断触发方式控制1Bit1与Bit0 外部中断1由引脚INT1激发,如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话。触发方式如下表所示。在检测边沿前MCU首先采样INT1引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。 ISC11ISC10说明00INT1为低电平时产生中断请求01INT1引脚上任意的逻辑电平变化都将引发中断10INT1的下降沿产生异步中断请求11INT1的上升沿产生异步中断请求Bit1,0–ISC01,ISC00:中断0触发方式控制Bit1与Bit0 外部中断0由引脚INT0激发,如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话。触发方式如Table35所示。在检测边沿前MCU首先采样INT0引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。 ISC01ISC00说明00INT0为低电平时产生中断请求01INT0引脚上任意的逻辑电平变化都将引发中断10INT0的下降沿产生异步中断请求11INT0的上升沿产生异步中断请求四、MCU控制与状态寄存器-MCUCSR 76543210JTDISC2-JTRFWDRFBORFEXTRFPORF初始值000Bit6–ISC2:中断2触发方式控制 异步外中断2由外部引脚INT2激活,如果SREG寄存器的I标志和GICR寄存器相应的中断屏蔽位置位的话。若ISC2写0,INT2的下降沿激活中断。若ISC2写1,INT2的上升沿激活中断。INT2的边沿触发方式是异步的。只要INT2引脚上产生宽度大于50nS的脉冲就会引发中断。若选择了低电平中断,低电平必须保持到当前指令完成,然后才会产生中断。而且只要将引脚拉低,就会引发中断请求。改变ISC2时有可能发生中断。因此建议首先在寄存器GICR里清除相应的中断使能位INT2,然后再改变ISC2。最后,不要忘记