PIC 16F84A
- Les sous-programmes (ou routines)
- La routine d'interruption
- La pile
1- Les sous-programmes (routines)
Prenons un exemple :
...
MOVLW B'10010001'
CALL routine1
CLRW
...
...
routine1 ; étiquette de début de la routine
instructions de la routine
RETURN ; retour de routine
Supposons que le µC en soit à l'exécution de l'instruction MOVLW B'10010001'.
L'instruction suivante est l'instruction CALL : il s'agit d'une instruction d'appel à un sous-programme.
Le µC saute alors à la position définie par l'étiquette "routine1".
Puis, les instructions du sous-programme sont exécutées.
La fin du sous-programme est signalée par l'instruction RETURN (ou aussi RETLW).
Cette instruction indique qu'il faut revenir à l'instruction qui suit l'instruction CALL, c'est à dire dans cette exemple CLRW.
N.B. Les instructions CALL et RETURN (ou RETLW) s'utilisent toujours par paire.
2- La routine d'interruption
Il s'agit d'un sous-programme particulier : il est déclanché par une interruption (alors qu'un sous-programme "classique" est appelé par l'instruction CALL).
Le µC se branche alors à l'adresse H'0004' de la mémoire de programme (les instructions de la routine d'interruption doivent donc commencer à cette adresse).
La fin de la routine d'interruption est signalée par l'instruction RETFIE.
L'instruction RETFIE provoque le retour dans le programme principal, à l'endroit où il avait été interrompu par l'apparition de l'interruption.
3- La pile
La pile est une zone mémoire particulière.
Pour le PIC 16F84A, elle est constituée de 8 emplacements de 13 bits.
La pile intervient dans le mécanisme interne des instructions :
En effet, c'est dans la pile qu'est mémorisée l'adresse de retour d'une routine.
Quand intervient une instruction CALL ou une interruption, l'adresse de l'instruction suivante (qui se trouve dans le compteur de programme PC) est sauvegardée dans la pile.
Quand une instruction RETURN, RETLW ou RETFIE apparaît, le µC lit la dernière valeur sauvegardée dans la pile, libère l'emplacement et se branche à l'adresse indiquée.
Avec le mécanisme de la pile, un sous-programme peut appeler un sous-programme (ou plutôt un sous-sous-programme) : la pile réserve un autre emplacement.
C'est le même principe que les poupées russes.
Attention !
La taille de la pile est limitée à 8 niveaux (pour le PIC 16F84A).
S'il y a plus de 8 routines actives en même temps, le contenu de la pile est écrasé et le programme ne fonctionne plus correctement.
Cela se traduit par un plantage (le µC ne fait plus rien) ou bien par un comportement plus ou moins incohérent (le µC fait des choses bizarres) ... problèmes que l'on retrouve exactement sur des programmes plus complexes (Windows de Microsoft ...).
Remarques :
- il ne peut y avoir qu'une seule routine d'interruption (car un seul vecteur d'interruption : H'0004')
- la routine d'interruption peut appeler un sous-programme (avec l'instruction CALL)
- un sous-programme ne doit pas s'appeler lui-même (c'est le problème du serpent qui se mord la queue).