×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-05-16 发布时间:
|
       在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;}
 
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 USB HID 键盘