ATmega8中断向量表有错吗?

来源:百度知道 编辑:UC知道 时间:2024/05/29 00:50:19
最近做一个程序时用到了MEGA8的计数器Timer1溢出中断来输出方波,按照官方资料以及教科书给出的中断向量表,应该选择9号向量,即:

interrupt [9] void timer1_ovf_isr(void)
{
//.......................
}

然而实际编译之后却发现运行不正常,Timer1根本就没有动起来。后来我把向量号改成了5号,就正常了。也就是说,MEGA8的实际向量表和官方资料上不一致。

为了验证这个可能性,我分别又尝试了Timer1两个通道的比较匹配、外部中断INT0和INT1、ADC转换完成中断、Timer0溢出、Timer2溢出、Timer2比较匹配……总之能试的都试了,却发现半数中断都找不到对应的向量表,以至于这些中断根本就不能使用。最终只得到以下5个有效的向量:

3=Timer2 溢出
4=Timer1 A通道比较匹配
5=Timer1 溢出
6=Timer0 溢出
8=ADC 转换完成

我想问问高手,到底是官方资料有错,还是我的编译器哪个地方没有设置好导致中断向量表发生了位置偏移?

另一篇相关帖子的链接如下,也是我发表的:

http://www.cdle.net/bbs/dispbbs.asp?boardid=23&id=21879&page=1&star=1

兄弟 我今天也发现和你一样的现象了,还没明白是什么原因。
但是PDF上给的单独用的话可以用,一起用就打架。
不知道是不是编译器的问题,我用的是ICCAVR。

调了好久,一直不明白这么简单的一个程序就是不对,试了你给的向量后就好了,非常感谢!