文档介绍:1
PIC 单片机引脚中断程序的设计技巧
■山东省宁阳一中殷建彬
1 简述◇清除 RBIF 标志。
笔者认为上面程序设计最大的问题是在中断程序里
所有的中档系列 PIC 单片机, PORTB 端口最高的 4
调用延时程序。大家知道,中档 PIC 单片机只有 8 层深度
个引脚( RB7~RB4) 在设为输入模式时,当输入电平由高
的硬件堆栈,在中断里调用子程序出现极易堆栈溢出的情
到低或由低到高发生变化时,可以让单片机产生中断。这
况。另外,PIC 单片机中断程序入口只有一个,在响应中
就是通常所说的引脚状态变化中断。
断的请求时, PIC 单片机就会自动把全局中断的使能位
在设计引脚中断程序时,有三个需要特别注意的地
( IN TCON 的第 7 位 GIF) 清除,这样其他中断就暂时不能
方。一是,在清除 PORTB 中断标志位 RBIF 之前,必须安
被响应(此时,如果别的中断发出的中断请求,标志位将一
排一条必不可少的,以 PORTB 端口数据寄存器 PORTB
直保留着) ,直到这个中断程序退出后才会得到响应。这
为源寄存器的读操作指令。放置这一指令的目的有时并
就要求我们设计中断程序的时候必须尽量短,避免调用子
不只是为了读取有用的数据,而是为了取消状态变化的硬
程序,更不要在中断里进行复杂的运算。
件信号,以便顺利清除 RBIF 标志位,为下一次中断做好
下面给出笔者设计程序时的思路。
准备。二是,由于端口 PORTB 是引脚电平变化中断,即
当引脚状态变化引起中断时,在中断子程序里首先判
无论引脚出现上升沿还是下降沿都会产生中断请求所以
, 断引起中断的原因是不是我们需要的变化引起的中断。
必须处理好不需要的虚假中断。三是,一般都利用 PIC 单
如果是,不要在这里延时,而是设置一个标志位,接着清除
片机的引脚功能来检测按键,所以必须处理好按键消抖的
中断标志,退出中断。中断程序如下:
问题。
else if ( (RBIE & RBIF) = = 1) { / / 如果引脚变化引起中断
( ) 上的按钮接地
2 引脚中断程序设计 if RB4 = = 0 { / / RB4
key = 1 ; / / 按键标志位置位
在主程序里先设置有关的寄存器。}
◇设置 TRISB 寄存器,使 RB7~RB4 相关的引脚处 RBIF = 0 ; / / 清除引脚中断标志位
于输入状态; }
◇如果需要弱上拉,通过 OPTION_ REG 的第 7 位其中,if ( RB4 = = 0) 语句相当于读取了 PORTB 端口
设置; 数据寄存器,取消了状态变化的硬件信号。
◇ RBIF = 0 ; 下面详细介绍怎么样进行按键去抖。
◇ RBIE = 1 ; 首先,在定时器中断里设置一个 1 ms 的时间基准标
◇ GIF = 1 。志位“SYS1ms”,每到 1ms “, SYS1ms”便置位。程序如下:
响应状态变化后的中断服务程序。
unsigned char count ;
◇检查 RBIF 是否为 1 ,为 1 则是引脚变化引起的
if ( ( T