2010-01-06 3 views
4

Je viens de terminer ma classe de Microprocesseurs à l'université il y a quelques semaines, là nous avons programmé en montage seulement. Nous avons appris une bonne quantité (IMHO) sur les interruptions.PIC 16F684 Microcontrôleur Interupt Handling

Voici ma question: Je programme en C en utilisant le compilateur HiTech pour le 16F684, dans la section de la fiche technique traitant des interruptions (PIC 16F684 Datasheet Section 12.4) il est dit que le programme ira au vecteur d'interruption 0x0004. En utilisant l'assemblage dans ma classe de microprocesseurs, nous créerions simplement une instruction .org pointant vers cette adresse et écririons l'assemblage nécessaire ci-dessous, donc quand l'interruption se produirait, elle sauterait et s'exécuterait. Je peux comprendre cela dans l'assemblage, mais quand je programme en C je ne crois pas que j'ai le contrôle sur l'endroit où les morceaux du programme sont placés en mémoire, ce qui pose un problème. Je ne peux pas comprendre comment placer des commandes à l'interruption en C.

S'il vous plaît laissez-moi savoir si j'ai besoin de clarifier!

Répondre

3

This FAQ by Microchip a des informations sur l'utilisation des interruptions sous HiTech C.

+0

Il semble que le lien que vous avez donné donne également un bon exemple. Merci – onaclov2000

+0

J'ai utilisé le lien que vous m'avez fourni et j'ai fait tourner un test (en allumant une LED lorsque l'interruption a été déclenchée). Je vous remercie! – onaclov2000

1

Vous aurez à creuser dans la documentation HiTech, mais souvent les compilateurs ont des mots-clés spéciaux pour définir les fonctions d'interruption. Le compilateur, ou le système d'exécution, doit traiter une fonction appelée par une interruption spécialement: En plus de configurer le vecteur, le compilateur (ou le système d'exécution) doit conserver tous les registres. Cela pourrait ne pas être nécessaire pour une fonction normale, sans interruption.

Le manuel sera votre ami.

+0

Merci de m'avoir rappelé le manuel, pour une raison quelconque je ne pensais pas à quelque chose d'aussi simple que ce serait dans le manuel ... LOL – onaclov2000

3

HiTech C étend le langage C avec le type de fonction interrupt:

void interrupt my_interrupt_handler (void) { 
    handle_interrupts_here(); 
} 

Vous devriez vraiment obtenir le manuel pour le compilateur. Je crois que le manuel du Pic-lite est gratuit pour le téléchargement, au moins il a été quand je téléchargé ma copie un peu de temps en 2001.

+0

Je vais devoir essayer. Cette déclaration est plug and play dans le respect que si j'ai une fonction appelée handle_interrupts_here je peux traiter avec eux, ou "interruption" est remplacé par un type d'interruption en soi? – onaclov2000

+0

PIC16 a seulement 1 'type' d'interruption. C'est à vous de vérifier les registres (HiTech les définit comme des variables globales, consultez les fichiers d'en-tête) pour savoir ce qui s'est passé. – slebetman

0

Les utilisations CCS compiler for PICs # INT_ * directives de compilation ou 'attributs' sur les fonctions de gestion des interruptions pour les différentes sources d'interruption.