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

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

举报
开通vip

PIC单片机引脚中断程序的设计技巧PIC单片机引脚中断程序的设计技巧 经验交流 PIC单片机引囊中断程序的设计技巧 ?山东省宁阳一中殷建彬 1简述 所有的中档系列PIC单片机,PORTB端口最高的4 个引脚(RB7,RB4)在设为输入模式时,当输入电平由高 到低或由低到高发生变化时,可以让单片机产生中断.这 就是通常所说的引脚状态变化中断. 在设计引脚中断程序时,有三个需要特别注意的地 方.一是,在清除P0RTB中断标志位RBIF之前,必须安 以PORTB端口数据寄存器PORTB 排一条必不可少的, 为源寄存器的读操作指令.放置这一指...

PIC单片机引脚中断程序的设计技巧
PIC单片机引脚中断程序的设计技巧 经验交流 PIC单片机引囊中断程序的设计技巧 ?山东省宁阳一中殷建彬 1简述 所有的中档系列PIC单片机,PORTB端口最高的4 个引脚(RB7,RB4)在设为输入模式时,当输入电平由高 到低或由低到高发生变化时,可以让单片机产生中断.这 就是通常所说的引脚状态变化中断. 在设计引脚中断程序时,有三个需要特别注意的地 方.一是,在清除P0RTB中断标志位RBIF之前,必须安 以PORTB端口数据寄存器PORTB 排一条必不可少的, 为源寄存器的读操作指令.放置这一指令的目的有时并 不只是为了读取有用的数据,而是为了取消状态变化的硬 件信号,以便顺利清除RBIF标志位,为下一次中断做好 准备.二是,由于端口PORTB是引脚电平变化中断,即 无论引脚出现上升沿还是下降沿都会产生中断请求,所以 必须处理好不需要的虚假中断.三是,一般都利用PIC单 片机的引脚功能来检测按键,所以必须处理好按键消抖的 问题. 2引脚中断程序设计 在主程序里先设置有关的寄存器. ?设置TRISB寄存器,使RB7,RIM相关的引脚处 于输入状态; ?如果需要弱上拉,通过OPTION—REG的第7位 设置; ?RBIF一0; ?RBIE一1; ?GIF一1. 响应状态变化后的中断服务程序. ?检查RBIF是否为1,为1则是引脚变化引起的 中断; ?调用延时程序,延时20,30ms,目的是为了按键 去抖; ?判断是引脚出现上升沿还是下降沿引起的中断; ?调用按键处理程序; ?读PORTB口的值,取消状态变化的硬件信号; ?清除RBIF标志. 笔者认为上面程序设计最大的问题是在中断程序里 调用延时程序.大家知道,中档PIC单片机只有8层深度 的硬件堆栈,在中断里调用子程序出现极易堆栈溢出的情 况.另外,PIC单片机中断程序入口只有一个,在响应中 断的请求时,PIC单片机就会自动把全局中断的使能位 (INTCON的第7位GIF)清除,这样其他中断就暂时不能 被响应(此时,如果别的中断发出的中断请求,标志位将一 直保留着),直到这个中断程序退出后才会得到响应.这 就要求我们设计中断程序的时候必须尽量短,避免调用子 程序,更不要在中断里进行复杂的运算. 下面给出笔者设计程序时的思路. 当引脚状态变化引起中断时,在中断子程序里首先判 断引起中断的原因是不是我们需要的变化引起的中断. 如果是,不要在这里延时,而是设置一个标志位,接着清除 中断标志,退出中断.中断程序如下: elseif((RBIE&RBIF)一一1){//如果引脚变化引起中断 if(RIM一一O){//RIM上的按钮接地 key=1;//按键标志位置位 } RBIF=0;//清除引脚中断标志位 } 其中,if(RB4一一0)语句相当于读取了P0RTB端口 数据寄存器,取消了状态变化的硬件信号. 下面详细介绍怎么样进行按键去抖. 首先,在定时器中断里设置一个1ms的时间基准标 志位"SYSlms",每到1ms,"SYSlms"便置位.程序如下: unsignedcharcount; if((TOIE&TOIF)一一1){//定时器中断 TMR0+一0x09;//每250s中断一次 if(count=一4){ count=0; SYSlms=1;//系统时间标志 } count++0 —lMicr0c0ntr011ers&EmbeddedSystems69 TOIF一0://清除时钟中断标志位 有了这个时间基准,便可以在主程序里进行按键去抖 处理了.为了更好地利用这个时间基准,定义一个消息标 志SYSTime,笔者把它称作时间消息.为了让这个消息 有自我发布和自我消失的功能,定义了如下一个宏: bitSYSTime; #defineTimeEnable()SYSTime一0;if(SYSlms){SYSTime一 1;SYSlms=0;) 可以把TimeEnable()放到主程序死循环的任何地 方,每当程序执行这个宏,SYSTime就会清零,这就是标 志位的自我消失.如果在定时器时间基准标志位 SYS1ms已经置位的话,SYSTime就会置1,这样别的程 序就可以利用这个时间消息了,这就是消息的自我发布. 下面就是利用这个时间消息来进行按键延时去抖的,首先 看一下按键扫描子程序: voidscankey(){ unsignedcharKeyTime,KeyTask;//定义任务时间参数, ff任务参数 switch(KeyTask){ case0:if(key){ KeyTime=30}//准备延时30ms KeyTask++;//准备好下一个任务 key=0; ) break; case1:KeyTime--一;//延时30ms if(KeyTime=一O)KeyTask++; break; case2:if(RB4一一0){ //调按键处理程序 KeyTask=0; ) elseKeyTask=0;//退出任务 break; ) ) 在主程序的死循环中这样用: while(1){ TimeEnable(); If(SYSTime=一1){scankey();) //在此可以添加其他程序 ) 只有有时间消息的时候才执行按键扫描程序.可以 看到,进入扫描程序执行第一次的时候,程序首先判断按 键标志位有没有置位,置位的话(也就是有按键按下的 话),任务时间参数(KeyTime)赋值为3O,这是延时30ms 去抖,当然你也可以设置为其他的时间值;同时任务参数 (KeyTask)加1.1ms后,再进入扫描程序,这个时候扫 描程序执行case1的语句,这样3O次后(延时了30ms), 任务参数(KeyTask)加1,值为2.1ms后,再进入扫描程 序,将执行case2的语句,首先在这里再次判断是不是按 键还在按下,如果是就调按键的处理程序,如果不是,就退 出按键扫描程序.在这里,还可以加入按键是否抬起的判 断程序. 这样设计的引脚变化程序,CPU开销小,效率高,不 会出现堆浅溢出的问题,提高了系统的实时性.一 (收稿日期:2005—01—17) - 实验时,摄像头的分辨率调整为320×240,两个 GPRS收发器分别在相距4rtl左右的房间两端,图5显示 了实验结果.实验结果 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 明:基于GPRS移动通信网络和 图5图像采集实验结果 DSP技术的半自主移动机器人远程系统达到了预期的效 果.同时在实验中也发现,GPRS传输数据的实时性是有 限的,虽然理论上传输速率高达171kb/s,但实际上受多 种因素的影响,实际速率较低,传输一帧3K的JPEG格式 图像大约需要30,60S的时间.因此,如何进一步提高 系统的实时性是本系统面临的最大挑战.? 参考文献 1丹尼斯?克拉克,迈克尔?欧文斯.机器人设计与控制.宗 光华,张慧慧译.北京:科学出版社,2004 2韩斌杰.GPRS原理及网络优化.北京:机械工业出版社,2003 3何苏勤,王忠勇.TMS320C2000系列DSP原理及实用技术. 北京:电子工业出版社,2003 4中国联通公司.中国联通CDMA直放站统一监控管理 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 规范. (收稿日期:2005—04—04) 70平疗缸嵌入禾'毛应两l?_
本文档为【PIC单片机引脚中断程序的设计技巧】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_842972
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:5
分类:生活休闲
上传时间:2017-10-16
浏览量:13