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;}
}
pic16f877a电平变化中断使用误 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)