先看几个基本的观点:
atmega 328p有26个中断源,每一个中断源都有一个独立的唯一的中断向量作为中断做事程序的入口地址。
所有的中断源都有自己独立的使能位。
全局中断和相应的中断使能位都被置位了,在中断标志位置位时,才实行中断做事程序。
来看看datasheet:
大略的说一下:328p有2个外部中断,分别是INT0和INT1,两个中断都是由单片机的外部引脚触发的,详细是哪两个引脚,自己去搜一下芯片就知道了。如果许可外部中断的话,纵然你把这两个引脚设置为输出,外部中断也会被触发,这个地方要把稳一下,好多人都弄不明白。可选择的触发办法为:The INT0 and INT1 interrupts can be triggered by a falling or rising edge or a low level(这是datasheet上的原话,关于不明白啥时上升沿触发,低落沿触发,低电平触发的,可以评论,看情形,出一个教程)。
下面紧张看来一下涉及到的寄存器:
MCUCR:MCU掌握寄存器。浸染是,实在便是掌握中断向量表的位置的。
解释一下:
bit 1 :中断向量的选择,便是选择把中断向量发在哪个位置,在flash还是bootloader。
bit 2 :中断向量改变使能
示例代码:
2. EICRA:外部中断掌握寄存器A。浸染:外部触发办法的选择
解释一下:
bit 3、2:INT 1的触发办法选择
bit1、0:INT 0的触发办法选择
3.EIMSK:外部中断屏蔽寄存器。浸染:实在便是中断使能位的掌握。
解释一下:
bit 1:状态寄存器的第七位置位,bit 1 置位,INT1中断使能。
bit 0:同理,INT0 中断使能。
4.EIFR:外部中断标志寄存器。浸染:可以用来检测是不是触发中断要求了。
解释一下:
bit 1:INT 1触发了中断要求,该位置位。
bit 0:INT 0触发了中断要求,该位置位。
下面还有几个寄存器:就不详细的先容了,可直接查看datasheet,弄明白我上面讲的那些也就差不多了。
5.PCICR :引脚改变中断掌握寄存器
6. PCIFR :引脚改变中断标志寄存器
7.PCMSK2 : 引脚改变屏蔽寄存器 2
8.PCMSK1 : 引脚改变屏蔽寄存器 1
9.PCMSK0 : 引脚改变屏蔽寄存器 0
关于外部引脚中断的示例程序,我们将不才一个教程中给出。欢迎大家关注、点赞。