我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 626|回复: 0

单片机多中断处理技术的应用与研究 - 单片机/处理器 - 电

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:34:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<strong>引言</strong>

PIC系列单片机中断源已经达到14个.可谓相当丰富;但同时也带来了一些难题:在处理多中断时不具备处理“高级优先处理”能力的问题,如此多的中断源在处理时很容易产生中断冲突,如何有效的处理中断到达时的时序,其算法应该如何实现成了首先需要解决的问题。

<strong>1 中断处理技术</strong>

对于PIC系列单片机,其设计上虽然有很多中断,但是并没有规定中断的优先级。当遇到中断的时候,不做任何判断,而是先把指针指向0004H(中断起始地址),至于接下来如何操作则完全交给用户“软处理”完成。其中断时序图如下:


<ignore_js_op>





2010-3-26 13:39:03 上传
<strong>下载附件</strong> (3.54 KB)




</ignore_js_op>

图1 INT引脚中断时序图

中断现场的保护是中断技术中一个很重要的环节。对于PICl6F87X单片机,在进人中断服务程序期间,只有返回地址,即程序计数器Pc的值被自动压入硬件堆栈;而在中断处理程序中,一般必须像使用WReg、STATUS等寄存器一样,在中断处理程序开始处,就备份这些寄存器的内容,即进行所谓的现场保护。

PICl6F87X子系列单片机具备的中断源多达14种,中断矢量只有1个,并且各个中断源之间也没有优先级别之分,不具备非屏蔽中断。PIC单片机中采用的是硬件堆栈结构,不占用程序存储器空间,也不占用数据存储器空间,同时也无需用户去操作堆栈指针;但同时也就决定了它不具备其他单片机指令系统中的压栈(PUSH)和出栈(POP)指令。实现中断现场保护时,不能用堆栈来实现,而是通过变量的复制备份来实现。一般的实现办法是:先确定要保护的现场,一般包括WReg、STATUS等寄存器的内容,然后在各个页都定义与这些寄存器对应的变量。以备份现场。发生中断时,在中断处理代码开始处先将这些现场寄存器内容复制到备份变量,退出中断处理时再复制回去恢复现场:

<ignore_js_op>





2010-3-26 13:39:04 上传
<strong>下载附件</strong> (10.64 KB)




</ignore_js_op>


<strong>2 基于PICl6F87X单片机的频率计设计</strong>

随着电子技术的迅速发展,以单片机为控制核心的控制器件,已经全面渗透到测试仪器和计量检定的各个方面。同时,频率计作为一种常用工具,在工程技术和无线电测量、计量等领域的应用十分广泛。设计的频率计主要用来测量脉冲频率。

2.1设计原理

PICl6F87X单片机内部集成有捕捉,比较,脉宽调制PWM(CCP)模块。当CCP工作在捕捉(capture)方式时,可捕捉外部输人脉冲的上升沿或下降沿,并产生相应的中断。

PICl6F87X单片机内部还集成了定时器肘数器模块,采用其中的TMRI作为定时器,该定时器的工作原理是通过TMR1“寄存器对”TMRlH:TMR1L从0000H递增到FFFFH。之后再返回0000H时,会产生高位溢出,并且将会设置溢出中断标志位TMR1IF为1,同时引起CPU中断响应。

在均匀的脉冲序列中,脉冲频率值等于单位时间内发生的脉冲次数。根据这个原理,可以采用PICl6F87X系列单片机内置定时器模块TMRl计时j同时使用CCP模块的捕捉功能,每间隔n(n=1,4,16)个脉冲捕捉一次并产生中断,记录第1个和第(m-1)*n+1个脉冲到来时的定时器计时tl和tm。

用被捕捉的脉冲次数除以第1次和第(m-1)*n+1次脉冲之间间隔的时间即可得到脉冲频率值。因此,脉冲频率值计算公式为:

f=n*(m-1)/(tm-t1)

若需测量更大频率,可以根据需要在待测频率和CPU的CCP口之间接入相应倍数的分频器,每接入一个1/n倍分频器,可测频率范围可扩大n倍(如图2所示)。


<ignore_js_op>





2010-3-26 13:39:03 上传
<strong>下载附件</strong> (2.6 KB)




</ignore_js_op>

图2 CPU外接示意图

2.2 程序设计

(1)主程序

主程序流程图如图3所示。


<ignore_js_op>





2010-3-26 13:39:03 上传
<strong>下载附件</strong> (7.25 KB)




</ignore_js_op>

图3主程序流程图

(2)中断程序

中断程序流程图如图4所示。


<ignore_js_op>





2010-3-26 13:39:04 上传
<strong>下载附件</strong> (5.4 KB)




</ignore_js_op>

图4中断子程序流程图

<strong>3 多中断处理注意的问题</strong>

1)要处理多路中断问题,中断处理程序的算法大体上可以分为两类:弱中断优先级(使用CALL和RETURN方式)和强中断优先级(使用GOTO方式)。

2)如果同时发生多个中断请求,则中断处理的顺序取决于中断程序中的检查中断源的顺序。

3)若要防止中断请求被丢失,则要注意下面两种情况:如果同一中断源的中断发生间隔时间小于该中断服务的处理时间,则可能出现中断事件被忽略(体现在中断服务的过程中,标志位被连续发生了两次置位),例如:中断事件发生的时间间隔为30ms,中断服务处理加上跳转判断的时间为50ms,则情况将会如下所示:

[中断次数______1][中断次数______2][中断次数_____3][中断次数_____4]
[处理次数______1][处理次数______2][处理次数_____4]

如果在中断处理一开始就清除IF,那么如上图所示,中断事件3、4在处理次数2的过程中发生了两次,那么即使IF清除发生在中断次数3发生之前,也将丢失第三次中断。

另外,即使中断出现的时间间隔大于中断服务的时间间隔,如果清除中断标志位的指令安排在中断服务子程序的尾部,就有可能造成丢失该中断请求(即两次中断标志置位的事件只对应一条清除指令和一次中断处理),也就是如果清除中断标志位的指令安排在中断服务程序的尾部,就有可能丢失响应在处理中断期间该中断源第2次中断请求的机会。

4)为了能够编写好一个简洁的中断程序,应抓住中断的特点是具有实时性,针对实时中断数据采集系统,也就是中断的特点在于数据的采集。因此在中断程序中只应该处理数据采集和标志位的设置,而将数据的处理放在中断之外,由主程序通过循环检测执行数据处理工作,具体做法:先开辟一个“储存缓冲区”,作为采集来的数据的传递媒体,即存储采集数据,等待主程序的处理;中断程序负责数据的采集,并且将采集来的数据值赋给“存储缓冲区”;主程序通过条件循环语句反复检测“存储缓冲区”情况,及时处理采集信息。这样在处理方法既能
有效的实现中断的功能,又可以极大的缩减每个中断的时间,提高整个程序的反应速度。

5)对于中断响应和处理时间有严格要求的应用,保护现场的指令安排也应考虑延时问题。

6)在进行查表操作时必须禁止CPU响应中断。以避免中断返回时跳转到不希望的地址上去。

<strong>4 结束语</strong>

灵活地应用中断,不但可以大量的节省CPU资源,而且能够使程序更加简化.具有更高的实时性和稳定性。经过测试,这种频率计具有测量准确度高、使用方便、稳定可靠的优点,可应用于计量测试领域。同时由于使用软件控制,电路结构简单,使用硬件少,使得成本低廉且携带方便,因此也可广泛应用于工农业生产和居民生活中,具有推广价值。

本文作者创新:频率计是基于PICC高级语言开发平台,采用PICl6F87X单片机,该方案具有原理简单.性能可靠、分辨率高特点,使用该方法测量低频频率时最少可以得到8位有效数字。它采用LCD图形液晶显示,清晰度高,可视范围广,可外接晶体频率源,具有测量速度快、分辨率高的优点。本方案已在单片机课程相关教学中应用。


作者:蒯锐  来源:《微计算机信息》(嵌入式与SOC)2009年第25卷第1-2期
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表