comment activer l'interruption externe de 8051?8051 interruption externe
Répondre
Chacune des interruptions 8051s possède son propre bit dans le registre de fonction spéciale (SFR) de validation d'interruption (IE
) et est activée en définissant le bit correspondant. Les exemples de code ci-dessous sont dans l'assemblage 8051 ainsi que C pour donner une idée générale de ce qui se passe.
Pour activer l'interruption externe 0 (EX0
), vous devez définir le bit 0 de IE
.
SETB EX0
ou ORL IE,#01
ou MOV IE,#01
Pour activer interruption externe 1 (EX1
) vous devez définir le bit 3 de IE
.
SETB EX1
ou ORL IE,#08
ou MOV IE,#08
Interruptions doivent alors être globalement activé par le bit 7 de IE
, qui est la interupt globale activer/désactiver le bit (EA
). Si nécessaire, vous pouvez définir la priorité des interruptions externes à l'aide de la priorité d'interruption (IP
) SFR.
SETB EA
ou ORL IE,#80
Exemple en 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 */
ou
IE = 0x89; /* enable both external interrupts and globally enable interrupts */
Les différents fournisseurs de compilateur 8051 C définissent souvent leurs propres méthodes de mise en place des fonctions d'interruption. Vous devrez peut-être consulter la documentation de votre compilateur spécifique.
Pour définir une fonction d'interruption à l'aide du compilateur Keil C51 (pdf link to application note), un numéro d'interruption et une banque de registres sont spécifiés lorsque le numéro d'interruption correspond à une adresse de vecteur d'interruption spécifique.
void my_external_interrupt_0_routine(void) interrupt 0 using 2
{
/* do something */
}
Pour définir une fonction d'interruption en utilisant la 8051 IAR C/C++ (icc8051) (pdf link to reference guide), le mot-clé __interrupt
et la directive #pragma vector
peut être utilisé.
#pragma vector=0x03
__interrupt void my_external_interrupt_0_routine(void)
{
/* do something */
}
Si vous êtes nouveau dans le 8051, il y a une multitude d'informations disponibles à www.8052.com. Je recommanderais également The 8051/8052 Microcontroller: Architecture, Assembly Language, and Hardware Interfacing écrit par Craig Steiner, le webmaster et auteur de 8052.com.
très bon tutoriel, ça m'a beaucoup aidé. http://www.8052.com/tutint.phtml
Vous pouvez avoir plus de chance avec ceci sur http://chiphacker.com – Earlz