8051外部中断

时间:2010-04-30 13:50:18

标签: c interrupt 8051

如何启用8051的外部中断?

3 个答案:

答案 0 :(得分:7)

每个8051中断在中断使能(IE)特殊功能寄存器(SFR)中都有自己的位,并通过设置相应的位使能。下面的代码示例在8051汇编和C中,以提供正在发生的事情的一般概念。

要启用外部中断0(EX0),您需要设置IE的第0位。

SETB EX0ORL IE,#01MOV IE,#01

要启用外部中断1(EX1),您需要设置IE的第3位。

SETB EX1ORL IE,#08MOV IE,#08

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

SETB EAORL 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 link to application note)定义中断函数,需要指定中断号和寄存器库,其中中断号对应于特定的中断向量地址。

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

要使用8051 IAR C / C ++编译器(icc8051)(pdf link to reference guide)定义中断函数,可以使用__interrupt关键字和#pragma vector指令。

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

如果您是8051的新手,www.8052.com提供了丰富的信息。我还建议由网站管理员和8052.com的作者Craig Steiner撰写的The 8051/8052 Microcontroller: Architecture, Assembly Language, and Hardware Interfacing

答案 1 :(得分:2)

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

答案 2 :(得分:0)

启用IE寄存器中外部中断的相应位。 如果是电平触发,则只需编写适合该中断的子程序,或者启用对应于边沿触发的中断的TCON寄存器位-无论是INT0还是INT1。