Utilisation des registres




Les registres :


Un Registre est un espace de stockage spécial du micro-contrôleur. L'état des bits du registre ont une signification spéciale pour le micro-contrôleur. La plupart des registres sont en 8 bits entier, sauf exceptions.

Tous les noms des registres sont décrits dans les fiches techniques des ATmega.  Les registres permettent de contrôler les entrées, sorties, timers,….


Les bits et les octets :


Un bit n’a que deux états possibles 1 ou 0 qui sont équivalent à  : Marche/Arrêt, 0/5Volts, On/Off, Vrai/Faux…..

Un octet est un ensemble de bit et représente une valeur numérique de 0 à 255. Un octet est composé de 8 bits qui se décomposent de 4 bits de poids fort MSB et 4 bits de poids faible LSB.



Voici comment est codé en binaire la 151.



Les valeurs numériques dans un programme en C pour un micro-contrôleur 8bits peut être définies en utilisant une notation décimale, hexadécimale ou binaire, selon le contexte et les préférences de l'interface de programmation.

Un  nombre en hexadécimale est défini en utilisant le préfixe 0x et un nombre binaire est défini en utilisant le préfixe 0b.

Le code C suivant montre trois façons d’écrire une variable qui sera initialisée à la valeur décimale de 15.


uint8_t a = 15;         /* décimale */

uint8_t b = 0x0F;       /* hexadécimale */

uint8_t c = 0b00001111; /* binaire */



Opérations sur bits :


AND :


Le ET (&) est l'opérateur AND en C.


uint8_t a = 0xAA; /* 10101010 */

uint8_t b = 0x0F; /* 00001111 */

uint8_t = a & b;  /* 00001010 */



OR :


La barre verticale (|) est l'opérateur OR en C.


uint8_t a = 0xAA; /* 10101010 */

uint8_t b = 0x0F; /* 00001111 */

uint8_t = a | b;  /* 10101111 */


XOR :


Le caractère accent grave(^) est l'opérateur  XOR en C.


uint8_t a = 0xAA; /* 10101010 */

uint8_t b = 0x0F; /* 00001111 */

uint8_t = a ^ b;  /* 10100101 */


NOT :


Un caractère tilde (~) est l'opérateur NOT en C.


uint8_t a = 0xAA; /* 10101010 */

uint8_t b = ~a;   /* 01010101 */


ROL:


Deux caractères (<<) est l’opérateur ROL en C suivie du nombre de décalage.


uint8_t a = 0x99; /* 10011001 */

uint8_t b = a<<1; /* 00110010 */

 

ROR:


Deux caractères (>>) est l’opérateur ROR en C suivie du nombre de décalage.


uint8_t a = 0x99; /* 10011001 */

uint8_t b = a>>3; /* 00010011 */


Mise à 1 et à 0 d’un bit dans un octet :


Activer et désactiver un seul bit, sans modifier les autres bits, est une tâche courante dans la programmation des micro-contrôleurs. Vous utiliserez ces techniques maintes et maintes fois.

Mise à un du bit 2  :


uint8_t a = 0x08;  /* 00001000 */

                         /* Mise à un du bit 2 */

a |= (1<<2);         /* 00001100 */


Mise à un des bits 1 et 2 :


uint8_t a = 0x08;     /* 00001000 */

                            /* Mise à un des bits 1 et 2 */

a |= (1<<2)|(1<<1);  /* 00001110 */


Mise à zéro du  bit 2  :


uint8_t a = 0x0F;  /* 00001111 */

                         /* Mise à zéro du bit 2 */

a &= ~(1<<2);     /* 00001011 */


Mise à zéro des bits 1 et 2 :


uint8_t a = 0x0F;          /* 00001111 */

                                 /* Mise à zéro des bits 1 et 2 */

a &= ~((1<<2)|(1<<1)); /* 00001001 */


Bascule du bit 2 :


uint8_t a = 0x0F; /* 00001111 */

                       /* Bascule du bit 2 */

a ^= (1<<2);      /* 00001011 */

a ^= (1<<2);      /* 00001111 */


Définition de la macro _BV(n) équivalent à  1<<n  :


/* Mise à un du bit 0 avec _BV() */

a |= _BV(0);


/* Mise à un du bit 0 avec << */

a |= (1<<0);




Mise à jour 17/05/2014





Créé avec HelpNDoc Personal Edition: Générateur de documentation et EPub gratuit