
PIC单片机的中断资源及应用.doc
6页PIC单片机的中断资源及应用类别:单片机/DSP作者:合肥电子工程学院李小波 刘春生 來源:《国外电了元器件》摘要:PIC系列单片机是美国Microchip技术公司推出的8位嵌入式控制器 它以其控制速度高、工作电压低、功耗小及性价比高等优点而备受青睐本文以 PIC16CXX系列单片机为例介绍了 PIC单片机中断资源的特点、应用及应用中应 注意的问题,并给出了具体的应用源程序关键词:PIC单片机小断资源中断源唤醒1 PIC单片机简介P1C系列单片机是美国Microchip技术公司推出的高性能价格比的8位嵌入 式控制器(EmbeddedController),它采用了精简指令集计算机RISC (ReducedInstruction Set Computer)和哈佛(Harvard)双总线以及两级指令流水 线结构具有高速度、低工作电压、低功耗等特点和优良的性能价格比,I大I而 PIC系列单片机越来越受到单片机开发与应用工程技术人员的青睐该系列独特 的结构和中断资源使其在使用时与其它系列的单片机有许多不同之处下面以 PIC16CXX系列微控制器为例來介绍PIC系列单片机的中断资源特点以及应用方 法。
2中断资源的开发与屏蔽图1是PIC16C64/64A/65/65A的中断逻辑电路图,其它型号芯睡的中断资源 也大致相同,只是资源多少不一而已,但它们的中断入口只有一个(入口地址在 004H)o P1C单片机的中断大致可以分为两类第一类是由中断控制器INTC0N直接控制的中断,包括外部引脚中断INT 的RB 口电平变化中断以及定时器TMR0溢出中断,它们的中断允许位和中断标志 都在1NTC0N寄存器中引脚中断INT和定时器TMRO溢出中断与其它微处理器相 同RB 口电平变化中断是P1C单片机特冇的中断,当把RB 口高4位1/0 口线设 置为输入时,只要这4位I/O 口线上的电平发生变化就会引起中断RB 口的电平 中断特性对用户是非常'有用的用户可以直接利用这些口线的关键部位进行电平 检测,并可利用中断进行保护性控制等操作;另一方面,电平中断特性还可以利 用RB I」的软件控制弱上拉特性组成一个矩阵键盘,并用按键唤醒CPU,这对于 那些以电池供电的系统特别有用另一类是外围接口中断,包括定吋器TMR1溢出中断、TMR溢出或匹配中断、 同步串行口中断、异步串行口中断、并行从动口中断和CCP (Capture/Compare/PWM)中断等,而带A/D功能的P1C16C7X系列微处理器述冇 A/D转换完成中断。
这些中断的允许位分别在PIE1和PIE2寄存器,而中断标志 则分别在PIR1和PIR2中所冇的中断都冇自己的中断允许位和中断标志,外围接口中断不仅受各自 的中断允许位控制,同时还共同受外围中断控制允许位的控制全局中断允许位 GID能够控制所有的中断无论全局中断允许位GIE和相应的中断允许位状态如 何,只要满足中断条件,各个中断标志位都会被置1与其它微处理器不同的是: 当CPU响应中断时全局中断允许闰GIF会口动被清零,中断标志位不能用硬件清 零而只能用软件清零;当执行中断返回指令RETFIE时,全局中断允许位G1E会 被自动置1而重新开放中断因此,在重新开放中断之前要用软件清零有关的中 断标志位,以避免产生不断地中断请求而反复进入中断由于全局中断允许位 GTE会被中断服务程序(RETFTE指令)自动置1,因此用软件清零GIE并不可靠, 这一点要特别注意用下血的程序可确保整个中断被禁止LOOP BCF INTCON, GIE ;禁止整个中断BTFSC TNTCON, GTE;判断全局中断是否被禁止GOTO LOOP ;否,重新清零……;继续对于外部中断事件,例如:INT引脚中断和RB 口引脚电平变化中断等为边 沿触发,因此,CPU在响应中断时对外部信号的要求并不苛刻。
一般情况下,中 断花费的时间需耍3或4个指令周期,确切时间取决于中断事件发生的时刻而与指 令本身的周期数无关7W21FBS2IECCPilF ccpiieCCP21FCChlEniFTX】E3中断的优先级TORilF- TWiIE-muRCIE-SSPIF- SSPIB-JPSPIF- PSPIE-图1 PIC16C64/64A/65/65A的中斯逻耕电路图PIC系列单片机只有一个中断入口 (004H),所有的中断都通过该入口进入 中断服务子程序,至于是哪一个中断源,只有在进入中断服务子程序后查询中断 标志才能确认该单片机没规定中断的优先级,也没冇用于设定中断优先级的寄 存器,中断的优先级是由于中断服务了程序中断杳询中断标志的顺序确定的CPU 响应一个中断并进入中断服务程序后,全局中断允许位G1E被自动清零,CPU在 此期间不响应其它中断,也不能形成中断嵌套因此,在使用中断时要合理安排 查询中断标志的顺序,尽量缩短CPU在中断服务程序中逗留的吋间在用PIC 系列单片机构成系统吋应尽量减少中断源的个数,对于那些执行吋间较长且不需 采用中断方式来处理的事件,应尽量采和查询标志的方式进行处理;对于那些必 须采用中断方式处理的事件,在中断服务程序中要尽量先查询对系统至关重要的 事件的中断标志。
另外,在退出中断服务程序时,只清除处理过的中断标志即可, 而不需要将所有的中断标志清除对于RB 口电平变化中断,一方面要保存RB 口每次变化后的状态,以便在下次中断时判断是哪根口线上的电平发生了变化; 另一方面可以设置产生中断的I」线标志,并将由于该中断而未执行的程序在中断 服务程序外通过查询口线标志来执行,以减少CPU在中断服务程序中逗留的时 间4程序跨页时的中断处理PIC系列单片机的程序存储空间是分页处理的,每页空间的大小为512字节 到4k字节不等页程序计数器PC是一个13位宽的増量寄存器,其低8位PCL是 一个可读/写寄存器,其高字节PCI1 (有效位为5位)不能直接进行读/写操作, 它通过一个8位保护寄存器PCLATH把高5位地址传递给程序计数器的高字节当 一个中断被响应时,PC中的断点地址口动被压栈(PUSH)保护;而当执行RETFIE 指令吋,堆栈中的断点地址冋弹到(POP)程序存储器PC中无论是压栈操作还 是出栈操作,它们都不影响PCLATH寄存器的内容同时,CPU响应中断并跳转 到中断入口地址时,都只能在木页内跳转而不影响PLCATII寄存器的内容另外, 在中断入口安排的是GOTO语句,而GOTO语句也只能在本页跳转。
当中断服务程 序存放在程序存储器的第一页口 CPU在执行非笫一页内程序时,响应中断将导致 中断入口地址和中断返回地址错误而引起程序混舌L下面以PIC16C65A来说明这 个问题的解决办法PIC16C65A的片内程序存储器为4k,分为两页,毎页2k假设中断服务程 序存放在第一页(0000H-07FFH),通常这样做是因为中断入口地址在第一页,因 而可以减少程序量)那么,具体程序如下:***************ORG 0000HOOOOII GOTO STARTORG 0004H0004H GOTO PRO-TNTORG 0005H000511 START ……0234H PR0-1NTRETFIE通过汇编程序编译可知,在程序存储器0004H单元存放的代码是2A34H,当 CPU在程序存储器第一页响应中断时,程序先跳到0004H,然后跳到0234H执行, 止常进入中断,执行完后能止常返回当CPU在程序存储器第二页响应中断时, 由于PCLATH的D4D3 (页选择位)为01, CPU4执行“GOTOPRO-TNT"时的代码虽然是2A34H,但程序不是跳到0234H执行,而是跳至 0A34II执行。
显然,程序执行错误解决这一问题的方面是在程序存储器0A34H处安排一段程序,在中断程序 结束时判断CPU响应中断时程序所处的位置,从而使程序根据该信息合理设置页 选择位,然后再返回中断ORG 0A34HBSF RAM, b ;设置在程序执行到第二页时CPU响应中断的标志BCF PCLATH, 3 ;将PC切换到第一页GOTO PRO-1NT;程序跳转到中断服务程序在指令RETFIE前应增加的程序如2BTFSC RAM, b ;判断CPU响应中断前程序所在位置BSF PCLATH, 3 ;设置页选择位RETFIE以上程序中的RAM是一个内存单元,b是该单元的某一位,该位在程序初 始化时清零,CPU在执行程序存储器第二页的程序并响应中断时该位置“1” 经过上述处理,CPU不管在程序存储器第一页还是第二页响应中断,都能正确进 入中断服务程序并能正确返回中断前的地址5利用中断唤醒CPUPIC系列单片机具有休眠(SLEEP)省电工作模式,当执行一条SLEEP指令 后,芯片就进入低功耗休眠模式进入休眠状态后,主振荡器停止工作,此吋芯 片消耗的屯流极低(在3V工作电压,32kHz时钟时典型值约lu A),这一特点对 于电池供电的系统非常有利。
利用中断可以将CPU从休眠状态唤醒这些中断 源包括外部INT引脚中断、RB 口引脚电平改变中断和部分外围接口中断用于 唤醒休眠状态的CPU外围接口中断有:工作在异步计数器方式下的TMR1中断、 SSP起始/停止位检测中断、CCP捕捉方式中断和从动并行口读写中断其它外 围接口中断因需要片内Q时钟而无法产生中断利用中断事件唤醒CPU与全局中断允许位GIE无关,任意一个中断允许位 置1的中断源,只要产生中断就会将相应的中断标志置1,芯片将立入中断服务程 序与全局中断允许位GTE的状态和紧接SLEEP指令后的那条指令有关由于PTC 系列单片机采用了两级指令流水线结构,在执行SLEEP指令时,下一条指令已预 先取出,因此在G1E位为0时,芯片被唤醒后首先执行预先取出的那条指令;如 果GIE位为1,则芯片被唤醍后执行预先取出的那条指令后紧接着转入中断入口 地址再执行中断服务程序在这种情况下,应在SLEEP指令后安排一条空操作指 令NOP,以便CPU被唤醒后能立即进入中断服务程序总之,PTC系更单片机是一种性能价格比很高的微控制器,正确、合理地 使用其中断资源可以使系统更加完善,工作更加稳定。
