在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;}
}