N年不用51单片机之后,突然公司给了一个51内核的单片机让我改程序,顿时束手无策,本来是要写一个串口收发函数的,看了一眼51的的中断,竟然觉得无从下手,不知道串口对应的中断编号是多少x(void xx(void)interrupt x),感觉大学的51都白学了,看了一些资料以后终于重新理解,并写下这边文章供日后回忆。
keil4的uVision Help里面其实有详细的解说这个void xx(void)interrupt x为什么要这么写的。
里面写的意思其实就是根据芯片手册提供的中断向量表来计算我们void xx(void)interrupt x中x的数字是多少,比如51单片机的数据手册图下图,外部中断INT0的中断向量地址为0003H,所以他的中断编号就是0,Timer0的地址为0003H+8=000BH,他的编号就是2,以此类推
然后在看一下我现在用的单片机的中断向量表,就和上面的8051单片机不一样了,多了好几个中断,但是他的中断号的定义规则还是一样的,比如我现在的串口2中断向量地址是0x0063,那我的中断号码就是12((0x0063-0x0003)/0x0008)
附上一张keil Help里对interrupt x的解释