8051 внешнее прерывание - PullRequest
       33

8051 внешнее прерывание

6 голосов
/ 30 апреля 2010

как включить внешнее прерывание 8051?

Ответы [ 2 ]

7 голосов
/ 30 апреля 2010

Каждое из прерываний 8051 имеет свой собственный бит в регистре специальной функции разрешения прерываний (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, который является битом включения / выключения глобального прерывания (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 ссылка на примечание к приложению ) указывается номер прерывания и банк регистров, где номер прерывания соответствует конкретному адресу вектора прерывания.

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

Чтобы определить функцию прерывания с помощью компилятора 8051 IAR C / C ++ (icc8051) ( pdf ссылка на справочное руководство ), можно использовать ключевое слово __interrupt и директиву #pragma vector.

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

Если вы новичок в 8051, на www.8052.com имеется множество информации. Я также рекомендовал бы Микроконтроллер 8051/8052: архитектура, язык сборки и аппаратное взаимодействие , написанный Крейгом Штайнером, веб-мастером и автором 8052.com.

2 голосов
/ 30 апреля 2010

очень хороший урок, он мне очень помог. http://www.8052.com/tutint.phtml

...