PIC单片机多中断处理技术的应用与研究
- 格式:doc
- 大小:7.56 KB
- 文档页数:3
PIC系列单片机的中断资源特点及其应用方法详解1 PIC单片机简介PIC系列单片机是美国Microchip技术公司推出的高性能价格比的8位嵌入式控制器(Embedded Controller),它采用了精简指令集计算机RISC (Reduced Instruction Set Computer)和哈佛(Harvard)双总线以及两级指令流水线结构。
具有高速度、低工作电压、低功耗等特点和优良的性能价格比,因而PIC系列单片机越来越受到单片机开发与应用工程技术人员的青睐。
该系列独特的结构和中断资源使其在使用时与其它系列的单片机有许多不同之处。
下面以PIC16CXX系列微控制器为例来介绍PIC 系列单片机的中断资源特点以及应用方法。
2 中断资源的开发与屏蔽图1是PIC16C64/64A/65/65A的中断逻辑电路图,其它型号芯睡的中断资源也大致相同,只是资源多少不一而已,但它们的中断入口只有一个(入口地址在004H)。
PIC 单片机的中断大致可以分为两类。
第一类是由中断控制器INTCON直接控制的中断,包括外部引脚中断INT的RB口电平变化中断以及定时器TMRO溢出中断,它们的中断允许位和中断标志都在INTCON寄存器中。
引脚中断INT和定时器TMRO溢出中断与其它微处理器相同。
RB口电平变化中断是PIC 单片机特有的中断,当把RB口高4位I/O口线设置为输入时,只要这4位I/O 口线上的电平发生变化就会引起中断。
RB口的电平中断特性对用户是非常有用的。
用户可以直接利用这些口线的关键部位进行电平检测,并可利用中断进行保护性控制等操作;另一方面,电平中断特性还可以利用RB口的软件控制弱上拉特性组成一个矩阵键盘,并用按键唤醒CPU,这对于那些以电池供电的系统特别有用。
另一类是外围接口中断,包括定时器TMR1溢出中断、TMR溢出或匹配中断、同步串行口中断、异步串行口中断、并行从动口中断和CCP(Capture/Compare/PWM)中断等,而带A/D功能的PIC16C7X系列微处理器还有A/D转换完成中断。
PIC16F87X单片机中断系统应用须关注的问题摘要:美国微芯公司研制的PIC系列单片机,其硬件结构和指令系统采用了与众不同的设计手法。
在架构上和概念上对传统单片机进行了一些突破性的变革,但也给这类单片机的应用带来了一些特殊问题。
本文针对PIC16F87X系列单片机中断的特点,及其在应用过程中应该注意的几个问题进行必要的说明。
内容包括中断源、中断逻辑、中断相关的寄存器、中断的延时、中断的现场保护以及注意事项等。
广告插播信息维库最新热卖芯片: MIC38HC44BM 24LC64-I/SN CD4021BE PIC18F252-I/SO AD8606AR M62431FP TL16C554AFNR S3C4510B01-QER0 L7815 MOCD207目前在世界一些着名的单片机产品系列中,PIC16F87X系列单片机是芯片内部包含有外围设备模块数量最多的单片机品种之一。
PIC16F874和PIC16F877单片机的芯片内部集成了15个外围设备模块;PIC16F873和PIC16F876单片机的芯片内部集成了12个外围设备模块。
在最近推出的该系列的新型号中, PIC16F870单片机的芯片内部集成了10个外围设备模块;PIC16F871单片机的芯片内部集成了13个外围设备模块;PIC16F872单片机的芯片内部也集成了10个外围设备模块(比PIC16F870多了1个USART模块,少了1个SSP模块)。
这些外围设备模块在启用时以及在工作过程中,都或多或少地需要CPU参与控制、协调或交换数据等各种服务工作。
由于CPU的运行速度非常高,而各个外围设备模块的工作速度却非常低,况且这些外围设备模块也不是频繁地要求CPU对其服务。
因此,通常采取一种让众多外围设备模块共享1个CPU,并且能够及时得到CPU服务的调度方法——中断。
一、 PIC16F87X的中断源PIC系列单片机是当今世界上很有影响力的精简指令集(RISC)微控制器,具有丰富的中断功能。
PIC中档单片机的中断总结对于来说,一次中断的过程大致有下列阶段:为了使得解释形象和直观,本文采纳一些诙谐的语句来比方解释:中断哀求---------比方成申请买经济适用房的哀求中断标记-------一份申请书本中断使能xxIE-----本单位领导PEIE-------------户口办公室主任GIE--------------银行的管理信贷的科长中断哀求:房子太少,儿子要结婚了,得买房了,可资源和财力有限,不能卖商品房,只好按特别状况处理,写一份申请书(中断标记位IF 置1);本单位领导xxIE看了之后,假如给你盖了一个戳:(即该中断使能位IE=1),那么恭喜你,这份申请书可以提交到更高一级的部门;假如没盖(xxIE= 0),那么对不起,先放我这里吧,等我们讨论讨论好后再说。
假如你不愉快,要拿回申请书撕掉,呵呵,那么IF=0;你的购房哀求之梦破灭;xxIE领导将按照户口,将这些哀求书给分类,一类是外地迁来的户口,提交给户口办公室PEIE主任审查,PEIE主任假如给你盖了个戳(PEIE= 1),那么,他将会把申请书提交给银行的GIE科长批准,否则就是放在这里再讨论讨论或者你要回归撕毁;一类是本地户口,可挺直提交给银行的GIE科长批准,然后你将申请书带到GIE科长的办公室。
GIE科长盖了章之后(GIE=1),然后,你就可以拿着申请书去找房地产商要房子了(此时PC指针=0004H),由于GIE科长有无数事情要做,所以他每盖了一次戳之后(注重是一次不是一个,由于大概有多个中断同时发生,也就是说有其他地方的人来请GIE盖戳),就在办公室门外挂了个牌子:请勿打搅。
他自己则歇息去了,直到接到RETFIE的电话或者有人打他的手机。
房地产商预备给房子了,不过你最好得先把各项手续给填好,叫5w押第1页共4页。
PIC单片机之中断程序
什么是中断程序呢?
形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。
烤地瓜这件事就好比中断程序,他中断了你看文章这件事。
在程序方面来说当CPU 在执行一个程序的时候,突然产生了中断事件CPU 就去执行中断程序了,当执行完成后CPU 又回来执行原先的程序。
中断事件
什么是中断事件,就是引起中断的事件。
对于单片机来说这些事件是多种多样的。
比如说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。
讲到中断不得不讲讲和中断相对的查询。
其实不管是按键按下还是时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。
比如你是经理如果你想知道属下任务完成了没有一种方式就是去询问属下,任务完成没有。
早上没完成,下午在问。
下午没完成第二天再问。
一直到完成为止这种方式就相当于查询的方式,另一种就是然属下完成任务好直接汇报,在下属执行任务的期间你无需去打挠下属,当下属任务完成后就第一时间向你汇报,这种方式就好像中断。
查询方式:缺点就是可能会大量浪费CPU 的时间,不断去查询。
如果事情
不多还好,可是一旦事情多了会明显感到运行速度变慢。
中断方式:可以用在对时间和响应速度有要求的场合。
具体有哪些事件会引起中断可以看
1,中断控制寄存器INTCON。
PIC18系列的低优先级中断入口地址在0x0018地址,下面的代码是在入口地址处放置一个向量函数,这个向量函数里就是一个内嵌汇编的GOTO指令,GOTO到低优先级的中断服务函数InterruptHandlerLow。
//----------------------------低优先级中断入口-----------------------------------1#pragma code InterruptVectorLow = 0x18 //用#pragma伪指令定义一个名字叫InterruptVectorLow的段,并把这个段放到0x18地址起始的代码空间2void InterruptVectorLow (void) //低优先级中断向量函数3 {4_asm5goto InterruptHandlerLow //内嵌汇编指令6_endasm7 }8#pragma code //这里不是多余的,它是告诉连接器回到默认的代码段,如果不加的话,连接器就会傻傻地把后面的代码紧跟着上面的代码一直放下去。
而LKR文件里定义了向量区最多到0x29地址,所以如果没加此行通常会报错910#pragma interruptlow InterruptHandlerLow //这里使用interruptlow这个关键词来声明InterruptHandlerLow这个函数是低优先级中断服务函数,用了关键词后,这个函数将会由编译器自动产生基本的现场保护,并且这个函数的返回将是使用RETFIE 返回的。
111213void InterruptHandlerLow (void)14 {15/* 低优先级服务函数的代码写在这里*/16 }PIC18系列的高优先级中断入口地址在0x0008地址,下面的代码是在这个入口地址处放置一个向量函数,这个向量函数里就是一个内嵌汇编的GOTO指令,GOTO到高优先级的中断服务函数InterruptHandlerHigh 。
PIC单片机中断系统详细汇总在PIC单片机中,中断系统的实现主要包括以下几个方面的内容:1.中断向量表:PIC单片机中的中断系统采用了向量表的形式来管理不同类型的中断。
向量表是一个存放中断服务子程序入口地址的表格,当中断发生时,单片机根据中断号在向量表中查找相应的中断服务子程序入口地址,并跳转到该地址处执行相应的操作。
2.中断优先级:PIC单片机中的中断系统支持多级中断优先级。
不同的中断可以设置不同的优先级,当多个中断同时发生时,系统会根据优先级的设置,优先处理优先级较高的中断,从而保证重要的中断不会被忽略。
3.中断源:PIC单片机支持多个中断源,包括外部中断(外部引脚上的信号触发的中断)、定时器中断(由定时器溢出或比较事件触发的中断)和串口中断(由串口接收/发送数据触发的中断)等。
每个中断源都有对应的中断标志位,当中断发生时,对应的中断标志位会被设置,以便主程序判断中断类型并做出相应的处理。
4.中断使能和屏蔽:PIC单片机中的中断系统提供了中断使能和屏蔽的功能。
通过设置相应的中断使能和中断屏蔽寄存器的位,可以控制一些中断源的中断是否启用,以及在一些中断源触发中断后,是否允许继续触发该中断。
5.中断服务子程序:PIC单片机的中断系统需要用户自行编写中断服务子程序来处理中断事件。
中断服务子程序是一个与主程序独立的子程序,它会在中断发生时被自动调用,并执行特定的操作。
在编写中断服务子程序时,需要注意子程序的实时性和占用资源的情况,以确保中断的及时响应和系统的稳定性。
6.中断处理流程:PIC单片机中的中断处理流程可以简单描述为:当中断发生时,系统会根据中断号在中断向量表中查找相应的中断服务子程序入口地址,并跳转到该地址处执行中断服务子程序。
在中断服务子程序中,可以对中断事件进行处理,清除中断标志位,并在需要的情况下触发其他操作,比如发送数据、修改相关寄存器等。
当中断服务子程序执行完毕后,系统会自动返回到主程序的执行流程中,继续执行之前的任务。
PIC单片机多中断处理技术的应用与研究
关键字:PIC单片机多中断处理技术
引言
PIC系列单片机中断源已经达到14个.可谓相当丰富;但同时也带来了一些难题:在处理多中断时不具备处理“高级优先处理”能力的问题,如此多的中断源在处理时很容易产生中断冲突,如何有效的处理中断到达时的时序,其算法应该如何实现成了首先需要解决的问题。
1 中断处理技术
对于PIC系列单片机,其设计上虽然有很多中断,但是并没有规定中断的优先级。
当遇到中断的时候,不做任何判断,而是先把指针指向0004H(中断起始地址),至于接下来如何操作则完全交给用户“软处理”完成。
其中断时序图如下:
图1 INT引脚中断时序图
中断现场的保护是中断技术中一个很重要的环节。
对于PICl6F87X单片机,在进人中断服务程序期间,只有返回地址,即程序计数器Pc的值被自动压入硬件堆栈;而在中断处理程序中,一般必须像使用WReg、STATUS等寄存器一样,在中断处理程序开始处,就备份这些寄存器的内容,即进行所谓的现场保护。
PICl6F87X子系列单片机具备的中断源多达14种,中断矢量只有1个,并且各个中断源之间也没有优先级别之分,不具备非屏蔽中断。
PIC单片机中采用的是硬件堆栈结构,不占用程序存储器空间,也不占用数据存储器空间,同时也无需用户去操作堆栈指针;但同时也就决定了它不具备其他单片机指令系统中的压栈(PUSH)和出栈(POP)指令。
实现中断现场保护时,不能用堆栈来实现,而是通过变量的复制备份来实现。
一般的实现办法是:先确定要保护的现场,一般包括WReg、STATUS等寄存器的内容,然后在各个页都定义与这些寄存器对应的变量。
以备份现场。
发生中断时,在中断处理代码开始处先将这些现场寄存器内容复制到备份变量,退出中断处理时再复制回去恢复现场:
2 基于PICl6F87X单片机的频率计设计
随着电子技术的迅速发展,以单片机为控制核心的控制器件,已经全面渗透到测试仪器和计量检定的各个方面。
同时,频率计作为一种常用工具,在工程技术和无线电测量、计量等领域的应用十分广泛。
设计的频率计主要用来测量脉冲频率。
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 CPU外接示意图
2.2 程序设计
(1)主程序
主程序流程图。
图3主程序流程图
(2)中断程序
中断程序流程图。
图4中断子程序流程图
3 多中断处理注意的问题
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响应中断。
以避免中断返回时跳转到不希望的地址上去。
4 结束语
灵活地应用中断,不但可以大量的节省CPU资源,而且能够使程序更加简化.具有更高的实时性和稳定性。
经过测试,这种频率计具有测量准确度高、使用方便、稳定可靠的优点,
可应用于计量测试领域。
同时由于使用软件控制,电路结构简单,使用硬件少,使得成本低廉且携带方便,因此也可广泛应用于工农业生产和居民生活中,具有推广价值。
本文作者创新:频率计是基于PICC高级语言开发平台,采用PICl6F87X单片机,该方案具有原理简单.性能可靠、分辨率高特点,使用该方法测量低频频率时最少可以得到8位有效数字。
它采用LCD图形液晶显示,清晰度高,可视范围广,可外接晶体频率源,具有测量速度快、分辨率高的优点。
本方案已在单片机课程相关教学中应用。