1.1.1 Le chien de garde Le chien de garde est un oscillateur interne complèteme

1.1.1 Le chien de garde Le chien de garde est un oscillateur interne complètement indépendant du reste des circuits, ayant pour rôle de relever d’éventuels blocages de l’unité centrale du microcontrôleur et effectue la mise à zéro pour recommencer l’exécution normale du programme. C’est un compteur 8 bits incrémenté en permanence (même si le µC est en mode sleep) par une horloge RC intégrée indépendante de l'horloge système. Lorsqu’il déborde, (WDT TimeOut), deux situations sont possibles : • Si le µC est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permet d’éviter de rester planté en cas de blocage du microcontrôleur par un processus indésirable non contrôlé • Si le µC est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l'exécution du programme continue normalement là où elle s'est arrêtée avant de rentrer en mode SLEEP. Cette situation est souvent exploitée pour réaliser des temporisations. L'horloge du WDT est ajustée pour que Le Time-Out arrive toutes les 18 ms. Il est possible d’assigné un prescal au WDT pour avoir un temps plus long, cela se fait en intervenants sur le bit PSA du registre OPTION (BSF OPTION, PSA), PSA = 1 puis en intervient sur les bits PS2 PS1 PS0 pour obtenir les différents intervalles de retard (Voir tableau 2-2) 1.1.2 Le mode SLEEP Le mode SLEEP (Power-down mode) est un état particulier du fonctionnement du PIC 16F84, il est utilisé pour réduire la consommation du courant qui passera à 2ma environ lorsque le microcontrôleur n’est pas utilisé. Toute instruction présente après l’instruction SLEEP ne sera pas exécutée par le microcontrôleur lequel terminera à ce point son fonctionnement. Pour réveiller le microcontrôleur de l’état d’inactivité et de base consommation on peut utiliser ces techniques : 1) Remise à 0 du microcontrôleur en mettant à zéro la branche MCLR 2) Dépassement du temps (Time out) de la temporisation du watch dog (si valide) 3) Réalisation d’une situation d’interruption (RB0/RB4-RB7/fin d’écriture EEPROM) Dans les deux premiers cas le microcontrôleur se remet à zéro et l’exécution reprend à partir de la position mémoire 0 P a g e 1 | 29 Dans le troisième cas le microcontrôleur reprend comme dans le cas d’exécution d’interruption normal il reprend son programme après l’instruction SLEEP 1.2 Les modes d’adressage Les instructions utilisent toutes une manière particulière d’accéder aux informations qu’elles manipulent. Ces méthodes sont appelées « modes d’adressage », on distingue trois types d’adressage : adressage immédiat, adressage direct et adressage indirect. 1.2.1 Adressage immédiat Ce sont les instructions qui manipulent des données qui sont codées dans l’instruction directement. Elles sont codées de la manière suivante : - L’instruction est codée sur 6 bits - Elle est suivie d’une valeur IMMEDIATE codée sur 8 bits (donc de 0 à 255). Exemple : MOVLW 0x50 ; charger la valeur 0x50 dans W 1.2.2 Adressage directe Dans ce type d’adressage la donnée est contenue dans un registre. Dans l’exemple suivant, on va à l’adresse ‘mavariable’ voir ce qu’il y’a à l’intérieur, on y trouve le CONTENU de ’mavariable’, donc (w) = 0x50 Exemple MOVF mavariable , w 1.2.3 Adressage indirecte L'adresse de la donnée est contenue dans un pointeur. Dans les PIC, un seul pointeur est disponible pour l'adressage indirect : FSR. Contenu à l'adresse 04h dans les deux banques, il est donc accessible indépendamment du numéro de banque. En utilisant l'adressage direct, on peut écrire dans FSR l'adresse du registre à atteindre. FSR contenant 8 bits, on peut atteindre les deux banques du PIC 16F84. Pour les PIC contenant quatre banques, il faut positionner le bit IRP du registre d'état qui sert alors de 9ème bit d'adresse P a g e 2 | 29 Figure 2-1: Adressage direct et indirecte dans la mémoire donnée L'accès au registre d'adresse contenue dans FSR se fait en utilisant le registre INDF. Il se trouve à l'adresse 0 dans les deux banques. Il ne s'agit pas d'un registre physique. On peut le voir comme un autre nom de FSR, utilisé pour accéder à la donnée elle-même, FSR servant à choisir l'adresse. Exemple : movlw 0x1A ; Charge 1Ah dans W movwf FSR ; Charge W, contenant 1Ah, dans FSR movf INDF, 0 ; Charge la valeur contenue à l'adresse 1Ah dans W P a g e 3 | 29 2 PROGRAMMATION DU PIC 16F84 2.1 Choix de langage Le PIC 16F84A, (famille mid-range) supporte un jeu d'instructions, constitué de seulement 35 instructions. Chaque instruction est codée par un mot de 14 bits. Le langage assembleur est un langage extrêmement proche du fonctionnement du système. Très difficile à appréhender, il est cependant nécessaire d’avoir des bases en assembleur, car, cela permet d’optimiser les programmes et de gagner de la place, chose importante dans certains cas, car celle-ci est précieuse sur le PIC. Il faut savoir que sur les documentations techniques, lorsqu’on lit le mot « instruction », celles-ci font référence à une instruction assembleur. Nous verrons donc en assembleur, les 35 instructions du PIC avec les explications sur chacune d’entre elles. Ces instructions sont organisées en quatre types : Les instructions « orientées octet » : Elles sont codées de la manière suivante : -6 bits pour l’instruction : logique, car comme il y a 35 instructions, il faut 6 bits pour pouvoir les coder toutes ; -1 bit de destination (d) pour indiquer si le résultat obtenu doit être conservé dans le registre de travail de l’unité de calcul (W pour Work) ou sauvé dans l’opérande (F pour File) ; P a g e 4 | 29 -Reste 7 bits pour encoder l’opérande (File) Les instructions « orientées bits » Manipulation directement des bits d’un registre particulier. Elles sont codées de la manière suivante : -4 bits pour l’instruction (dans l’espace resté libre par les instructions précédentes) ; -3 bits pour indiquer le numéro du bit à manipuler (bit 0 à 7 possible) ; -7 bits pour indiquer l’opérande. Les instructions générales Instructions qui manipulent des données. Elles sont codées de la manière suivante : -L’instruction est codée sur 6 bits ; -Elle est suivie d’une valeur IMMEDIATE codée sur 8 bits (donc de 0 à 255). Les sauts et appels de sous-routines 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 codée sur 11 bits Figure 3-2: Types d’instructions 2.1.1 « MOVLW » (MOVe Literal to W) Cette instruction charge la valeur spécifiée (valeur littérale, ou encore valeur immédiate), dans le registre de travail W. Syntaxe : MOVLW k ; k représente une valeur de 0x00 à 0xFF. P a g e 5 | 29 Bit du registre STATUS affecté Aucun (donc même si vous chargez la valeur ‘0’.) 2.1.2 « ADDLW » (ADD Literal and W) Cette opération permet d’ajouter une valeur littérale (adressage immédiat) au contenu du registre de travail W. Syntaxe: ADDLW k ; (W) + k ---> (W) Bits du registre STATUS affectés Z Si le résultat de l’opération vaut 0, Z vaudra 1 C Si le résultat de l’opération est supérieur à 0xFF (255), C vaudra 1 DC Si le résultat de l’opération entraîne un report du bit 3 vers le bit 4, DC vaudra 1 2.1.3 « SUBLW » (SUBtract W from Literal) Soustrait W de k (8 bits) et place le résultat dans (W) Syntaxe : SUBLW k ; k – (W) -> (W) Bits du registre STATUS affectés C, DC, Z Si le résultat est positif, donc, pas de débordement : C =1.S’ il y a débordement, C devient 0. 2.1.4 « ANDLW » (AND Literal with W) Cette instruction effectue une opération « AND » BIT A BIT entre le contenu de W et la valeur littérale qui suit. Syntaxe : ANDLW k ; avec k = octet : (w) & k -> (w) Bit du registre STATUS affecté Z P a g e 6 | 29 Exemple : MOVLW 0x25 ; charge 0x25 dans le registre w, w=0x25 Exemple MOVLW 253 ; charger 253 en décimal dans W, W=253 ADDLW 4 ; Ajouter 4, W=253+ 4=257, W contient 1, Z vaut 0, C vaut 1(déborde) ADDLW 255 ; ajouter 255 W vaut 0,W=1+255 C vaut 1, Z vaut 1 Exemple: MOVLW B’11001101’ ; charger w=11001101 ANDLW B’11110000’ ; effectue un ‘and’ (&), 11001101 & 11110000 W=11111101 2.1.5 « IORLW » (Inclusive OR Literal with W) Mêmes instructions, mais pour le OU inclusif. Inclusif signifie simplement le contraire d’exclusif, c’est à dire que le bit de résultat vaudra 1 si un des bits, OU les deux bits opérandes Syntaxe: IORLW k ; (w) OR k -> (w) Bit du registre STATUS affecté Z 2.1.6 « XORLW » (eXclusive OR Literal with W) Par opposition au OU INCLUSIF, voici maintenant le OU EXCLUSIF. Sa table de vérité est la même que le OU Inclusif, excepté que lorsque les 2 bits sont à 1, le résultat est 0. Cette instruction peut donc servir à INVERSER n’importe quel uploads/s1/ cours 10 .pdf

  • 30
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Jan 04, 2021
  • Catégorie Administration
  • Langue French
  • Taille du fichier 0.4045MB