Structure d un programme en assembleur

Documents pareils
PIC : COURS ASSEMBLEUR

PIC 16F84. Philippe Hoppenot

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Informatique Industrielle

MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

Flowcode - Mode d'emploi

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

La programmation des PIC en C. Les fonctions, les interruptions.

Proteus VSM. manuel_vsm.doc

ARCEAU DE PARKING MOTORISÉ VIGIPARK

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

LISA. Manuel Utilisateur

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

GPA770 Microélectronique appliquée Exercices série A

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

Ordinateurs, Structure et Applications

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Conception de circuits numériques et architecture des ordinateurs

Cours Informatique 1. Monsieur SADOUNI Salheddine

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

UE Programmation Impérative Licence 2ème Année

Programmation C. Apprendre à développer des programmes simples dans le langage C

Architecture des ordinateurs

2013 Nos nouveaux outils basés sur Arduino

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

V- Manipulations de nombres en binaire

Le langage C. Séance n 4

PIC EVAL Dev Board PIC18F97J60

Informatique Générale

Les failles Format String

Logiciel de Base. I. Représentation des nombres

Représentation d un entier en base b

Architecture des ordinateurs Introduction à l informatique

EL70x1 en mode position. Mise en œuvre rapide. VERSION : Beta / DATE : 31 Juillet 2011

Algorithme. Table des matières

Les opérations binaires

La mémoire. Un ordinateur. L'octet. Le bit

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Compilation (INF 564)

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

Eclipse atelier Java

GlobalScape Secure FTP Server Buffer Overflow

Structure de base d un ordinateur

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Chap17 - CORRECTİON DES EXERCİCES

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Logiciels DSPiy. DSPiyStudio logiciels et format des fichiers. incomplet

Conventions d écriture et outils de mise au point

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

TP a Notions de base sur le découpage en sous-réseaux

Configuration de TCPIPconfig.h

Installation et compilation de gnurbs sous Windows


GUIDE Excel (version débutante) Version 2013

Cours d Algorithmique et de Langage C v 3.0

1.1 L EXPLORATEUR WINDOWS

Equipement. électronique

Le codage informatique

Manuel de référence du langage Exemples Les aventures de Docteur R.

Architecture des ordinateurs

CONFIGURATION DE L AUTOMATE SIEMENS

TD Architecture des ordinateurs. Jean-Luc Dekeyser

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Introduction à NetCDF

Quelques éléments de compilation en C et makefiles

Chap III : Les tableaux

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Document de formation pour une solution complète d automatisation Totally Integrated Automation (T I A) MODULE A5 Programmation de la CPU 314C-2DP

Rappels Entrées -Sorties

ET LO GICIEL D UN S YS T EME IN FORMATIQUE

Conférence sur les microcontroleurs.

Rappels d architecture

Réalisation d un réseau de capteurs de température sans fil basé sur le protocole ZigBee

sommaire Archives... Archiver votre messagerie... Les notes... Les règles de messagerie... Les calendriers partagés Les listes de diffusions...

CQP 112 Introduc/on à la programma/on. Thème 2 : Architecture d un système informa/que. Département d informa/que

PROGRAMMATION D'UN MICROCONTRÔLEUR

NOTICE SIMPLIFIEE ER-A280F. I Initialisation avec Remise à Zéro de la caisse : ENTER PASSWORD ER-A280V. Ver1.02

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Architecture matérielle des systèmes informatiques

Spécialité Professionnelle. Patrick Boulandet

Contrôle d accès UTIL TP N 1 découverte

Projet audio. Analyse des Signaux ELE2700

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

TS 35 Numériser. Activité introductive - Exercice et démarche expérimentale en fin d activité Notions et contenus du programme de Terminale S

Manuel d utilisation de Wireless Mobile Adapter Utility. Fonctionnalités

FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE

Codage d information. Codage d information : -Définition-

I- Définitions des signaux.

IFT1215 Introduction aux systèmes informatiques

Installation et prise en main

Traitement de données

SIN-FPGA DESCRIPTION PAR SCHEMA

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Programmation C++ (débutant)/instructions for, while et do...while

Cahier Technique Liaison Comptabilité Api / Sage ECF

On distingue deux grandes catégories de mémoires : mémoire centrale (appelée également mémoire interne)

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Transcription:

Structure d un programme en assembleur Microchip propose pour le développement de ses microcontrôleurs, un «environnement de développement intégré» ou IDE, sous la forme d un logiciel du nom de MPLAB, téléchargeable gratuitement sur le site de Microchip. MPLAB permet, entre autres, de développer des programmes en assembleur grâce à un éditeur de code source et au langage MPASM. Ce dernier permet un certain nombre de facilités, dont nous allons voir les plus usuelles. Pour plus d information on se réfèrera à l aide MPASM dans Mplab (menu «Help» ou encore dans le document «MPASM/MPLINK PICmicro MCU Quick Chart». 1 Exemple d un programme simple Programmer un microcontrôleur consiste à écrire une suite de 0 et de1 en mémoire programme. Cette suite sera décrite dans un fichier «.hex» généré par MPLAB à partir de l association de mnémoniques et de directive d assemblage. On trouvera ci-après un programme simple permettant de faire basculer la sortie RB7 du port B d un microcontrôleur PIC16F877. : ; Ce programme génère une horloge en RB0 ; de fréquence 24 fois plus faible que celle du quartz. * ; il utilise la carte PicDem2Plus équipée d'un PIC16F877A * commentaires LIST P=16F877A ; directive qui définit le processeur utilisé #include <P16F877A.INC> ; fichier de définition des constantes ;****************************************************************************** fichiers d en-tête ; BITS DE CONFIGURATION ;****************************************************************************** CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF ; _XS_OSC l'oscillateur est configuré en oscillateur à quartz haute fréquence ; _WDT_OFF le watchdog est désactivé ; _CP_OFF le code de protection de la mémoire programme est désactivé ; _CPD_OFF le code de protection de la mémoire EEPROM est désactivé ; _LVP_OFF la programmation basse tension est désactivée ; ces opérations sont nécessaires pour fonctionner en mode "debug" ; DEMARRAGE SUR RESET * org 0x0 ; Adresse de départ après reset goto debut org 0x10 ; adresse de début du programme debut étiquette ; INITIALISATION * ; initialisation du PORTB en sortie (voir datasheet) adresses en ROM configuration matérielle IUFM Aix Marseille programmation des microcontrôleurs PIC 1/5

bcf STATUS, RP0 bcf STATUS, RP1 ; passage en banque 0 clrf PORTB ; RAZ des bascules D bsf STATUS, RP0 ; passage en banque 1 movlw b'00000000' movwf TRISB ; PORTB en sortie bcf STATUS, RP0 ; retour en banque 0 ; PROGRAMME PRINCIPAL * boucle bsf PORTB,0 ; mise à 1 de la sortie nop ; 2 temps morts pour compenser le saut nop bcf PORTB,0 ; mise à 0 de la sortie fin de programme goto boucle ; rebouclage END ; directive signalant la fin du programme ;******************************************************************************* 1.1 Commentaires et étiquettes Les commentaires, après un «;» sont essentiels pour la compréhension du programme et pour son débogage. Les étiquettes renvoient à des adresses en mémoire programme, sans avoir à se préoccuper du changement de cette adresse lorsqu on ajoute ou retire des instructions. 1.2 Les fichiers d en-tête (header files) Il faut dans un premier temps préciser au compilateur quel processeur nous allons utiliser ; c est le rôle de la directive «LIST». Le programme précédent utilise un certain nombre de constantes (STATUS, PORTB, TRISB ) associées à des registres du PIC, donc à des adresses ; Ces associations sont décrites dans le fichier «include» (par exemple «P16F877A.INC» pour un 16F877A). Ce fichier est localisé dans le dossier «c:\program Files\Microchip\MPASM suite» et peut être lu avec un éditeur de texte. On trouvera ci-après un extrait de ce fichier où l on peut voir la définition des adresses des registres, et la position des bits dans le registre (ici le registre STATUS). ;----- Register Files----------------------------------------- INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' PORTC EQU H'0007' PORTD EQU H'0008' ;----- STATUS Bits --------------------------------------- IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' 1.3 Les directives 1.3.1 La directive «Config» Elle permet de paramétrer le registre de configuration (ce registre est détaillé au chapitre «Special Features of CPU» de la documentation) par une instruction du type : programmation des microcontrôleurs PIC 2/5

Config _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC (Attention : il y a deux «_» avant «Config») Ce registre est écrit une fois pour toutes à la programmation et n est plus accessible par la suite ; il permet de paramétrer matériellement le PIC : - configuration de l oscillateur ; - mise en service ou non du chien de garde ; - mode de fonctionnement au démarrage 1.3.2 La directive «EQU» d assignation Elle permet d assigner des valeurs (comme dans le fichier «.inc»), par exemple : MASQUE EQU 0X45 Il s agit à la fois d une facilité d écriture et un outils précieux pour la compréhension (et donc le «débogage») d un programme. 1.3.3 Les définition par «#define» Fonctionne comme l assignation mais pour un texte. Dans notre programme nous aurions pu écrire par exemple : #DEFINE SORTIE PORTB,0 et remplacer ensuite «bsf PORB,0» par : bsf SORTIE 1.3.4 Les macro-instructions Elles permettent de remplacer une série d instruction par un texte ; attention ce n est qu une facilité d écriture qui ne diminue pas la taille du programme comme le ferait un sous programme. ; exemple : Macro1 macro Suite d instructions.. edm ; fin de la macro L exécution est cependant plus rapide que lors de l appel d un sous programme. Remarque : il est possible de déclarer des étiquettes qui seront propre à la macro (et qui pourront donc avoir le même nom qu une autre étiquette du programme sans risque de confusion) par l instruction «local» exemple : local boucle 1.3.5 La déclaration des variables Permet de définir une zone de variables en RAM, l emplacement et la taille de ces variables ; exemple : CBLOCK 0x20 ; début de la zone variable Variable1 : 1 ; Variable1 a une taille de 1 octet Variable2 : 1 ; Variable2 a une taille de 1 octet tableau : 8 ; tableau est une variable de 8 octets ENDC programmation des microcontrôleurs PIC 3/5

Il faut veiller à ce que l endroit choisit ne soit pas déjà occupé par un registre. Par exemple, sur un PIC16F877A, on peut définir une zone de 96 octets à partir de l adresse 20h. 1.3.6 Les directive ORG et END La directive ORG permet de préciser à quel endroit en ROM son placées les lignes de programme qui suivent. Sur un PIC, après un RESET, le compteur programme pointe l adresse 0x00 ; de plus à l adresse 0X04 se trouve le vecteur d interruption. Le programme commencera donc de la manière suivante : org 0x00 ; adresse pointé après un reset ; l instruction qui va suivre se trouvera à cette adresse goto début ;saut à l étiquette marquant le début du programme org 0x10 ; cette adresse doit être supérieure à 0x04 début ; étiquette marquant le début du programme. end ; fin du programme 1.4 Les règles d écriture 1.4.1 L écriture des variables MPLAB permet de définir un radix par défaut ; cette option peut être modifiée par «Project \ build options \ project \ MPASM assembleur» ; cependant, afin d améliorer la portabilité des programmes, il est conseillé de toujours préciser le radix des paramètres. 0x1A ou H 1A ou 1Ah : notation hexadécimale ; B 10101111 : notation binaire ; D 12 ou.12 : notation décimale. A C ou C : code ASCII 1.4.2 La casse Par défaut MPLAB est sensible à la casse. Cette option peut être modifiée par «project \ build options \ project \ MPASM assembleur». 2 Programmes classiques, astuces et limitations 2.1 Comparer deux nombres Le principe consiste à soustraire les deux nombres et observer les bits Z et C du registre d état. movf nb1, w ; mettre nb1 dans w subwf nb2, w ; soustraire nb2-nb1 Si Z=1, les nombres sont identiques ; si Z=0 et C=1, le résultat est positif, donc nb2 est supérieur à nb1, si Z=0 et C=0, le résultat est négatif, donc nb1 est supérieur à nb2, 2.2 Soustraire une valeur du registre de travail L instruction «sublw 8» soustrait le contenu de «w» à 8, soit (w)-8, si on souhaite faire 8-(w), il faut ajouter le complément à 2 de 8 au contenu de w, soit «addlw 8». programmation des microcontrôleurs PIC 4/5

2.3 Pointer un tableau en mémoire programme L instruction «retlw» revient d un sous programme en plaçant un argument dans le registre «W». On appelle dans un premier temps l endroit où se trouve le tableau, tout en plaçant dans «W» le numéro de la ligne du tableau : movf n_ligne,w ; W pointe la ligne du tableau call SUITE_Fbnc ; recherche du contenu de la ligne Une fois arrivé à l adresse «SUITE_Fbnc», on ajoute au compteur programme le contenu de «W», ce qui permet de sauter à la ligne qui nous intéresse, dont l instruction revoie l argument au programme principal en le plaçant dans «W». SUITE_Fbnc ADDWF PCL,F RETLW d'01' ; première ligne RETLW d'01' ; seconde ligne RETLW d'02' ; troisième ligne RETLW d'03' ; quatrième ligne RETLW d'05' ; cinquième ligne RETLW d'08' ; sixième ligne 2.4 Effacer la RAM par adressage indirecte A la mise sous tension se trouvent des valeurs quelconques dans la RAM : pour mettre toute ces valeurs à 0 on peut utiliser une variable qui devra pointer les emplacements à effacer et qui devra être incrémentée. Cette variable ne peut se situer en RAM sous peine d être effacée à son tour, d où l utilisation de l adressage indirecte L exemple de programme suivant concerne un 16F84 dont la RAM utilisateur se situe en banque 0 entre les adresse 0x0C et 0x4F inclues. d après BIGONOFF (http://www.abcelectronique.com/bigonoff/ ) programmation des microcontrôleurs PIC 5/5