在这里还是先说了一个大前提,这里讲解AVR单片机,为啥我选择了使用atmega 328p这个芯片,那是应为现在arduino很火,而arduino 用的就是atmega 328p这个芯片,特别是在创客教育、STEAM教育和一些开发公司都在大量的使用arduino这个开源硬件。了解好atmega 328p了,arduino基本上就游刃有余了,avr系列也基本上熟悉了。
先看几个基本的概念:
-
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
关于外部引脚中断的示例程序,我们将在下一个教程中给出。欢迎大家关注、点赞。
,