您的位置 首页 动态

pic16f877a的电平改变中止(interrupt on change)运用误区

在PORTB的RB4:RB7是电平变化中断(interruptonchange),要使用它,将它们引脚对应于TRISB的位设定为输入是必须的,然后配置中断…

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

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/252394.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部