Introduction aux microprocesseurs - sin.begincoding.net2017-04

publicité
LABORATOIRE 1 | Systèmes d’information
Introduction aux microprocesseurs
But du laboratoire (4 périodes)
1.
Le but de ce laboratoire est de vous familiariser avec les outils de cross-développement mis à disposition
pour les labos. Dans le même temps, vous allez faire vos premiers pas en langage assembleur Microchip
sur une cible matérielle.
2.
Vous devez réaliser ce laboratoire par groupe de deux personnes.
3.
La durée estimée pour réaliser ce laboratoire est de quatre périodes.
4.
Vous trouverez toutes les fichiers relatifs aux labos sur http://sin.begincoding.net
Partie 1 – L’outil MPLAB X
Pour les laboratoires utilisant le microprocesseur PIC, vous allez utiliser l’environnement de développement
gratuit MPLAB X. Celui-ci ressemble beaucoup à Eclipse que vous connaissez bien. Grâce à MPLAB, il est
possible d’écrire des programmes en assembleur pour les processeurs PIC. Le langage de programmation C
est également supporté et nous l’utiliserons plus tard dans le semestre.
La majeure différence par rapport à Eclipse est que MPLAB permet d’écrire du code destiné à un processeur se
trouvant sur une carte de développement : on parle dans ce cas de développement croisé ou cross-development.
Le schéma suivant en montre le principe de fonctionnement :
USB
PICEBS2 with PICKIT3
Un PC est relié via USB à une carte de développement appelée PICEBS2. Cette carte a été développée à l’école.
Elle est équipée du programmateur dédié de Microchip PICKIT3™. Vous trouverez sur internet
http://picebs2.hevs.ch toute la documentation relative à cette carte.
Pour créer un nouveau projet, suivez les étapes suivantes :
1.
2.
3.
4.
5.
6.
7.
Cliquez sur File  New project
Choisissez la catégorie Microchip embedded  Standalone project.
Dans la famille, choisissez Advanced 8-bit MCU et le device PIC18F87K22.
Choisissez ensuite comme outil PICKit3.
Comme compilateur, choisissez mpasm car nous allons faire de l’assembleur durant ce labo.
Choisissez ensuite où vous désirez sauver votre projet. Mettez-le sur le disque U:
Le projet est ensuite créé.
Pierre-André Mudry, Pascal Sartoretti | Systèmes industriels, v2.1
1/4
Partie 2 – Premiers pas en assembleur
Soit le programme suivant, écrit en assembleur :
01 #include <conf_bits.inc>
02
03 init:
04
movlw
0x00
05
movwf
TRISH
06
movlw
0xAA
07
movwf
LATH
08
09 loop:
10
goto loop
11
12
end
; processor description file
;
;
;
;
move
move
move
move
literal value 0x00 to W
the content of W to TRISH, set pins as output
literal value 0xAA to W
W to LATH
Explications succinctes du code
Nous allons parcourir pas-à-pas ce programme. La première ligne de ce programme permet d’importer les
différentes spécificités (noms de registres, nombre de pins etc…) relatif au microprocesseur que nous utilisons,
le 18F87k22.
Le programme commence à la ligne 04 avec les instructions mov** permettent de déplacer des valeurs dans
le datapath du processeur. Finalement, l’instruction goto est un saut à un endroit donné (on parle de label). Ici,
lorsque la ligne 10 va être exécutée, le code va sauter à la ligne 09 et va donc faire une boucle infinie. C’est une
manière assez standard de terminer les petits exemples que nous allons rencontrer.
Tâche 1
Vous devez maintenant réaliser les points suivants
1.
2.
3.
4.
5.
6.
7.
Créez un nouveau projet que vous nommerez lab1_task1.
Téléchargez le fichier de configuration conf_bits.inc au travers du wiki http://picebs2.hevs.ch,
section : Software.
Ajoutez ce fichier au projet (clic droit sur le dossier Source file du projet dans la fenêtre de gauche) 
Add existing item…
Ajoutez un fichier assembleur vide (clic droit sur le dossier Source file du projet dans la fenêtre de
gauche)  New pic_8b_simple.asm. Effacez le contenu remplacez-le par le code ci-dessus.
Compilez ce code et essayer de le télécharger dans le uP (à l’aide de la commande Run  Run main
project). Normalement, le programme devrait allumer les quatre leds RH1, RH3, RH5 et RH7 se trouvant
sur la carte.
En modifiant une ligne du code ci-dessus, faites en sorte d’allumer les quatre autres LED (RH0, RH2,
RH4 et RH6).
Selon vous, comment l’instruction goto peut-elle faire revenir le code en arrière ? Que va-t-elle
modifier ?
.................................................................................................................................................................................
.................................................................................................................................................................................
.................................................................................................................................................................................
8.
Modifiez maintenant le code de manière à pouvoir afficher alternativement les deux motifs de led
(RH0..RH6 et RH1..RH7). Vous n’avez pas besoin d’autres instructions que celles données ci-dessus.
Pierre-André Mudry, Pascal Sartoretti | Systèmes industriels
2/4
Tâche 2
Une fois le programme réalisant le clignotement alternatif réalisé, branchez un oscilloscope sur les pins RH1 et
RH0. Vous verrez probablement un résultat tel que celui-ci :
Sur cette image, on voit sur la probe du haut la pin RH1 et sur la probe du bas la pin RH0. Comme vous pouvez
le voir, la pin du haut est plus souvent allumée qu’éteinte alors que la situation est inversée en bas. Faites la
même mesure sur votre carte et vous aurez très certainement une situation similaire.
1.
Expliquez pourquoi :
.........................................................................................................................................................................................
.........................................................................................................................................................................................
.........................................................................................................................................................................................
.........................................................................................................................................................................................
2.
3.
Modifiez votre code pour avoir chaque LED allumée exactement durant la même durée. Si nécessaire,
vous pouvez utiliser une instruction appelée NOP et qui ne fait rien durant le temps d’une opération
(NOP signifie No OPeration).
Selon vous, est-il possible de se passer de l’opération NOP dans cet exemple précis ?
.........................................................................................................................................................................................
.........................................................................................................................................................................................
.........................................................................................................................................................................................
.........................................................................................................................................................................................
4.
A quelle vitesse tourne le processeur ?
........................................................................................................................................................................................
........................................................................................................................................................................................
........................................................................................................................................................................................
........................................................................................................................................................................................
Pierre-André Mudry, Pascal Sartoretti | Systèmes industriels
3/4
Partie 3
Vous allez maintenant travailler à réaliser des fonctionnalités de base utilisant les leds. Pour ce faire, vous allez
vous baser sur la datasheet du PIC qui se trouve sur le wiki de l’école (http://picebs2.hevs.ch) et qui représente
votre principale source d’informations pour les laboratoires.
Tâche 3
1.
2.
3.
Créez un nouveau projet que vous nommerez lab1_task3.
Ajouter un nouveau fichier assembleur et copiez-y le code que vous avez réalisé dans la tâche
précédente.
Modifiez ce code de manière à ce que la led allumée corresponde au bouton (actif haut) appuyé.
a. Si le bouton gauche est appuyé (sur la pin RB0), la led gauche LB0 (RA2/RA3) doit être allumée)
b. Si le bouton droit est appuyé (pin RB4), la led droite sera allumée LB2 (RA6/RA7).
c. Faites la même chose pour le bouton central.
Note : Pour réaliser ce comportement, vous avez besoin d’une nouvelle instruction, à savoir btfsc f,
b, qui signifie Bit Test F and Skip if Clear. Par exemple :
btfsc WREG, 1
goto loop
movlw 0xff
signifie que si le bit 1 de WREG vaut 0, l’instruction goto loop ne sera pas exécutée. Si le bit 1 de W
vaut 1, le goto sera exécuté.
4.
Faites en sorte de changer la couleur des leds des boutons appuyés/relâchés.
Tâche 4
1.
2.
3.
Créez un nouveau projet que vous nommerez lab1_task4.
Ajouter un nouveau fichier assembleur et copiez-y le code de base.
Réalisez l’application suivante : au départ, la led « top (RH0) » est allumée. À chaque pression du bouton
« right », la led suivante en dessous s’allume et toutes les autres leds s’éteignent. De la même manière,
une pression « left » allumera la led du dessus.
Le plus simple pour réaliser ce comportement est d’utiliser les
instructions de rotation de bit (que vous trouverez dans le manuel de
référence PIC). L’idée est de mettre une valeur sur le port H puis de le
faire tourner dans un sens ou l’autre en fonction des boutons.
Attention toutefois : pour relire le port H, n’utilisez pas le registre
PORTH mais le registre LATH. À l’aide du schéma ci-joint,
représentant une vue simplifiée d’une pin de PIC, expliquez pourquoi
il faut impérativement utiliser les bits LATH dans ce cas :
4.
.................................................................................................................................................................................
.................................................................................................................................................................................
.................................................................................................................................................................................
.................................................................................................................................................................................
.................................................................................................................................................................................
Réalisez le même comportement pour les 10 leds, jusqu’aux deux leds les plus basses qui sont
connectées sur le port G (RG3 et RG4).
Pierre-André Mudry, Pascal Sartoretti | Systèmes industriels
4/4
Téléchargement