8051 внешнее прерывание
Как включить внешнее прерывание 8051?
2 ответов
каждый из прерываний 8051s имеет свой собственный бит в прерывании enable (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 из IE
, который является глобальным interupt включить / отключить бит (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) ( pdf ссылка на справочное руководство), то __interrupt
ключевое слово и
очень хороший учебник, это мне очень помогло. http://www.8052.com/tutint.phtml