本帖最后由 yongruru 于 2019-6-28 16:52 编辑
PIC16F184x6只有一个中断入口,不像AVR有几十个中断向量,所以中断也没有优先级和中断嵌套。当处于中断状态,来了新的中断,新的中断只能等待。当来了多个新的中断,按中断触发的先后依次执行。
PIC16F184x6也只有一个外部中断,它可以映射到任意IO口上。
个人感觉PIC16F184x6的中断和外部中断设计的比较简单,并没有做的很丰富灵活。
下面做一个实例,开机进入休眠,按下SW0按键唤醒。
时钟HFINT0SC 16m。关看门狗,关BOR。
添加EXT_INT外设
触发方式,只有上升沿或者下降沿,没有电平触发。
将外部中断匹配到RC2引脚,也就是板子上的按键
RC2设置上拉
开启中断
生成代码,添加程序 void main(void)
{
SYSTEM_Initialize();
VREGPM=1; //关LDO
SLEEP(); //进入睡眠
while (1)
{
NOP();
}
}
运行程序,开机进入休眠,电流显示为0,小于1ua。按下按键唤醒MCU,电流为1.8ma
因为只有一个外部中断,可能是作为补充,PIC还有IOC,可以独立的设置某个引脚或某几个引脚,当产生上升沿或下降沿变化时产生中断。同样可以从睡眠中唤醒。
MCC中删除外部中断,设置RC2为输入
设置上拉和IOC为上升沿和下降沿
使能ICOIE
生成代码,运行,同样实现了按下SW2按键唤醒。
个人理解,EXT-INT和ICO在这款芯片上共存没有太大意义,基本上ICO都能实现了。可能EXT-INT稍简单点。大家觉得呢?欢迎交流。
|