如何启用8051的外部中断?

有帮助吗?

解决方案

8051s中断中的每个中断都在中断启用中都有自己的位(IE)特殊功能寄存器(SFR),并通过设置相应的位来启用。下面的代码示例包括8051组件以及C,以提供有关正在发生的事情的一般想法。

启用外部中断0(EX0)您需要设置位0 IE.

SETB EX0 或者 ORL IE,#01 或者 MOV IE,#01

启用外部中断1(EX1)您需要设置位3 IE.

SETB EX1 或者 ORL IE,#08 或者 MOV IE,#08

然后,需要通过设置位7的位置7 IE, ,这是全局互动启用/禁用位(EA)。如有必要,您可以通过中断优先级将外部中断的优先级设置为高(IP)SFR。

SETB EA 或者 ORL IE,#80

C中的示例:

#define IE (*(volatile unsigned char *)0xA8)
#define BIT(x) (1 << (x))
...
IE &= ~BIT(7); /* clear bit 7 of IE (EA) to disable interrupts */
...
IE |= BIT(0);  /* set bit 0 of IE (EX0) to enable external interrupt 0 */
...
IE |= BIT(1);  /* set bit 3 of IE (EX1) to enable external interrupt 1 */
...
IE ^= BIT(7)   /* toggle bit 7 of IE (EA) to re-enable interrupts */

或者

IE = 0x89;  /* enable both external interrupts and globally enable interrupts */

各种8051 C编译器供应商通常定义自己设置中断功能的方法。您可能需要为您的特定编译器咨询文档。

使用KEIL C51编译器定义中断函数(PDF链接到应用程序注释),指定中断号码和注册库,其中中断号码对应于特定的中断向量地址。

void my_external_interrupt_0_routine(void) interrupt 0 using 2
{
/* do something */
}

使用8051 IAR C/C ++编译器(ICC8051)定义中断函数(ICC8051)(PDF链接到参考指南), 这 __interrupt 关键字和 #pragma vector 可以使用指令。

#pragma vector=0x03
__interrupt void my_external_interrupt_0_routine(void)
{
/* do something */
}

如果您是8051的新手,则有很多可用的信息 www.8052.com. 。我也会推荐 8051/8052微控制器:体系结构,汇编语言和硬件接口 由Craig Steiner撰写,网站管理员和8052.com的作者。

其他提示

非常好的教程,这对我有很大帮助。 http://www.8052.com/tutint.phtml

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top