电工吧
◎ 电工吧 >> 设为首页 >> 加入收藏>> 联系方式 >> 投稿 >>留言 
网站首页 · 电工新闻 · 电工基础 · 电力技术 · 电子技术 · 电工图片 · 电工法规 · 电工图书 · 电工搜索 · 论坛交流
 
      最新电子论文
 · 谈谈C51的编程规范 
 · 单片机初学者不好掌握的概 
 · MC14541B制作可编程序定时 
 · AT89C系列单片机加解密原理 
 · 功能强大的时钟中断 
 · PIC系单片机与MCS-51系列单 
 · 有些51系统容易复位的解决 
 · 温度传感器ds1820的汇编程 
      推荐电子论文

 · 功能强大的时钟中断
 · DSP编程的几个关键问题
 · 寻址方式与指令系统
 · 数码管的显示一例
 · PIC单片机软件开发技巧 

  ■ 所在位置:首页>>电子技术>>单片机技术>>正文
 

PIC单片机引脚中断程序的设计技巧 

PIC单片机引脚中断程序的设计技巧 


作者:山东省宁阳一中 殷建彬

1 简 述 
    所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 

    在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。三是,一般都利用PIC单片机的引脚功能来检测按键,所以必须处理好按键消抖的问題。 

2 引脚中断程序设计 
    在主程序里先设置有关的寄存器。 
    ◇设置TRISB寄存器,使RB7~RB4相关的引脚处于输入状态; 
    ◇如果需要弱上拉,通过OPTION_REG的第7位设置; 
    ◇RBIF=O; 
    ◇RBIE=1; 
    ◇GIF=1。 

    响应状态变化后的中断服务程序。 
    ◇检查RBIF是否为l,为l则是引脚变化引起的中断; 
    ◇调用延时程序,延时20~30 ms,目的是为了按键去抖; 
    ◇判断是引脚出现上升沿还是下降沿引起的中断; 
    ◇调用按键处理程序; 
    ◇读PORTB口的值,取消状态变化的硬件信号; 
    ◇清除RBIF标志。 

    笔者认为上面程序设计最大的问题是在中断程序里调用延时程序。大家知道,中档PIC单片机只有8层深度的硬件堆栈,在中断里调用于程序出现极易堆栈溢出的情况。另外,PIC单片机中断程序人口只有一个,在响应中断的请求时,PIC单片机就会自动把全局中断的使能位(INTCON的第7位GIF)清除,这样其他中断就暂时不能被响应(此时,如果别的中断发出的中断请求,标志位将一直保留着),直到这个中断程序退出后才会得到响应。这就要求我们设计中断程序的时候必须尽量短,避免调用子程序,更不要在中断里进行复杂的运算。 

    下面给出笔者设计程序时的思路。 

    当引脚状态变化引起中断时,在中断子程序里首先判断引起中断的原因是不是我们需要的变化引起的中断。如果是,不要在这里延时,而是设置一个标志位,接着清除中断标志,退出中断。中断程序如下: 
else if((RBIE&RBlF)==1){ //如果引脚变化引起中断 
    if(RB4==0){ //RB4上的按钮接地 
    key=1; //按键标志位置位 
    } 
    RBIF=0; //清除引脚中断标志位 
    } 

    其中,if(RB4==0)语句相当于读取了PORTB端口数据寄存器,取消了状态变化的硬件信号。 

    下面详细介绍怎么样进行按键去抖。 

    首先,在定时器中断里设置一个lms的时间基准标志位“SYSlms”,每到lms,“SYSlms”便置位。程序如下: 

本新闻共3页,当前在第1页  [1]  [2]  [3]  

 
         相关文章

·
·
·
·
·
·

 
 
  关于本站 | 友情站点 | 联系方式 | 版权声明 | 电工技术服务与支持中心
Copyright© 2005-2006 Dg8.Com.CN ,All Rights Reserved
电工网 电工吧 电子吧