在这里还是先说了一个大前提,这里讲解avr单片机,为啥我选择了使用atmega328p这个芯片,那是应为现在arduino很火,而arduino用的就是atmega328p这个芯片,特别是在创客教育、STEAM教育和一些开发公司都在大量的使用arduino这个开源硬件。了解好atmega328p了,arduino基本上就游刃有余了,avr系列也基本上熟悉了。
先看几个基本的概念:
atmega328p有26个中断源,每一个中断源都有一个独立的唯一的中断向量作为中断服务程序的入口地址。
所有的中断源都有自己独立的使能位。
全局中断和相应的中断使能位都被置位了,在中断标志位置位时,才执行中断服务程序。
来看看datasheet:
下面主要看来一下涉及到的寄存器:
MCUCR:MCU控制寄存器。作用是,其实就是控制中断向量表的位置的。
说明一下:
bit1:中断向量的选择,就是选择把中断向量发在哪个位置,在flash还是bootloader。
bit2:中断向量改变使能
示例代码:
2.EICRA:外部中断控制寄存器A。作用:外部触发方式的选择
说明一下:
bit3、2:INT1的触发方式选择
bit1、0:INT0的触发方式选择
3.EIMSK:外部中断屏蔽寄存器。作用:其实就是中断使能位的控制。
说明一下:
bit1:状态寄存器的第七位置位,bit1置位,INT1中断使能。
bit0:同理,INT0中断使能。
4.EIFR:外部中断标志寄存器。作用:可以用来检测是不是触发中断请求了。
说明一下:
bit1:INT1触发了中断请求,该位置位。
bit0:INT0触发了中断请求,该位置位。
下面还有几个寄存器:就不详细的介绍了,可直接查看datasheet,弄明白我上面讲的那些也就差不多了。
5.PCICR:引脚改变中断控制寄存器
6.PCIFR:引脚改变中断标志寄存器
7.PCMSK2:引脚改变屏蔽寄存器2
8.PCMSK1:引脚改变屏蔽寄存器1
9.PCMSK0:引脚改变屏蔽寄存器0





