Domanda

come abilitare interrupt esterna del 8051?

È stato utile?

Soluzione

Ciascuna delle dell'8051 interrupt ha un proprio bit nel abilitazione interrupt (IE) registro funzioni speciali (SFR) ed è abilitato impostando il bit corrispondente. Gli esempi di codice di seguito sono 8051 assemblaggio, nonché C per fornire un'idea generale di quanto sta avvenendo.

Per abilitare esterna interrupt 0 (EX0) è necessario impostare il bit 0 di IE.

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

Per attivare l'allarme da 1 esterno (EX1) è necessario impostare il bit 3 di IE.

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

Interrupt quindi necessario abilitare globalmente impostando il bit 7 di IE, che è il globale interrupt abilitare / disabilitare bit (EA). Se necessario, è possibile impostare la priorità delle interruzioni esterne ad alta tramite SFR priorità di interruzione (IP).

SETB EA o ORL IE,#80

Esempio in 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 */

o

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

I vari fornitori di 8051 C compilatore spesso definire i propri metodi di creazione di funzioni di interrupt. Potrebbe essere necessario consultare la documentazione specifica del compilatore.

Per definire una funzione allarme mediante il Keil C51 compilatore ( pdf collegamento in applicazione nota ), un numero di interruzione e registrare banca dove il numero corrisponde ad una specifica interrupt interrupt indirizzo vettoriale.

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

Per definire una funzione allarme mediante il 8051 IAR C / C ++ (icc8051) ( pdf link alla guida di riferimento ), la parola chiave __interrupt e la direttiva #pragma vector possono essere utilizzati.

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

Se siete nuovi al 8051, v'è una ricchezza di informazioni disponibili alla pagina www.8052.com . Auspico inoltre Il microcontrollore 8051/8052: Architettura, Assembly Language, e Hardware interfacciamento scritto da Craig Steiner, il webmaster e autore di 8052.com.

Altri suggerimenti

ottimo tutorial, mi ha aiutato molto. http://www.8052.com/tutint.phtml

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top