佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1474|回复: 11

877a interrupt 的问题

[复制链接]
发表于 9-11-2007 05:43 PM | 显示全部楼层 |阅读模式
我想问关于 interrupt 的问题。。。
其实我不是很明白 interupt 是什么作用的。。。
各位大大可以解释吗?  
是不是像一个 program 在 run 时,那个program可以停下来 serve 另外一个 program?
877a 的 portA 是不是 interrupt 来的?
回复

使用道具 举报


ADVERTISEMENT

发表于 9-11-2007 06:23 PM | 显示全部楼层
原帖由 jason86 于 9-11-2007 05:43 PM 发表
我想问关于 interrupt 的问题。。。
其实我不是很明白 interupt 是什么作用的。。。
各位大大可以解释吗?  
是不是像一个 program 在 run 时,那个program可以 ...


呵呵!那我就以人类生活中的方式来解释下。
比如说你今天在家里没事做,心情很好,就随手拿起了一本书。 当你看到一半的时刻,你老爸就出现了,:@ 他来告诉你说:“嘿!小子,快去跟我买包香烟回来,不然今晚你没饭吃”。哇!这时候你就没办法啦,因为是你老爸嘛。 你只好在书里放个书签,用笔打个勾勾。在心不甘,情不愿的情况下,咚!咚! 咚! 的, 你就去买了包香烟。回来后你又接着从你之前放了书签与打勾勾的那里继续往下看。

所以中断就是处理突发事件后,继续你刚才被事件中断程序。

PORT-A 不是中断,可是它有ADC中断的功能(欲知详情,请参阅datasheet)

中断有分内部中断,与外部中断。中断如 Timer 中断,Watchdog Timer 中断,RB0/INT外部中断,ADC中断,USART中断,Synchronous Serial Port 中断,EEPROM Write Operation 中断 等等。

[ 本帖最后由 rothmans 于 9-11-2007 06:35 PM 编辑 ]
回复

使用道具 举报

发表于 9-11-2007 06:41 PM | 显示全部楼层
interrupt 也有software 和 hardware.
以motorola 来说, hardware interrupt 有
NMI , IRQ , FIRQ 等。
NMI 是最重要, 就是不管在做什么, 还是你 interrupt 得 flag 是什么, 他都跳去那个 address , 跳之前, 会把目前PC , ACC A , B 等都 stack 起来。 比如拿来做火警, 如果 NMI 得 PIN 被 ground 了, 那么正在执行的马上被stack , 然后就跳入火警的 function. 执行晚了, 就要return from interrupt.继续之前的东西。
IRQ 和 FIRQ 都要看 interrupt flag. 用了要记得clear. 就好像上厕所, 上了没冲水, 谁人敢用? FIRQ stack 比较少东西,stack 几个重要的罢了。
回复

使用道具 举报

 楼主| 发表于 9-11-2007 06:49 PM | 显示全部楼层

回复 #2 rothmans 的帖子

你的例子好好哦。。。
我明白你要讲什么了。。。
那么如果说用 RB0/INT外部中断,那么在 asm 方面就是先要activated int 咯?
PIC 说你的 asm 超强。。。
那么就要请教你了。。。
如果要用RB0/INT外部中断,那么怎样activated呢?
是不是不管在什么情况下,一旦RB0 有input, 整个程序就跳去另外一个program 了?
谢谢教导了...
回复

使用道具 举报

发表于 9-11-2007 09:35 PM | 显示全部楼层
原帖由 jason86 于 9-11-2007 06:49 PM 发表
你的例子好好哦。。。
我明白你要讲什么了。。。

[quote]
那么如果说用 RB0/INT外部中断,那么在 asm 方面就是先要activated int 咯?

是的,你必须要让它激活。

PIC 说你的 asm 超强。。。


呵呵!pic版主这帽子也太高了  。

那么就要请教你了。。。。。。


不敢,一起研究,研究好了。

如果要用RB0/INT外部中断,那么怎样activated呢??


你必须先将 OPTION_REG 里的 INTEDG 设成输入为 "1" 或者是 "0", 发生中断。
然后 将 INTCON 里的 RBIF 设成 “0”,INTE 设成 “1”。
最后将 INTCON 里的 GIE 设成 “1”。就成了。

是不是不管在什么情况下,一旦RB0 有input, 整个程序就跳去另外一个program 了?


这要看你是设成输入为 "1" 或者是 "0", 发生中断咯!

其实 RB4 ~ RB7也是有外部中断功能的。它的操作方法是一但外部任何一支脚有变化都会产生中断( 即是说从 “0” 变 “1”或 相反都会发生中断)。

[ 本帖最后由 rothmans 于 9-11-2007 11:21 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 9-11-2007 10:19 PM | 显示全部楼层
你必须先将 OPTION_REG 里的 INTEDG 设成输入为 "1" 或者是 "0", 发生中断。
然后 将 INTCON 里的 RBIF 设成 “0”,INTE 设成 “1”。
最后将 INTCON 设成 “1”。就成了。


其实你有没有一个asm 的例子可以给我参考啊?
就像一旦 RB0 有interrupt,那么程序就停止,interrupt 会 turn on portD
我现在大概大概知道你说什么,如果有例子那么我会更明白咯。。。
谢谢了
回复

使用道具 举报

Follow Us
发表于 9-11-2007 10:38 PM | 显示全部楼层

回复 #6 jason86 的帖子

什么是interrupt?
好比电话, 有来电时, 就会响铃, 铃声就是interrupt,响铃时, 你知道了, 放下工作去听电话,听完就回去继续工作。(较复杂, 但efficient)

如果电话没有铃声, 你要知道有没有来电, 你就要定时的把话筒拿起,听有无来电,放下话筒,继续工作, 这就是Polling。(简单,, 但不efficient)


拿I/O作例子, 来解释interrupt 和 polling.

当port b.0=1 时, count variable 就加1。

一般Polling 的方法。

  1. int count=0;

  2. void main()
  3. {

  4.    while(1)
  5.    {
  6.       // 当port b.0=1 时, count variable 就加1。     
  7.       if(input(pin_b0))
  8.       {
  9.          count++;
  10.       }
  11.       //do other code here
  12.       /*
  13.       ...
  14.       ...   
  15.       ...   
  16.       ...   
  17.     */        
  18.    }
  19. }
复制代码




使用interrupt的方法。

  1. //使用interrupt的方法。
  2. int count=0;

  3. // PortB0 µÄinterrupt routine
  4. #INT_EXT
  5. void ext_isr()
  6. {
  7.    //当port b.0=1 时, count variable 就加1。   
  8.    if(input(pin_b0))
  9.    {
  10.       count++;
  11.    }
  12. }

  13. void main()
  14. {

  15.    // Setup interrupt
  16.    ext_int_edge(L_TO_H);      
  17.    enable_interrupts(INT_EXT);
  18.    enable_interrupts(GLOBAL);

  19.   while(1)
  20.   {

  21.    // do your code here

  22.    }
  23. }
复制代码
回复

使用道具 举报

 楼主| 发表于 9-11-2007 11:38 PM | 显示全部楼层

回复 #7 pic 的帖子

其实我对C++没有认识很深,只会少许罢了。。。
我的asm比较强,可以给个简单的asm例子吗?
我知道C时目前很强的语言,我会进修的,不过现在想用asm先,因为我的partner不会C,
如果一个用C一个用ASM,那么就世界大乱了!!
谢咯
回复

使用道具 举报


ADVERTISEMENT

发表于 10-11-2007 09:29 AM | 显示全部楼层
原帖由 jason86 于 9-11-2007 11:38 PM 发表
其实我对C++没有认识很深,只会少许罢了。。。
我的asm比较强,可以给个简单的asm例子吗?
我知道C时目前很强的语言,我会进修的,不过现在想用asm先,因为我的partner不会C,
如果一个用C一个用ASM,那么就 ...

请问你们在作些什么? 可以分享吗?
回复

使用道具 举报

 楼主| 发表于 10-11-2007 11:57 AM | 显示全部楼层
原帖由 pic 于 10-11-2007 09:29 AM 发表

请问你们在作些什么? 可以分享吗?


其实我们现在做PCB drilling machine, 整个 project 要完成了。 (上次在电技分区有提过)
现在要加强整个machine的安全系统
我用sensor 来控制,一旦有东西靠近machine 时,整个 machine 会停止运作。。。
所以想用inerrupt,有何意见提供吗?
回复

使用道具 举报

发表于 10-11-2007 12:49 PM | 显示全部楼层
对你的硬体XY table比较有兴趣。。。
原帖由 jason86 于 10-11-2007 11:57 AM 发表
我用sensor 来控制,一旦有东西靠近machine 时,整个 machine 会停止运作。。 ...

其实, 作个盖, 盖着是最好, 有人打开盖才停机, 是比较实际的。
如转嘴断了飞出来, 有盖可以保护到。


你要用Sensor, 那你用的是什么sensor?
回复

使用道具 举报

 楼主| 发表于 10-11-2007 12:59 PM | 显示全部楼层
原帖由 pic 于 10-11-2007 12:49 PM 发表
对你的硬体XY table比较有兴趣。。。

其实, 作个盖, 盖着是最好, 有人打开盖才停机, 是比较实际的。
如转嘴断了飞出来, 有盖可以保护到。


你要用Sensor, 那你用的是什么sensor?


你的提议不错。。。
我暂时还没决定用什么sensor, IR sensor 好像不怎么好。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 25-12-2024 12:36 AM , Processed in 0.172716 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表