加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 8051外部中断

发布时间:2020-12-16 04:58:20 所属栏目:百科 来源:网络整理
导读:如何启用8051的外部中断? 解决方法 每个8051中断在中断使能(IE)特殊功能寄存器(SFR)中都有自己的位,并通过设置相应的位使能.下面的代码示例在8051汇编和C中,以提供正在发生的事情的一般概念. 要启用外部中断0(EX0),需要设置IE的第0位. SETB EX0或ORL IE,#01
如何启用8051的外部中断?

解决方法

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

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

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

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

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

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

SETB EA或ORL IE,#80

C中的示例:

#define IE (*(volatile unsigned char *)0xA8)
#define BIT(x) (1 &lt&lt (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获得丰富的信息.我还推荐The 8051/8052 Microcontroller: Architecture,Assembly Language,and Hardware Interfacing,由网站管理员和8052.com的作者Craig Steiner撰写.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读