打印

PIC的中断入口

[复制链接]
18339|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yewuyi|  楼主 | 2009-5-24 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在PIC的一些中、低端型号中,往往只有一个中断函数入口,而且没有中断优先级,这对于很多在学校学习89C51核出来的学生,往往给他们带来一定的学习障碍。

1、PIC中档MCU的中断入口固定为ROM首叶的0X0004地址,无论发生什么样的中断,应用程序都将被打断并跳转到这个地址去执行相关的中断处理函数。
2、在51系列中,中断源的区分是由硬件完成的,但在PIC上,这个需要工程师自己通过软件去判断。
3、因为只有一个中断入口,所以也没有51那样的两级中断优先级,具体何种中断源应该优先执行完全由工程师自己的软件确定,这是通过中断函数中的中断源查询代码的顺序决定的,可以把这个概念称呼为软件优先级。
4、PIC的中断结构决定了PIC一般不考虑中断嵌套,假使现在正在处理软件优先级中低优先级的中断源,即使此时产生更高优先级的中断,一般也必须处理完毕后退回MAIN函数后再次响应进入,这是因为响应中断后,MCU硬件会自动关闭GIE标志位,这样其它中断请求就会被暂时挂起并在中断退出后立即响应,当然,此时发出的中断请求标志在被响应前将会一直被保持。
5、因为PIC中端MCU采用的是全硬件堆栈,没有数据堆栈,所以,关于中断现场保护也完全交给工程师自由把握,所以进入中断后惟一办法就是把需要保护的数据保存到RAM中进行备份,中断退出时再给予恢复,至于那些积存器需要被保护,这完全取决于工程师,一般来说,W、STATUS、PCLATH、FSR是必须的,其它需保护的内容取决于工程师在中断函数将会使用到哪些变量,并且这些变量在其它函数中也确定有使用记录。对于代码超过2K的程序,PCLATH是必须的,否则可不考虑它的保存,这是因为PC本身可保证2K以内的寻址空间,而PC是由硬件自动压栈到硬件堆栈中去了。
6、一个中断入口不代表只能处理中断源,通过上面的描述,我们可以清楚的了解,其实事情很简单,其道理就是:多个中断源对着一个中断入口,当发生某一个中断时将转想中断入口,处理完毕后退出,如果发生别的中断,还是从这个入口进去。
7、如何写一个可靠的中断函数是一个麻烦,当然这是针对ASM而言,如果你使用PICC,那么C编译器会自动帮你处理掉大多数问题,但有关中断源的查询写法还是要注意一下的,这点你可以自己搜索网络**,网络有很多地方可提供张明峰先生那本入门书中有关PICC的那个独立章节,那里面把最基本、最关键的问题都讲过了,请自行查阅。
8、祝大家愉快的使用MCHP的产品,并提请大家关注MCHP新推出的PIC16F1XXX系列,这个是PIC16的增强版,确实做了很多的改善。
9、最后一条是广告:呵呵,MCHP的模拟产品其实很不错,不管是价格和性能都非常不错,建议大家给予关注,也算是对我打了这么多字的一种回馈!
沙发
NE5532| | 2009-5-24 11:22 | 只看该作者

这是我见过的最糟糕的中断系统。

T0还关不断,T1的中断判断还得换页。太难用了!还是51好,最好的是东芝!

使用特权

评论回复
板凳
sz_kd| | 2009-5-24 11:34 | 只看该作者

呵呵,SONIX的中断也好用,想怎么关就怎么关,不用换页

使用特权

评论回复
地板
McuPlayer| | 2009-5-24 13:32 | 只看该作者

叶公写的不错

又复习了一遍PIC

使用特权

评论回复
5
yewuyi|  楼主 | 2009-5-24 13:52 | 只看该作者

这是给那许MM上课的,哎。。。

她不好好看书,害的我要码这么多字。



下次再不好好看书,就要打屁股啊打屁股。。。

使用特权

评论回复
6
machunshui| | 2009-5-24 15:40 | 只看该作者

能否透露PIC16F1XXX价格几许?

能否透露PIC16F1XXX价格几许?

使用特权

评论回复
7
yewuyi|  楼主 | 2009-5-24 16:06 | 只看该作者

暂时还没得到公开的价格信息

我个人猜测不会不同类型的PIC16FXXX价格高,根据以前的私下说法,应该有15%的COST DOWN,但MCHP的价格政策鲜明,那就是有量才有价格,呵呵,真有量的客户可向MCHP申请到很好的价格。

使用特权

评论回复
8
lifengtao| | 2009-5-25 09:44 | 只看该作者

不错~

温故知新

使用特权

评论回复
9
许世霞| | 2009-5-26 14:59 | 只看该作者

嘿嘿;。。。

     才看到前辈码的这么多字!!谢谢您了!辛苦您了!喝杯茶吧!!学了好多呵呵。告诉前辈我听您的话已经网购了那本传说中的入门书。过几天能到吧!非常感谢前辈了!大人不计小人过!!看来我还得尝试些其他类型的单片机选个简单的学学嘿嘿。。估计前辈又要骂我了!呵呵。。。

使用特权

评论回复
10
XIEYUANBIN| | 2009-5-26 17:09 | 只看该作者

最简单的莫过于PIC了

PIC指令只有30多条,效率极高,不像别的单片机,位操作都有几十条不同的

使用特权

评论回复
11
NE5532| | 2009-5-27 16:35 | 只看该作者

最难也莫过于PIC了

30条指令,简化得连个位传送都做不了,跳来跳去的,烦啊!还是51好。

使用特权

评论回复
12
mikezhong| | 2009-5-28 00:11 | 只看该作者

OK

我也说说.

如果用汇编换页确实是麻烦,虽说用久了也没有什么,但不用换页的总好点吧.PIC指令少确实是很久不方便.

现在台系的指令集很多比PIC的好多啦....

使用特权

评论回复
13
许世霞| | 2009-5-28 09:49 | 只看该作者

我再问个弱智的问题!

   那用C编写的时候是不实际不用考虑翻页?

使用特权

评论回复
14
yewuyi|  楼主 | 2009-5-28 20:07 | 只看该作者

用C不需要考虑PAGE问题

编译器自动处理。

用C需要稍微处理一下BANK问题,就是在定义的时候需要加关键字指定把变量定义到哪个BANK中去,如果没有加关键字指定,那就默认在BANK0,变量使用的时候也不需要管BANK的切换,这个也由C编译器自动处理了。

所以用C除了定义变量的时候可能需要加个关键字外,其他基本没啥了。。。

使用特权

评论回复
15
李冬发| | 2009-5-28 20:51 | 只看该作者

无比难用的一个系统。

使用特权

评论回复
16
jack.king| | 2009-5-28 23:01 | 只看该作者

呵呵!对了怎么去算中断时间。呵呵!我想个定时的玩意

使用特权

评论回复
17
许世霞| | 2009-5-29 09:06 | 只看该作者

呵呵。。。

   那为什么有的人还用汇编语言呢?(似乎曾经问过这个问题)
    
    jack.king前辈这个我好像有办法呵呵。。当你编译程序通过后。
     select->debugger菜单-》sim仿真
     然后select->还是方面的那个菜单里的Stopwatch设断点就能测时间了!
    不知我说的这样是不是您要的呢

使用特权

评论回复
18
McuPlayer| | 2009-5-29 16:46 | 只看该作者

用汇编说明他精力旺盛

而且不怕移植的辛苦

使用特权

评论回复
19
yewuyi|  楼主 | 2009-5-29 19:37 | 只看该作者

在PIC16F5X PIC10F PIC12F这样的产品时

ASM时更好的选择,以为这些CHIP本来就是为那些资源要求较少,比较低端的应用,所以。。。


但我想大家对这样的应用应该兴趣不大了吧。。。


定时应该用定时器去完成,算指令的方法是头疼的方法,反对之。。。

使用特权

评论回复
20
jack.king| | 2009-5-31 15:31 | 只看该作者

呵呵!买了本书入门的书看了下很好

呵呵!买了本书入门的书看了下很好!
谢谢你许世霞你的方法!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1416

主题

20007

帖子

232

粉丝