12345下一页
返回列表 发新帖我要提问本帖赏金: 3.00元(功能说明)

PIC的中断入口

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

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

她不好好看书,害的我要码这么多字。<br /><br /><br /><br />下次再不好好看书,就要打屁股啊打屁股。。。
machunshui 发表于 2009-5-24 15:40 | 显示全部楼层

能否透露PIC16F1XXX价格几许?

能否透露PIC16F1XXX价格几许?<br /><br />
 楼主| yewuyi 发表于 2009-5-24 16:06 | 显示全部楼层

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

我个人猜测不会不同类型的PIC16FXXX价格高,根据以前的私下说法,应该有15%的COST&nbsp;DOWN,但MCHP的价格政策鲜明,那就是有量才有价格,呵呵,真有量的客户可向MCHP申请到很好的价格。<br /><br />
lifengtao 发表于 2009-5-25 09:44 | 显示全部楼层

不错~

温故知新
许世霞 发表于 2009-5-26 14:59 | 显示全部楼层

嘿嘿;。。。

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;才看到前辈码的这么多字!!谢谢您了!辛苦您了!喝杯茶吧!!学了好多呵呵。告诉前辈我听您的话已经网购了那本传说中的入门书。过几天能到吧!非常感谢前辈了!大人不计小人过!!看来我还得尝试些其他类型的单片机选个简单的学学嘿嘿。。估计前辈又要骂我了!呵呵。。。
XIEYUANBIN 发表于 2009-5-26 17:09 | 显示全部楼层

最简单的莫过于PIC了

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

评论

指令系统你没入门!  发表于 2024-12-15 17:53
NE5532 发表于 2009-5-27 16:35 | 显示全部楼层

最难也莫过于PIC了

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

打赏榜单

kingTek 打赏了 3.00 元 2024-12-15
理由:说的客观公正!

mikezhong 发表于 2009-5-28 00:11 | 显示全部楼层

OK

我也说说.<br /><br />如果用汇编换页确实是麻烦,虽说用久了也没有什么,但不用换页的总好点吧.PIC指令少确实是很久不方便.<br /><br />现在台系的指令集很多比PIC的好多啦....

评论

正解,PIC完美地演绎了西方人木讷刻板的负能量面,代表性的就是那个BANK号!  发表于 2024-12-15 17:40
许世霞 发表于 2009-5-28 09:49 | 显示全部楼层

我再问个弱智的问题!

&nbsp;&nbsp;&nbsp;那用C编写的时候是不实际不用考虑翻页?
 楼主| yewuyi 发表于 2009-5-28 20:07 | 显示全部楼层

用C不需要考虑PAGE问题

编译器自动处理。<br /><br />用C需要稍微处理一下BANK问题,就是在定义的时候需要加关键字指定把变量定义到哪个BANK中去,如果没有加关键字指定,那就默认在BANK0,变量使用的时候也不需要管BANK的切换,这个也由C编译器自动处理了。<br /><br />所以用C除了定义变量的时候可能需要加个关键字外,其他基本没啥了。。。
李冬发 发表于 2009-5-28 20:51 | 显示全部楼层

无比难用的一个系统。

  
jack.king 发表于 2009-5-28 23:01 | 显示全部楼层

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

  
许世霞 发表于 2009-5-29 09:06 | 显示全部楼层

呵呵。。。

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

评论

真懂汇编的可以说具备碾压性优势!  发表于 2024-12-15 17:55
McuPlayer 发表于 2009-5-29 16:46 | 显示全部楼层

用汇编说明他精力旺盛

而且不怕移植的辛苦
 楼主| yewuyi 发表于 2009-5-29 19:37 | 显示全部楼层

在PIC16F5X PIC10F PIC12F这样的产品时

ASM时更好的选择,以为这些CHIP本来就是为那些资源要求较少,比较低端的应用,所以。。。<br /><br /><br />但我想大家对这样的应用应该兴趣不大了吧。。。<br /><br /><br />定时应该用定时器去完成,算指令的方法是头疼的方法,反对之。。。
jack.king 发表于 2009-5-31 15:31 | 显示全部楼层

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

呵呵!买了本书入门的书看了下很好!<br />谢谢你许世霞你的方法!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1416

主题

20007

帖子

233

粉丝
快速回复 在线客服 返回列表 返回顶部