PIC16LF1518 RB端口电平变化中断问题
尘枫 2014-01-24 12:32:04 大家帮忙看下 我使用的是PIC16LF1518的单片机,采用RB2端口电平变化中断实现独立按键的状态扫描程序。但是我无法测试到独立按键按下后由相应的验证信息:麻烦大家帮忙看看:
#define PIN_RB2 2
void Exite2Iint() //初始化配置
{
TRISB |=(1<<PIN_RB2); //将RB2口配置为输入
WPUB2 = 1; //1弱上啦
//0弱下拉
IOCBN2 = 0;//引脚匹配为负跳变
IOCBF2 = 0;//IOCBN2 = 1;//引脚匹配为负跳变清除中断
IOCIE = 1;//使能中断
}
if((IOCBF2) && (IOCIE)) //电平变化中断
{
IOCBF2 = 0;
SetFunbz = 1;
}
if(SetFunbz) //向串口打印输出验证信息
{
put_s(1,"SetFunbz...",1);
}
手册的信息:
13.0 电平变化中断
PORTB引脚可以配置为作为电平变化中断(IOC)引
脚工作。中断可以通过检测具有上升沿或下降沿的信
号而产生。任意一个PORTB引脚或PORTB引脚组合
都可以配置为产生中断。电平变化中断模块具有以下
特性:
• 电平变化中断允许 (主开关)
• 独立的引脚配置
• 上升沿和下降沿检测
• 独立的引脚中断标志
图13-1给出了IOC模块的框图。
13.1 使能模块
要允许各个PORTB引脚产生中断,INTCON寄存器的
IOCIE位必须置1。如果IOCIE位被禁止,在引脚上仍
然会发生边沿检测,但不会产生中断。
13.2 独立的引脚配置
对于每个PORTB引脚,都提供了上升沿检测器和下降
沿检测器。要允许引脚检测上升沿,需要将IOCBP 寄
存器中的相关IOCBPx位置1。要允许引脚检测下降沿,
需要将IOCBN寄存器中的相关IOCBNx位置1。
通过同时将IOCBPx 位和IOCBNx 位置1(分别在
IOCBP 和IOCBN 寄存器中),一个引脚可以配置为同
时检测上升沿和下降沿。
13.3 中断标志
位于IOCBF寄存器中的IOCBFx位是对应于PORTB的
电平变化中断引脚的状态标志。如果在正确使能的引脚
上检测到期望的边沿,则对应于该引脚的状态标志会
置1,并且如果IOCIE位置1,则还会产生中断。INTCON
寄存器的IOCIF位会反映所有IOCBFx位的状态。
13.4 清零中断标志
各个状态标志 (IOCBFx位)可以通过将其复位为零的
方式清零。如果在该清零操作期间检测到另一个边沿,
则无论实际写入的值如何,关联的状态标志都会在序列
结束时置1。
为了确保在清零标志时不会丢失任何已检测的边沿,应
当仅执行可屏蔽已知更改位的与操作。以下序列是一个
说明应执行何种操作的示例。
例13-1:
13.5 休眠模式下的操作
如果IOCIE位置1,电平变化中断的中断序列会将器件
从休眠模式唤醒。
如果在处于休眠模式时检测到边沿,则在退出休眠模式
执行第一条指令之前,会先更新IOCBF寄存器。
MOVLW 0xff
XORWF IOCBF, W
ANDWF IOCBF, F