Chapitre 5 Microcontroleurs
Chapitre 5 Microcontroleurs
Chapitre 5 Microcontroleurs
LES MICROCONTROLEURS
I introduction
C’est un ordinateur monté dans un circuit intégré. Les avancées technologiques en matière d’intégration,
ont permis d’implanter sur une puce de silicium de quelques millimètres carrés la totalité des composants
qui forment la structure de base d’un ordinateur. Leur prix varie de quelques centaines de dinars à
quelques milliers de dinars pour les plus complexes.
Les microcontrôleurs sont de taille tellement réduite qu’ils peuvent être sans difficulté implantés sur
l’application même qu’ils sont censés piloter. Leur prix et leurs performances simplifient énormément la
conception de système électronique et informatique. L’utilisation des microcontrôleurs ne connaît de
limite que l’ingéniosité des concepteurs, on les trouve dans les téléphones portables, dans les
calculatrices, dans les récepteurs satellites, dans les voitures…
Il existe plusieurs types de microcontrôleurs à savoir INTEL , SEIMENS, AMTEL , et les pics de
Microchip.
Un pic est un système minimum d’un microprocesseur à lequel on a ajouté des périphériques internes
permettant de réaliser des montages sans nécessiter l’ajout de composants externes.
Les PICs sont des composants à structure RISC (Reduce instruction Construction set), ou encore
composants à jeu d’instructions réduit, ce qui rend le décodage plus facile et plus rapide, donc le
composant fonctionne plus vite.
Toutes les Mid-Range ont un jeu de 35 instructions, stockent chaque instruction dans un seul mot
de programme, et exécutent chaque instruction (sauf les sauts) en 1 cycle. On atteint donc des très
grandes vitesses, et les instructions sont de plus très rapidement assimilées.
L’horloge fournie au PIC est pré-divisée par 4 au niveau de celle-ci. C’est cette base de temps qui
donne le temps d’un cycle.
Si on utilise par exemple un quartz de 4MHz , on obtient donc 1000000 de cycles/seconde, or,
comme la pic exécute pratiquement 1 instruction par cycle, hormis les sauts, cela nous donne une
puissance de l’ordre de 1MIPS (1 Million d’Instructions Par Seconde).
39
3.2 Les différentes familles
Pour identifier un PIC, on utilise simplement son numéro.
Les 2 premiers chiffres indiquent la catégorie du PIC, 16 indique une PIC Mid-Range. Vient ensuite
parfois une lettre L : Celle-ci indique que le PIC peut fonctionner avec une plage de tension beaucoup
plus tolérante. Ensuite, on trouve :
- C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM
- CR pour indiquer une mémoire de type ROM
- F pour indiquer une mémoire de type FLASH.
Puis on trouve les derniers chiffres identifient précisément le PIC. (877)
Enfin on trouve sur les boîtiers « -XX » dans laquelle XX représente la fréquence d’horloge
maximale que le PIC peut recevoir. Par exemple –04 pour une 4MHz.
Donc, PIC 16F877-04 est un PIC Mid-Range (16) donc la mémoire programme est de type
FLASH (F) donc réinscriptible de type 877 et capable d’accepter une fréquence d’horloge de 4MHz.
40
Structure externe du 16f877
L’alimentation du circuit est assurée par les pattes VDD et VSS. Elles permettent à l’ensemble des
composants électroniques du PIC de fonctionner. Pour cela on relie VSS à la masse ( 0 Volt ) et VDD à
la borne positive de l’alimentation qui doit délivrer une tension continue comprise entre 3 et 6 Volts.
Le microcontrôleur est un système qui exécute des instructions les unes après les autres à une vitesse
(fréquence ) qui est fixée par une horloge interne au circuit. Cette horloge doit être stabilisée de manière
externe au moyen d’un cristal de quartz connecté aux pattes OSC1/CLKIN (patte 13) et OSC2/CLKOUT
(patte 14 ) .
La patte 1 est appelée MCLR. Elle permet lorsque la tension appliquée est égale à 0V de réinitialiser le
microcontrôleur. C’est à dire que si un niveau bas ( 0 Volt ) est appliqué sur MCLR le microcontrôleur
s’arrête, place tout ses registres dans un état connu et se redirige vers le début de la mémoire de
programme pour recommencer le programme au début ( adresse dans la mémoire de programme :0000).
A la mise sous tension, la patte MCLR étant à zéro, le programme démarre donc à l’adresse
0000,(MCLR=Master Clear Reset ).
Le reste des pattes sont les lignes d’entrées/sorties . Elles sont au nombre de 33 et peuvent être
configurées en entrée ou en sortie. Ce sont elles qui permettent au microcontrôleur de dialoguer avec le
41
monde extérieur (périphériques). La majorité de ces broches sont multiplexées pour réaliser plusieurs
fonctions.
-Une mémoire de donnéesRAM :c’est une mémoire de 512 octets puisque le bus de donnée est
de huit bits. Cette RAM est volatile (les données sont perdues à chaque coupure de courant). On peut y
lire et écrire des données.
-Une mémoire de données EEPROM : c’est une mémoire de 256 octets dans laquelle on peut lire et
écrire des données ( de huit bits soit un octet ) et qui possède l’avantage d’être non volatile ( les
données sont conservées même en l’absence de tension ). La lecture et l’écriture dans cette mémoire
de données sont beaucoup plus lentes que dans la mémoire de données RAM.
Avec un oscillateur RC, la fréquence de l'oscillation est fixée par Vdd, Rext et Cext. Elle peut
varier légèrement d'un circuit à l'autre.
43
Dans certains cas, une horloge externe au microcontrôleur peut être utilisée pour synchroniser le
PIC sur un processus particulier.
Quelque soit l'oscillateur utilisé, l'horloge système dite aussi horloge instruction est obtenue en
divisant la fréquence par 4. Dans la suite de ce cours on utilisera le terme Fosc/4 pour désigner l'horloge
système.
Avec un quartz de 4MHz, on obtient une horloge instruction de 1MHz, soit le temps pour
exécuter une instruction de 1µs.
Il faut noter que l'adresse 0000h contient le vecteur du reset, l'adresse 0004h l'unique vecteur
d'interruption du PIC. La pile contient 8 valeurs. Comme le compteur de programme, elle n'a pas
d'adresse dans la plage de mémoire. Ce sont des zones réservées pour le système.
Le plan mémoire est linéaire, les adresses vont de 0000h à 1FFFh (8k mots de 14 bits), par page
de 2K mots . On peut remarquer que le vecteur de reset est figé en 0000h.
Les PICs n’ont qu’un seul vecteur d’interruption en 0004h. Lors d’une interruption, le sous programme
associé devra déterminer quel périphérique a demandé une interruption.
La pile utilisée par les sous programmes n’est pas implantée en mémoire de donnée comme avec
les microcontrôleurs classiques, mais dans la mémoire programme. Elles sont utilisées lors d’appels de
sous programmes, on ne peut pas imbriquer plus de 8 sous programmes.
44
Mémoire de programme
45
Organisation de la RAM du16F877
9bits
46
C’est pour ça que la RAM apparaît organisée en 4 banks de 128 octets chacun. L'adresse instruction
permet d'adresser à l'intérieur d'un bank alors que les bits RP0 et RP1 du registre STATUS permettent
de choisir un bank. La figure ci-dessus montre l’organisation de la RAM avec les zones allouées aux
SFR et aux GPR. Les zones en gris ne sont pas implantées physiquement.
IRP est un bit qui se trouve dans STATUS et FSR est un registre accessible dans tous les banks. En
effet, le registre de pointage FSR est un registre 8 bits, il peut donc adresser au maximum 256 positions
mémoires (de 00h à FFh), c’est seulement la moitié de la RAM dont on dispose. Il nous manque un bit
pour avoir les 9 bits nécessaires. On utilise le bit IRP qui se trouve dans le registre STATUS.
Exemle: Si on place 74h dans le registre FSR et on positionne le bit IRP à 1, alors l’instruction
CLRF INDF signifie: remettre à zéro la case mémoire d’adresse 174h.
Movlw 0x74
Bsf STATUS,IRP
Movwf FSR
Clrf INDF
Donc en résumé, chaque fois que le PIC rencontre le mot INDF dans un programme, il sait qu’il
s’agit de la case mémoire dont l’adresse (9bits) se trouve dans le registre FSR complété par le bit IRP
du registre STATUS
47
II.4.4 Quelques registres de configuration et leurs bits
STATUS IRP RP1 RP0 TO PD Z DC C 00011xxx
OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 11111111
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000000x
PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 00000000
PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 00000000
PIE2 N.I. Réservé N.I. EEIE BCLIE N.I. N.I. CCP2IE -r-00--0
PIR2 N.I. Réservé N.I. EEIF BCLIF N.I. N.I. CCP2IF -r-00--0
EECON1 EEPGD — — — WRERR WREN WR RD x---x000
TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000-010
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000000x
CCPxCON — — DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0 --000000
T1CON — — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --000000
T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -0000000
SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 00000000
SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 00000000
SSPSTAT SMP CKE D/A P S R/W UA BF 00000000
CCP1CON — — CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --000000
TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000-010
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000000x
CCP2CON — — CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --000000
ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON 000000-0
ADCON1 ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0 0---0000
TRISx 11111111
48
II.4.3.4 Le registre STATUS : ( h'03' ou h'83' ou h'103 ou h'183' ).
.
On accède indifféremment à ce registre par une quelconque de ces 4 adresses.
Au reset: STATUS = 00011XXX
Les bits Z, DC et C sont des indicateurs qui permettent de savoir comment une instruction s’est
terminée. Toutes les instructions n’agissent pas sur ces indicateurs. Ces bits peuvent être utilisés très
astucieusement par les instructions btfsc et btfss qui permettent de tester un bit et de réaliser un saut
conditionnel.
49
II.4.3.5 Le registre OPTION_REG : ( h'81' ou h'181').
Ce registre en lecture écriture permet de configurer les prédiviseurs du Timer et du Watchdog, la source
du Timer, le front des interruptions et le choix du Pull up sur le Port B..
Au reset : OPTION = 11111111
Masques :
50
GIE: (Global Interrupt Enable) : masque global d’interruptions
PEIE : (Periferal Interrupt Enable) autorise les interruptions de différentes périphéries.
T0IE : (Timer 0 Interrupt Enable) autorise l'interruption provoquée par le débordement du TIMR0
INTE: ( Interrupt Enable) autorise l’interruption provoquée par un changement d'état sur broche
RB0/INT
RBIE: (RB InterruptEnable) autorise les interruptions provoquées par un changement d'états
sur l'une des broches RB4 à RB7.
Si ces bits sont mis à 1 , ils autorisent les interruptions pour lesquels ils sont dédiés .
Drapeaux :
T0IF : (Timer 0 Interrupt Flag) indique un débordement du TMR0
INTF( Interrupt Flag) indique une interruption provoquée par la broche RB0/INT
RBIF( RB Interrupt Flag) indique une interruption provoquée par les broches RB4-RB7.
- 6 bits pour l’instruction : logique, car comme il y a 35 instructions, il faut 6 bits pour pouvoir les coder
toutes
- 1 bit (d) pour indiquer si le résultat obtenu doit être conservé dans le registre de travail W de l’unité de
calcul ou sauvé dans un registre F (F pour File).
- Reste 7 bits pour encoder l'adresse de l’opérande (128 positions au total)
Remarque :
Comme 7 bits ne donnent pas accès à la mémoire RAM totale, donc voici l’explication de la
division de la RAM en quatre banks. Pour remplacer les bit manquants, on utilise le bit RP0 et RP1
du registre STATUS
51
ANDWF F,d W and F {W ,F ?d} Z 1
IORWF F,d W or F {W,F ?d} Z 1
XORWF F,d W xor F {W, F ?d} Z 1
Ce sont des instructions destinées à manipuler directement les bits d’un registre que ce soit un
registre SFR ou une case mémoire quelconque. Tous les bits de la RAM peuvent être manipulés
individuellement. Elles sont codées de la manière suivante :
- 4 bits pour l’instruction
- 3 bits pour indiquer le numéro du bit à manipuler (de 0 à 7)
- 7 bits pour indiquer l’opérande.
Pour les instructions agissant sur un bit, le paramètre F indique le registre qui contient le bit à
modifier et le paramètre b indique le numéro du bit à modifier ;on compte à partir de zéro en
commençant à droite
7 6 5 4 3 2 1 0
BSF STATUS,2 ;signifie: placer à 1 l bit 2 (3ème bit à partir de la droite) du registre STATUS
BCF 45h,6 ;signifie: placer à 0 le bit 6 (7ème bit à partir de la droite) du registre de la case
mémoire d’adresse 45h
52
II.5.4Les instructions de saut et appel de procédures
Ce sont les instructions qui provoquent une rupture dans la séquence de déroulement du programme.
Elles sont codées de la manière suivante :
- Les instructions sont codées sur 3 bits
- La destination est codée sur 11 bits
CLRW Clear W Z 1
CLRWDT Clear Watch dog timer TO,PD 1
NOP No operation 1
SLEEP Se met en mode standby TO,PD 1
On remarque que:
Les instructions qui agissent sur un registre ou un bit d’un registre contiennent toutes la lettre F dans
le nom de l’instruction. Ceci vient du fait que chez Microchip, la RAM est appelée register File
(Fichier des registres).
Les instructions qui agissent sur une constante contiennent toutes la lettre L, parce que chez
Microchip, on appelle« Literal» ce genre d’adressage, chez d’autres constructeurs, on parle
d’adressage immédiat
MOVF ( Move F )
syntaxe : MOVF f,d
opération : ff si d=1 ou fW si d=0
Bit d’état du registre STATUS affecté :Z
durée : 1 cycle instruction ( 4 cycles d’horloge )
On déplace le contenu de f dans f si d=1 ou de f dans W si d=0. Attention, le déplacement de f dans f
semble à priori inutile, mais il permet en fait de tester le contenu de f par rapport à 0 et de positionner le
bit Z
CLRF ( Clear F )
syntaxe : CLRF f
Opération : 0F
53
Bit d’état du registre STATUS affecté :Z
durée : 1 cycle instruction ( 4 cycles d’horloge )
On met le contenu du registre f à 0 et on positionne Z
COMF ( Complement F )
syntaxe : COMF f,d
opération : /ff si d=1 ou /fW si d=0
Bit d’état du registre STATUS affecté :Z
durée : 1 cycle instruction ( 4 cycles d’horloge )
On complémente le contenu du registre f bit à bit , le résultat est placé dans f si d=1 , dans W si d=0 .
ADDWF (Add W to F )
syntaxe : ADDWF f,d
Opération : W+ff si d=1 ou W+fW si d=0
Bits d’état du registre STATUS affectés : C,DC,Z
durée : 1 cycle instruction ( 4 cycles d’horloge )
on additionne le contenu de W et le contenu de f et on place le résultat dans f si d=1 ou dans W si
d=0
ex : ADDWF PORTB,0
ADDWF 0x0C ,1
CLRW ( Clear W )
syntaxe : CLRW
Opération : 0W
Bit d’état du registre STATUS affecté :Z
durée : 1 cycle instruction ( 4 cycles d’horloge )
On met le contenu du registre W à 0 et on positionne Z
INCF (Increment F)
syntaxe : INCF f,d
opération : f+1f si d=1 ou f+1W si d=0
Bit d’état du registre STATUS affecté :Z
durée : 1 cycle instruction ( 4 cycles d’horloge )
On augmente le contenu du registre f d’une unité, le résultat est placé dans f si d=1 , dans W si d=0 ( dans
ce cas f reste inchangé ).
DECF ( Decrement F )
syntaxe : DECF f,d
opération : f-1f si d=1 ou f-1W si d=0
Bit d’état du registre STATUS affecté :Z
durée : 1 cycle instruction ( 4 cycles d’horloge )
On diminue le contenu du registre f d’une unité, le résultat est placé dans f si d=1, dans W si d=0
(dans ce cas f reste inchangé ).
55
On effectue un OU Exclusif entre W et le contenu de f , le résultat est placé dans W si d=0, sinon il
est placé dans f
Registre f
Registre f
SWAPF ( Swap F )
syntaxe : SWAPF f,d
opération : f(0-3)f(4-7) et f(4-7)f(0-3) résultat dans W ou f selon d
Bit d’état du registre STATUS affecté :aucun
durée : 1 cycle instruction ( 4 cycles d’horloge )
On échange les quatre bits de poids forts avec les quatre bits de poids faibles et on place le résultat
dans W si d=0 , ou dans f si d=1
NOP ( NoOperation )
syntaxe: NOP
opération: néant
Bit d’état du registre STATUS affecté : aucun
durée : 1 cycle instruction ( 4 cycles d’horloge )
On ne fait que consommer du temps machine (un cycle dans ce cas )
SLEEP ( Sleep )
Syntaxe : SLEEP
opération : 0PD, 1T0, 0WDT, 0 pré diviseur
On place le circuit en mode sommeil avec arrêt de l’oscillateur. Cette commande est à utiliser avec
précaution.
LIST: permet de définir un certain nombre de paramètres comme le processeur utilisé (p), la
base par défaut pour les nombres (r) ainsi que d'autres paramètres. Exemple:
LIST p=16F877, r=dec
avec r=dec, les nombres sans spécification particulière seront considérés par l'assembleur comme des
nombre décimaux.
Pour préciser la base il faut utiliser les préfixes précisés dans le tableau ci-dessous :
59
Base Préfixe Exemple (36)
Décimale D’nnn’ D’36
.nnn .36
Hexadécimale H’nn’ H’24’
nnh 24h
0xnn 0x24
Binaire B’………’ B’00100100’
#INCLUDE : permet d'insérer un fichier source. Par exemple le fichier p16f876.inc contient la
définition d'un certain nombre de constante comme les noms des registres ainsi que les noms de certains
bits;
#INCLUDE "p16f877.inc"
ORG: La directive ORG, suivie de l’adresse, précise à quelle adresse l’instruction suivante sera placée
dans la mémoire programme du PIC. À défaut de cette précision, chaque instruction est placée à l’adresse
suivant directement l’instruction précédente.
#DEFINE: fonctionne un peu comme la directive EQU tout en étant un peu plus générale, car elle
permet d’affecter toute une chaîne à une abréviation
60
On peut ainsi affecter une abréviation à toute une instruction
#DEFINE éteindre bcf PORTC,5 ; affecte l’abréviation éteindre à l’instruction bcf PORTC,5
#DEFINE allumer bsf PORTC,5 ; affecte l’abréviation allumer à l’instruction bsf PORTC,5
DE: pour déclarer des donnés qui seront stockée dans l'EEPROM de donnée au moment de
l'implantation du programme sur le PIC
ORG 0x2100
DE "Programmer un PIC16f877, c’est facile"
RETLW 10
RETLW 35h
RETLW 'A'
RETLW 'u'
RETLW ‘t’
RETLW ‘o’
RETLW ‘m’
RETLW ‘a’
RETLW ‘t’
RETLW ‘i’
RETLW ‘q’
RETLW ‘u’
RETLW ‘e’
CONFIG : permet de définir les 14 bits de configuration qui seront copiés dans l'EEPROM de
configuration (adresse 2007h) lors de l'implantation du programme dans le PIC.
CP1 CP0 DEBUG — WRT CPD LVP BODEN - - PWRTE WDTE F0SC1 F0SC0
CP1/CP0 : bits 13/12 ; Déterminent quelle zone de la mémoire programme sera protégée contre la
lecture externe (via ICSP) ou l'écriture par programme conformément à l'état du bit 9 (WRT). On peut
choisir de protéger la totalité de la mémoire ou seulement une partie. Les différentes zones pouvant
être protégées sont les suivantes :
1 1 : Aucune protection (_CP_OFF)
1 0 : Protection de la zone 0x1F00 à 0x1FFF (_CP_UPPER_256)
0 1 : Protection de la zone 0x1000 à 0x1FFF (_CP_HALF)
0 0 : Protection de l’intégralité de la mémoire (_CP_ALL)
DEBUG : bit 11 : Debuggage sur circuit. Permet de dédicacer RB7 et RB6 à la communication avec
un debugger.
61
1 : RB6 et RB7 sont des I/O ordinaires (_DEBUG_OFF)
0 : RB6 et RB7 sont utilisés pour le debuggage sur circuit (_DEBUG_ON)
BODEN : bit 6 : provoque le reset du PIC en cas de chute de tension (surveillance de la tension
d’alimentation)
1 : En service (_BODEN_ON)
0 : hors service (_BODEN_OFF)
PWRTE : bit 3 : Délai de démarrage à la mise en service. Attention, est automatiquement mis en service
si le bit BODEN est positionné.
1 : délai hors service (sauf si BODEN = 1) (_PWRTE_OFF)
0 : délai en service (_PWRTE_ON)
__CONFIG B'11111100111010'
__CONFIG H'3F3A'
__CONFIG _CP_OFF &_DEBUG_OFF &_WRT_ENABLE_ON &_CPD_OFF &_LVP_OFF
&BODEN_OFF&_PWRTE_OFF&_WDT_OFF&_HS_OSC
Tout ce qui commence à la première colonne est considéré comme une étiquette (label)
permettant de faire des renvois et aussi des assignations de constantes et de variables.
62
Tout ce qui suit un point-virgule est considéré comme un commentaire non interprété par le
compilateur
Exemple
;*******************************************************
; Réalisation d’une Temporisation. *
;*******************************************************
list p=16f877, r=dec
#include "p16f877.inc"
__Config B'11111100111001'
Les étapes nécessaires permettant de voir un programme s'exécuter sur un PIC sont:
63
1- Ecrire un programme en langage assembleur dans l’éditeur de texte et le sauvegarder avec
l'extension.asm
2- Compiler ce programme avec l'assembleur MPASM pour avoir un fichier exécutable avec
l'extension.hex contenant une suite d'instruction compréhensible par le pic.
3- Simuler le programme afin de corriger d’éventuelles erreurs.
4- Transplanter le fichier.hex dans la mémoire programme du PIC (mémoire flash) à l'aide d'un
programmateur adéquat. On peut utiliser les programmateurs de Microchip ou tout autre
programmateur acheté ou réalisé par soit même.
5- Mettre le PIC dans son montage final,
6- mettre sous tension.
movlw 0X n
movwf 0x20
loop decfsz 0x20,1
goto loop
- Les instructions movlw et movwf prennent 1 cycle chacune
- L'instruction decfsz prend un cycle si elle ne saute pas et 2 cycles quand elle saute
- L'instruction goto prend 2 cycles
- chaque passage dans la boucle prend (1+2) cycles sauf le dernier qui prend 2 cycles
La valeur max que l'on peut donner à n est = 0 = 256, ce qui donne une temporisation max
de 769 cycles.
Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 1 µs, ce qui donne une temporisation
max de 769 µs
Pour faciliter l'utilisation de cette temporisation on va l'utiliser comme une fonction que l'on
appellera tempo. On note N1 la case mémoire qui sert de compteur, il faut la déclarer au début avec
la directive EQU
Cette fonction doit être placée après le programme principal, et on l'appelle avec l'instruction
call tempo. Pour le calcul il faut rajouter 2 cycles pour l'instruction call et 2 cycles pour
l'instruction return, ce qui donne
T1 = 3 n + 5 cycles
64
IV.2 Temporisation avec 2 boucles imbriquées
La boucle intérieure (n1) se fait toujours 256 fois. La boucle extérieure se fait n2 fois. C’est
n2 qui constituera le paramètre de la fonction, Il faut le placer dans W avant de l’appeler.
T2 = 770 W +5 cycles
T3 = 197122 W +5 cycles
Remarque : La précision de ces fonctions peut être améliorée en y insérant des instructions nop,
dans ce cas il faut revoir les formules. On verra plus tard comment on peut faire des
temporisations à l’aide des timers.
.
65
66