微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > pic16f877a的电平变化中断(interrupt on change)使用误区

pic16f877a的电平变化中断(interrupt on change)使用误区

时间:12-03 来源:互联网 点击:
在PORTB的RB4:RB7是电平变化中断interrupt on change),要使用它,将它们引脚对应于TRISB的位设定为输入是必须的,然后配置中断。

工作原理:RB4:RB7是电平变化中断的引脚的输入状态和上一次读取PORTB的锁存器的值进行比较,当两组数据相异时,发生中断同,当这四个引脚的一部分发生电平变化时,将会最后取或,只要有一个引脚的输入状态发生变化,就会发生中断改变。

注意:在进入中断服务子程序时,一定要读取或写入PORTB锁存器的值,这样才会结束两组数据的比较,然后再去清除中断标志位。如果没有读取PORTB的值,两组数据的比较一直存在,先清除中断标志(RBIF)是没有用的,RBIF也会一直被设定。如下面的例子:

/*这是一个用INT中断和电平变化中断计光电编码器(码盘)的读数*/

void
interrupt on_change()
{
if(INTF)
{
f_r++;
INTF=0;
}
if(RBIF&&RB4) //高电平计数
{
RB4=~RB4;//先读取或写入PORTB锁存器的值
f_l++;
RBIF=0;//后清除中断标志(RBIF)
}
else {RB4=~RB4; RBIF=0;}//低电平时

}

下面的程序就是我们在试验中一直困扰的问题,就是出不了中断。

错误用法,没有读取锁存器的值

void
interrupt on_change()
{
if(INTF)
{
f_r++;
INTF=0;
}
if(RBIF&&RB4)
{
f_l++;
RBIF=0;//
}
else {RBIF=0;}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top