Domanda
come abilitare interrupt esterna del 8051?
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 è specificato un>), 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