1 PIC 单片机 简介
PIC系列 单片机 是美国Microchip技能公司推出的高性能价格比的8位嵌入式操控器(Embedded Controller),它选用了精简指令集计算机RISC(Reduced InstrucTIon Set Computer)和哈佛(Harvard)双总线以及两级指令流水线结构。具有高速度、低作业电压、低功耗等特色和优秀的性能价格比,因此PIC系列单片机越来越遭到单片机开发与运用工程技能人员的喜爱。该系列一起的结构和中止资源使其在运用时与其它系列的单片机有许多不同之处。下面以PIC16CXX系列微操控器为例来介绍PIC系列单片机的中止资源特色以及运用办法。
2 中止资源的开发与屏蔽
另一类是外围接口中止,包含定时器TMR1溢出中止、TMR溢出或匹配中止、同步串行口中止、异步串行口中止、并行从动口中止和CCP(Capture/Compare/PWM)中止等,而带A/D功用的PIC16C7X系列微处理器还有A/D转化完结中止。这些中止的答应位分别在PIE1和PIE2寄存器,而中止标志则分别在PIR1和PIR2中。
一切的中止都有自己的中止答应位和中止标志,外围接口中止不只受各自的中止答应位操控,一起还一起受外围中止操控答应位的操控。大局中止答应位GID能够操控一切的中止。不论大局中止答应位GIE和相应的中止答应位状况怎么,只需满意中止条件,各个中止标志位都会被置1。与其它微处理器不同的是:当CPU呼应中止时大局中止答应闰GIF会主动被清零,中止标志位不能用硬件清零而只能用软件清零;当履行中止回来指令RETFIE时,大局中止答应位GIE会被主动置1而从头敞开中止。因此,在从头敞开中止之前要用软件清零有关的中止标志位,以防止发生不断地中止请求而重复进入中止。因为大局中止答应位GIE会被中止服务程序(RETFIE指令)主动置1,因此用软件清零GIE并不牢靠,这一点要特别注意。用下面的程序可保证整个中止被制止。
LOOP BCF INTCON,GIE ;制止整个中止
BTFSC INTCON,GIE ;判别大局中止是否被制止
GOTO LOOP ;否,从头清零
持续
关于外部中止事情,例如:INT引脚中止和RB口引脚电平改动中止等为边缘触发,因此,CPU在呼应中止时对外部信号的要求并不严苛。一般情况下,中止花费的时刻需求3或4个指令周期,切当时刻取决于中止事情发生的时刻而与指令自身的周期数无关。
3 中止的优先级
PIC系列 单片机 只需一个中止进口(004H),一切的中止都通过该进口进入中止服务子程序,至所以哪一个中止源,只需在进入中止服务子程序后查询中止标志才干承认。该单片机没规则中止的优先级,也没有用于设定中止优先级的寄存器,中止的优先级是因为中止服务子程序中止查询中止标志的次序确认的。CPU呼应一个中止并进入中止服务程序后,大局中止答应位GIE被主动清零,CPU在此期间不呼应其它中止,也不能构成中止嵌套。因此,在运用中止时要合理组织查询中止标志的次序,尽量缩短CPU在中止服务程序中停留的时刻。在用PIC系列单片机构成体系时应尽量削减中止源的个数,关于那些履行时刻较长且不需选用中止方法来处理的事情,应尽量采和查询标志的方法进行处理;关于那些有必要选用中止方法处理的事情,在中止服务程序中要尽量先查询对体系至关重要的事情的中止标志。别的,在退出中止服务程序时,只铲除处理过的中止标志即可,而不需求将一切的中止标志铲除。关于RB口电平改动中止,一方面要保存RB口每次改动后的状况,以便在下次中止时判别是哪根口线上的电平发生了改动;另一方面能够设置发生中止的口线标志,并将因为该中止而未履行的程序在中止服务程序外通过查询口线标志来履行,以削减CPU在中止服务程序中停留的时刻。
4 程序跨页时的中止处理
PIC系列 单片机 的程序存储空间是分页处理的,每页空间的巨细为512字节到4k字节不等。页程序计数器PC是一个13位宽的增量寄存器,其低8位PCL是一个可读/写寄存器,其高字节PCH(有用位为5位)不能直接进行读/写操作,它通过一个8位维护寄存器PCLATH把高5位地址传递给程序计数器的高字节。当一个中止被呼应时,PC中的断点地址主动被压栈(PUSH)维护;而当履行RETFIE指令时,仓库中的断点地址回弹到(POP)程序存储器PC中。不论是压栈操作仍是出栈操作,它们都不影响PCLATH寄存器的内容。一起,CPU呼应中止并跳转到中止进口地址时,都只能在本页内跳转而不影响PLCATH寄存器的内容。别的,在中止进口组织的是GOTO句子,而GOTO句子也只能在本页跳转。当中止服务程序寄存在程序存储器的第一页且CPU在履行非第一页内程序时,呼应中止将导致中止进口地址和中止回来地址过错而引起程序紊乱。下面以PIC16C65A来阐明这个问题的处理办法。
PIC16C65A的片内程序存储器为4k,分为两页,每页2k。假定中止服务程序寄存在第一页(0000H-07FFH),一般这样做是因为中止进口地址在第一页,因此能够削减程序量)。那么,详细程序如下:
ORG 0000H
0000H GOTO START
ORG 0004H
0004H GOTO PRO-INT
ORG 0005H
0005H START ……
0234H PRO-INT……
RETFIE
通过汇编程序编译可知,在程序存储器0004H单元寄存的代码是2A34H,当CPU在程序存储器第一页呼应中止时,程序先跳到0004H,然后跳到0234H履行,正常进入中止,履行完后能正常回来。当CPU在程序存储器第二页呼应中止时,因为PCLATH的D4D3(页挑选位)为01,CPU4履行“GOTO PRO-INT”时的代码虽然是2A34H,但程序不是跳到0234H履行,而是跳至0A34H履行。明显,程序履行过错。
处理这一问题的方面是在程序存储器0A34H处组织一段程序,在中止程序结束时判别CPU呼应中止时程序所在的方位,从而使程序依据该信息合理设置页挑选位,然后再回来中止。
ORG 0A34H
BSF RAM,b ;设置在程序履行到第二页时CPU呼应中止的标志
BCF PCLATH,3 ;将PC切换到第一页
GOTO PRO-INT ;程序跳转到中止服务程序
在指令RETFIE前应添加的程序如下:
BTFSC RAM,b ;判别CPU呼应中止前程序所在方位
BSF PCLATH,3 ;设置页挑选位
RETFIE
以上程序中的RAM是一个内存单元,b是该单元的某一位,该位在程序初始化时清零,CPU在履行程序存储器第二页的程序并呼应中止时该方位“1”。通过上述处理,CPU不论在程序存储器第一页仍是第二页呼应中止,都能正确进入中止服务程序并能正确回来中止前的地址。
5 运用中止唤醒CPU
PIC系列 单片机 具有休眠(SLEEP)省电作业形式,当履行一条SLEEP指令后,芯片就进入低功耗休眠形式。进入休眠状况后,主振荡器中止作业,此刻芯片耗费的电流极低(在3V作业电压,32kHz时钟时典型值约1μA),这一特色关于电池供电的体系十分有利。运用中止能够将CPU从休眠状况唤醒。这些中止源包含外部INT引脚中止、RB口引脚电平改动中止和部分外围接口中止。用于唤醒休眠状况的CPU外围接口中止有:作业在异步计数器方法下的TMR1中止、SSP开始/中止位检测中止、CCP捕捉方法中止和从动并行口读写中止。其它外围接口中止因需求片内Q时钟而无法发生中止。
运用中止事情唤醒CPU与大局中止答应位GIE无关,恣意一个中止答应方位1的中止源,只需发生中止就会将相应的中止标志置1,芯片将立入中止服务程序与大局中止答应位GIE的状况和紧接SLEEP指令后的那条指令有关。因为PIC系列 单片机 选用了两级指令流水线结构,在履行SLEEP指令时,下一条指令已预先取出,因此在GIE位为0时,芯片被唤醒后首要履行预先取出的那条指令;假如GIE位为1,则芯片被唤醒后履行预先取出的那条指令后紧接着转入中止进口地址再履行中止服务程序。在这种情况下,应在SLEEP指令后组织一条空操作指令NOP,以便CPU被唤醒后能当即进入中止服务程序。
总归,PIC系更 单片机 是一种性能价格比很高的微操控器,正确、合理地运用其中止资源能够使体系愈加完善,作业愈加安稳。