Utilisation de l’assembleur en Microcontrôleur Royaume du Maroc Université Hassan II Casablanca Faculté des sciences Utilisation de l’assembleur en Microcontrôleur Mr. Adil BARRA Barra.adil@gmail.com Année universitaire 2012/2013
Plan Introduction Initiation aux microcontrôleurs Rappel sur les notions d’assembleur Présentation du logiciel MPLAB Exemples d’applications Exercices A.BARRA TP- MPLAB
Il existe de nombreux langages de haut niveau : Introduction Un langage d’assembleur est un langage de bas niveau qui représente le langage machine sous une forme lisible par un humain. Il existe de nombreux langages de haut niveau : Certain sont développer pour des microcontrôleurs, d’autres largement répandus dans les ordinateurs ont été adaptés aux besoins des microcontrôleurs. => C’est le cas du C. A.BARRA TP- MPLAB
L’assembleur n’est pas structuré (blocs, fonctions…) L’assembleur reste proche du matériel (mise à 1 ou 0 d’un bit d’un port d’entrée sortie) L’assembleur n’est pas structuré (blocs, fonctions…) difficulté du code source. Inconvénients L’assembleur destiné à l’origine pour des systèmes embarqués. Les interruptions sont des concepts de l’assembleur. L’assembleur a des outils standards pour gérer ces différences. avantages A.BARRA TP- MPLAB
Initiation aux microcontrôleurs 1) Qu’est ce qu’un microcontrôleur : C’est un ordinateur monté dans un circuit intégré. On peut décomposer la structure interne d’un microprocesseur en trois parties : -Les mémoires -Le processeur -Les périphériques A.BARRA TP- MPLAB
2) Intérêt des microcontrôleurs : 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 nos cafetières, les magnétoscopes, les radios …..Une étude menée en l’an 2004 montre qu’en moyenne, un foyer américain héberge environ 240 microcontrôleurs. A.BARRA TP- MPLAB
Présentation générale du pic 16f84 1) Classification du PIC 16F84 Le PIC 16F84 est un microcontrôleur 8 bits. Il dispose donc d'un bus de données de huit bits 2) Architecture interne La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure : -Mémoire de programme -Mémoire de données -Processeur -Ressources auxiliaires ( périphériques ) A.BARRA TP- MPLAB
Structure interne du PIC 16F84 1) Brochage et caractéristiques principales Le PIC16F84 est un circuit intégré de 18 broches : L’horloge qui assure la fréquence doit être stabilisée de manière externe au moyen d’un cristal de quartz connecté aux pattes OSC1/CLKIN (patte 16) et OSC2/CLKOUT ( patte 15 ) Les broches RB0 à RB7 et RA0 à RA4 sont les lignes d’entrées/sorties numériques A.BARRA TP- MPLAB
2) Structure interne La structure interne du PIC16F84 est : ( structure HARVARD : la mémoire de programme et la mémoire de données sont séparées contrairement à l'architecture Von Neuman qui caractérise d'autres fabricants de microcontrôleurs ) A.BARRA TP- MikroC
3) Principe de fonctionnement du PIC Un microcontrôleur exécute des instructions. On définit « le cycle instruction » comme le temps nécessaire à l’exécution d’une instruction. Attention de ne pas confondre cette notion avec le cycle d’horloge qui correspond au temps nécessaire à l’exécution d’une opération élémentaire ( soit un coup d'horloge ). Une instruction est exécutée en deux phases : la phase de recherche du code binaire de l’instruction stocké dans la mémoire de programme la phase d’exécution ou le code de l’instruction est interprété par le processeur et exécuté. Chaque phase dure 4 cycles . A.BARRA TP- MPLAB
On pourrait donc croire qu’un cycle instruction dure 8 cycles d’horloge mais l’architecture particulière du PIC lui permet de réduire ce temps par deux. En effet, comme les instructions issues de la mémoire de programme circulent sur un bus différent de celui sur lequel circulent les données, ainsi le processeur peut effectuer la phase de recherche d’une instruction pendant qu’il exécute l’instruction précédente. A.BARRA TP- MPLAB
4) Déroulement d’un programme Le déroulement d’un programme s’effectue de façon très simple. A la mise sous tension, le processeur va chercher la première instruction qui se trouve à l’adresse 0000 de la mémoire de programme, l’exécute puis va chercher la deuxième instruction à l’adresse 0001 et ainsi de suite ( sauf cas de saut ou d’appel de sous programme que nous allons voir plus loin ). On parle de fonctionnement séquentiel. A.BARRA TP- MPLAB
5) La mémoire de données RAM Si l’on regarde la mémoire de donnée RAM, on s’aperçoit que celle-ci est un peu particulière. On constate en effet que cette mémoire est séparée en deux pages ( page 0 et page 1 ). De plus, on remarque que tant pour la page 0 que pour la page 1, les premiers octets sont réservés ( SFR pour Special File Register ). Ces emplacements sont en effet utilisés par le microcontrôleur pour configurer l’ensemble de son fonctionnement. A.BARRA TP- MPLAB
A.BARRA TP- MikroC
7) Les ports d’entrées/sorties Le PIC16F84 est équipé de 13 lignes d’entrées/sorties réparties en deux ports : -le port A : RA0 à RA4 -le port B : RB0 à RB7 Chaque ligne peut être configurée soit en entrée, soit en sortie, et ceci indépendamment l’une de l’autre. Pour cela on utilise les registres TRISA et TRISB particularité du portA : les bits b7 à b5 des registres TRISA et PORTA ne correspondent à rien car il n’y a que 5 lignes ( b0 à b4 ) . RA4 est une ligne à collecteur ouvert, cela veut dire que configurée en sortie cette broche assure 0Volt à l’état bas, mais qu’à l’état haut, il est nécessaire de fixer la valeur de la tension grâce à une résistance de tirage (pull up en anglais) particularité du portB :il est possible de connecter de façon interne sur chaque ligne une résistance de tirage ( pull up ) dont le rôle consiste à fixer la tension de la patte (configuré en entrée ) à un niveau haut lorsque qu’aucun signal n’est appliqué sur la patte en question. Pour connecter ces résistances, il suffit de placer le bit RBPU/ du registre OPTION à 0 . A.BARRA TP- MPLAB
Le TMR0 peut remplir deux fonctions: 8) Le Timer Dans la majeure partie des applications, il est nécessaire de contrôler le temps; afin de ne pas occuper le microcontrôleur qu'à cette tâche ( boucle de comptage qui monopolise le micro ), on le décharge en utilisant un timer. Le pic 16F84 dispose de deux timers, un à usage général ( le TMR0 ) et un autre utilisé pour le chien de garde ( watch dog WDG ). Le TMR0 peut remplir deux fonctions: -Temporisateur ou contrôle du temps. Son entrée d'incrémentation est alors l'horloge qui correspond au cycle instruction ( Fosc/4). -Compteur d'événements. Dans ce cas les d'impulsions d'entrées du timer sont fournies par la patte RA4/TOCK1 le choix s'effectue grâce au bit RTS du registre OPTION. A.BARRA TP- MPLAB
Le pic 16F84 dispose d'un diviseur de fréquence qui peut être assigné soit au chien de garde, soit au TMR0 ( uniquement un à la fois ). L'assignation du pré diviseur se fait grâce au bit PSA du registre OPTION. La structure interne du TMR0 est donc la suivante. A.BARRA TP- MPLAB
Rappel sur les notions du langage C L’espace mémoire limité Rapidité d’exécution Utilisation des fonctions lorsqu’un groupe d’instructions est répété plusieurs fois. Remarque A.BARRA TP- MikroC
Types de données en langage C : Il existe plusieurs types de données qui peuvent être utilisée en langage de programmation C. A.BARRA TP- MikroC
En ajoutant un préfix à n’importe lequel de ces type de données, la gamme de ces valeurs possible change ainsi que le nombre des bites nécessaire. A.BARRA TP- MikroC
Déclaration des variables Le nom d’une variable peut contenir tout caractère alphabétique de A-Z (a-z), les chiffres 0-9 ainsi que le caractère '_'. Le compilateur est sensible et différencie entre majuscule et minuscule. Les variables et les fonctions sont généralement en minuscule et les constantes en majuscule. Le nom d’une variable doit pas commencer avec un chiffre. Certains noms peuvent pas être utilise comme nom de variable car ils sont déjà utilisé par le compilateur. mikroC reconnait en total 33 mots de ce genre. Structure d’une déclaration de variables Type_variable Nom_variable; A.BARRA TP- MikroC
Mots réservés en MikroC A.BARRA TP- MikroC
Constantes entières Les constantes entières peuvent être décimal, hexadécimal, octal or binaire. Le compilateur reconnait leurs formes à partir du préfix ajouté. Si le nom n’a pas de préfix, il est considéré décimal par défaut, le type de la constante est reconnu automatiquement par sa taille. A.BARRA TP- MikroC
Opérations arithmétiques Les opérateurs arithmétiques sont utilisées sur des opérations arithmétiques et retourne toujours un résultat positif. Contrairement a une des opérations unaires étant performée sur une seul opérande, en binaire les opérations sont performées sur deux opérandes. A.BARRA TP- MikroC
Opérateurs d’assignement (affectation) Il existe deux types d’assignement en langage C: Les opérateurs simples attribue des valeurs aux variables utilisant le caractère '='. exemple: a = 8 Les assignations composées sont spécifique au langage C et se constituent de deux caractère présenté sur le tableau, et ils peuvent présenter plus d efficacités coté machine. A.BARRA TP- MikroC
Opérations d’incrémentation et de décrémentation Incrémentation et décrémentation par 1sont note '++' et '--'. Ce caractère peut soit précéder ou suivre une variable. Sur la 1ere case (++x), la variable x sera incrémenté au départ par 1, ensuite sera utilisé dans une expression. Autrement, la variable sera utilisé ensuite elle sera incrémenté par 1. La même chose pour l’opération de décrémentation. A.BARRA TP- MikroC
Opérateurs relationnels Les opérateurs relationnels sont utilisés pour la comparaison entre deux variables qui peuvent soit être (int) ou (float). Si l’expression est évaluée juste, un 1 est retourné. Autrement (faux), un 0 est retourné. A.BARRA TP- MikroC
Opérateurs logiques Il existe 3 types d’opérateurs logiques en langage C: la logique AND la logique OR la négation (NOT). Pour plus de clarté, les états logique présenté sur le tableau suivant comme logique zéro (0=false) and logique un (1=true). Exemple : (1 && 0) est la même chose que (true expression) && (false expression) Le résultat sera 0. A.BARRA TP- MikroC
A.BARRA TP- MikroC
Opérateurs sur bits Contrairement aux opérations logiques qui sont utilisées sur des variables, les opérations sur bits sont utilisé sur 1 seul bit de l opérande. A.BARRA TP- MikroC
Présentation du logiciel MikroC Verbalement :MikroC est un compilateur "C" monoposte pour microcontrôleurs PIC, il bénéficie d'une prise en main très intuitive et d'une ergonomie sans faille. Ses très nombreux outils intégrés (mode simulateur, terminal de communication Ethernet, terminal de communication USB, gestionnaire pour afficheurs 7 segments, analyseur statistique, correcteur d'erreur, explorateur de code, mode Débug ICD...) associé à sa capacité à pouvoir gérer la plupart des périphériques rencontrés dans l'industrie (Bus I2C™, 1Wire™, SPI™, RS485, Bus CAN™, USB, gestion de cartes compact Flash et SD™/MMC™, génération de signaux PWM, afficheurs LCD alphanumériques et graphiques et 7 à Leds segments, etc...) en font un outil de développement incontournable. A.BARRA TP- MikroC
Prise en main du logiciel MikroC Interface d’accueil du mikroC (tu expliques un peu comment on ouvre une nouvelle fiche A.BARRA TP- MikroC
A.BARRA TP- MikroC
A.BARRA TP- MikroC
Instructions de bases (1/2) Les instructions conditionnelles If else If (expression) { ... // ... // operation1 …}// Else Operation2 Exemple: If (x==5) { PORTB=255 } Else PORTB=0; A.BARRA TP- MikroC
Les instructions conditionnelles Switch…case l’opérateur switch vous permet de choisir entre plusieurs opérations. Sont syntaxe est. switch (selector) // Selector is of char or int type { case constant1: operation1 // Group of operators are executed if ... // selector and constant1 are equal break; case constant2: operation2 // Group of operators are executed if ... // selector and constant2 are equal ... default: expected_operation // Group of operators are executed if no ... // constant is equal to selector } A.BARRA TP- MikroC
Instructions de bases (2/2) Les instructions itératives (boucles) Do While loop Do { opération1; opération 2; …. } While (condition); // Check condition Exemple: a = 0; // Set initial value do { a = a+1; // Operation in progress } while (a <= 100); ; virgule a la fin du « do…while » A.BARRA TP- MikroC
Les instructions itératives (boucles) Les autres instructions itératives : While (1) {……} Do {……} while (1) ; Loop : ……. Goto loop ; For( ; ;){……..} Ici faire des exemples sur tableau A.BARRA TP- MikroC
Exemples d’instructions utiles TRISA=255 tous les bits du port A sont des entrées TRISB=0 tous les bits du port B sont des sorties TRISB.F0=1 le bit B0 sera une entrée PORTB=255 ou PORTB =0b11111111 écrire 1 tout au long du port B PORTB.F0=1 ou PORTB=0B00000001 seul le bit B0 est égale a 1 Delay_ms(1000) retarder l événement d une seconde A.BARRA TP- MikroC
Exercices A.BARRA TP- MikroC
Clignotement des lampes sur port B à une seconde. Solution Void main() Exercices 1 : Clignotement des lampes sur port B à une seconde. Solution Void main() { TRISB=0 ; Loop : PORTB=0 ; delay_ms(1000) ; PORTB=0B11111111 ; delay_ms(1000) ; goto Loop; } A.BARRA TP- MikroC
PORTB=~PORTB; delay_ms(1000) ; goto Loop; } Exercices 2 : Clignotement des lampes sur port B à une seconde avec l instruction « ~» Solution Void main() { TRISB=0; Loop: PORTB=0; delay_ms(1000) ; PORTB=~PORTB; delay_ms(1000) ; goto Loop; } A.BARRA TP- MikroC
Allumage du port B suite à l amorçage d’un interrupteur Solution Exercice 3: Allumage du port B suite à l amorçage d’un interrupteur Solution Void main () { TRISB=0; TRISA.F0=1; Loop: If (PORTA.F0==0) {PORTB=0} Else {PORTB=1} goto Loop; } Void main() Do{ If(PORTA.F0==0){PORTB=0} While(1);} A.BARRA TP- MikroC
Clignotement du port B 5 fois. Solution Void main () { Int x ; Exercice 4: Clignotement du port B 5 fois. Solution Void main () { Int x ; TRISB=0 ; For (x=0 ; x<5 ; x++) PORTB=0 ; delay_ms(1000) ; PORTB=0XFF; delay_ms(1000); } A.BARRA TP- MikroC
A.BARRA TP- MikroC