Vous êtes sur la page 1sur 11

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

TP ATR :

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education Board II

Benjamin Becquet

Nicolas de Dreuille 1

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

Introduction :
Nous avons tudi en cours larchitecture des microcontrleurs PIC et leur mode de programmation. Lobjectif de ce TP est de mettre en pratique la partie thorique afin de concrtiser les concepts tudis. A cette fin, nous tenterons dutiliser la carte PICmicro Education Board II comme interface dun programme que nous raliserons pour le microcontrleur.

Prsentation du matriel :
Le Microcontrleur :

Nous utiliserons le Microcontrleur PIC16F877 construit par Microchip.

La carte dinterface :
La programmation dun Microcontrleur ne serait daucune utilit sans une carte dinterface permettant de concrtiser les actions du programme :

Benjamin Becquet

Nicolas de Dreuille 2

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

Cest la fonction de lEducation Board II, celle ci permet en effet de communiquer avec le PIC via un clavier de boutons, un ensemble de LEDS, un cran LCD, des potentiomtres et des capteurs de temprature. Dans ce TP, nous utiliserons les LEDS et les boutons. Attention : lalimentation doit tre comprise entre 7 et 12 volts mais nous avons constat quen dessous de 10 ou si le courant nest pas assez important, la carte a des difficults fonctionner.

Le programmeur :
La programmation dun Microcontrleur ncessite enfin une interface entre le PC et le PIC. Il en existe de plus ou moins sophistiqus, certains permettant mme deffectuer un debuggage temps rel, nous utiliserons le PIC-01 qui a lavantage dtre le moins cher. (avantage certain en ces temps de disette pr-cloture du budget).

Les logiciels :
Nous utiliserons lenvironnement de dveloppement intgr MPLAB dvelopp par Microchip pour programmer le PIC. Comme tout IDE qui se respecte, il permet de crer des projets, dditer les fichiers quil contient et de compiler et linker le tout. MPLAB peut aussi permettre le debuggage du Microcontrleur mais cette opration ncessite un programmeur plus volu et nettement plus onreux. ICPROG sera utilis pour charger les fichiers .hex gnrs par MPLAB.

Benjamin Becquet

Nicolas de Dreuille 3

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

Bon on va peut tre pouvoir le commencer ce TP ?


Allumage dune LED :
Prliminaires : (mme pour Lulu)
Structure dun programme :

Il est tout dabord ncessaire de prsenter la structure dun programme assembleur pour MPASM :
LIST P=16F877 #include "P16F877.INC" __CONFIG _BODEN_ON&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC

Lentte inclut la spcification du Microcontrleur utilis et des paramtres qui ne sont pas le sujet de ce TP.
org goto org goto 0x000 init 0x004 int ;indique la marche suivre en cas d'interruption ;Indique le dbut du programme

La fonction org permet de dfinir les vecteurs de dmarrage du programme et dexcution des interruptions, on utilise gnralement des branchements.
init BSF STATUS , RP0 . . . RETFIE END ;Page d'Adresse 1 -> on a accs aux TRIS (CF M14)

int

Sensuit le corps du programme fini par END. Les instructions sont dtailles partir de la page 26 du cours et les CF en fin de lignes renvoient au cours.

Benjamin Becquet

Nicolas de Dreuille 4

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

Fonctionnement des LEDS :

Comme vous pourrez le voir sur le schma de la carte, les huit LEDS sont montes en sortie des huit pattes du port :

Il suffit donc de mettre un bit sur le registre PORTC afin dobtenir une tension de 5 volts sur la patte correspondante, mais pour cela, il faut tout dabord le configurer en sortie car les ports sont configurs comme entres par dfaut. Le registre TRISC est utilis pour dfinir les entres sorties des ports. Le nime bit du registre dfinit la qualit dentre ou sortie de la nime ligne du port correspondant, un 0 comme Output reprsentant une sortie et un 1 comme Input, une entre (1 par dfaut). Le registre PORTC sera donc mis 0 afin de pouvoir agir sur les LEDS. Nous sommes maintenant assez balaises pour crire le programme. Le premier groupe qui me rend un truc nickel aura la chance de voir son programme excut sur la carte sur sa propre paillasse. Ouaaaah.
; Prcise le PIC utilis LIST P=16F877 #include "P16F877.INC" __CONFIG _BODEN_ON&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF ; Dbut du programme ORG GOTO ORG GOTO init BSF CLRF CLRF BCF 0x000 init 0x004 int STATUS , RP0 INTCON TRISD STATUS , RP0 ;Indique le dbut du programme ;indique la marche suivre en cas d'interruption

;Page d'Adresse 1 -> on a accs aux TRIS (CF M14) ;Mise 0 du vecteur d'interruption -> pas d'interruptions (CF M20) ;Met le TRIS du port D 0 -> port en mode Output ;Page d'Adresse 0 ;Allume la premire LED

MOVLW b'10000000' MOVWF PORTD debut CLRWDT GOTO debut RETFIE END

;clear wdt

int

;!!!Ne pas oublier

Benjamin Becquet

Nicolas de Dreuille 5

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

Utiliser MPLAB :

Nous avons un IDE de professionnel, autant ne pas le ngliger, voici la marche suivre pour diter et compiler le programme : 1. Dmarrez MPLAB : Menu Dmarrer/Programmes/Microchip_MPLAB/MPLAB 2. Crez un nouveau projet : Project/New_Project Je vous laisse linitiative du nom et du rpertoire, mais votre fichier .asm devra se trouver au mme endroit. Attention noubliez pas de changer le mode de dveloppement et dajouter comme nud le fichier pralablement crit. (soit avec notepad comme un vrai dur, soit avec fichier/Nouveau dans MPASM)

3. Project/Make et le fichier .hex est gnr si tout se passe bien. Utiliser ICPROG :

Attention, il vous faut dabord insrer le PIC dans le programmeur : 1. Assurez-vous dabord fond davoir coup toute source de courant susceptible dalimenter le PIC avant de lenlever ou de linsrer dans un support. 2. Insrez-le maintenant dans la carte. 3. Allumez ensuite le courant. Vous pouvez maintenant ouvrir le programme C:\PIC-01\ICPROG.EXE.

Benjamin Becquet

Nicolas de Dreuille 6

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

Configurez comme sur limage. Puis comme suit

Puis ouvrez le fichier .hex gnr prcdemment. Ensuit cliquez sur Command/Erase All Et Command/Program All Caf !!!! Une fois le PIC programm remettez le sur la carte en prenant les prcautions susmentionnes. Voil, a fonctionne. Nous allons maintenant tenter dallumer cette LED en appuyant sur un bouton.

Benjamin Becquet

Nicolas de Dreuille 7

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II

Allumage dune LED laide dun bouton :


Une question peut tre ? Comment fonctionnent ces boutons ? Cest trs simple : Ils sont cbls en matrice de trois colonnes (seulement les trois colonnes de droite, les autres ne sont pas cbls de la mme faon) et de quatre lignes. Les sorties RA2 RA5 et RC2 sont multiplexes (0 = select) avec les entres RB1 RB2 RB3 RB4 qui sont mises 1 par un pull up interne. Le fait de presser un bouton provoque une sortie multiplexe qui met le courant 0. Heu un petit schma et a ira mieux vous verrez :

En gros, si RA2 est 0 et S3 enfonc alors RB4 est 0 et cest tout ce quon veut savoir pour linstant. Nous sommes maintenant en mesure de comprendre le programme suivant : Afin de dtecter le bouton, nous utiliserons le polling : mthode qui consiste tester en boucle le registre correspondant.
; Prcise le PIC utilis LIST P=16F877 #include "P16F877.INC" __CONFIG _BODEN_ON&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF

; Ddut du programme ORG GOTO ORG GOTO init BSF CLRF BCF CLRF 0x000 init 0x004 int STATUS , RP0 INTCON OPTION_REG,7 TRISD ;Indique le dbut du programme

;indique la marche suivre en cas d'interruption

;Page d'Adresse 1 -> on a accs aux TRIS (CF M14) ;Mise 0 du vecteur d'interruption -> pas d'interruptions (CF M20) ;Mise 0 du bit 7 d'option (CF M19) (The big @#$ truc de fouine) ;Met le TRIS du port D 0 -> port en mode Output

Benjamin Becquet

Nicolas de Dreuille 8

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II


BCF TRISC,2 BCF TRISA,2 BCF TRISA,5 MOVLW B'00011110' MOVWF TRISB BCF BSF BSF BCF debut STATUS , RP0 PORTC,2 PORTA,5 PORTA,2 ;Met le bit 2 du port C et les bits 2 et 5 du port A en sortie

;Met les bits 1 4 du port B en entre

;Page d'Adresse 0 ; ; ;Teste la troisime colonne ;clear wdt ;Teste l'appui du bouton ;S'il est appuy, on va KeyOn ;Sinon on eteint tout.

CLRWDT BTFSS PORTB,4 GOTO KeyOn MOVLW b'00000000' MOVWF PORTD GOTO debut MOVLW B'11111111' MOVWF PORTD GOTO debut RETFIE END

KeyOn

int

Le premier qui finit a encore une fois le droit dexhiber, hum, son programme devant tout le monde. Et gagne un BN.

Allumage dune LED laide dune interruption (CF M22):


Comme vous savez tout sur les interruptions, inutile de vous dire que dans notre cas suffisent les bits 3 et 7 dINTCON soit le bit associ au PORTB et le gnral.
; Prcise le PIC utilis

LIST P=16F877 LIST r=dec,x=on,t=off #include "P16F877.INC" __CONFIG _BODEN_ON&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF

; Variables cblock H'20' W_TEMP STATUS_TEMP endc ; Ddut du programme org goto ORG goto init BSF BCF CLRF BCF 0000h init 0004h int STATUS , RP0 OPTION_REG,7 TRISD TRISC,2 ;Page d'Adresse 1 -> on a accs aux TRIS ;Mise 0 du bit 7 d'option (CF M19) ;Met le TRIS du port D 0 -> port en mode Output ;Met le bit 2 du port C et les bits 2 et 5 du port A en sortie

;Nous aurons besoin de variables afin de ;stocker les registres susceptibles d'tre modifis lors de l'interruption

Benjamin Becquet

Nicolas de Dreuille 9

Sbastien Durand

Programmation du microcontrleur PIC16F877 Sur la carte PICmicro Education board II


BCF TRISA,2 BCF TRISA,5 movlw B'00011110' movwf TRISB

;Met les bits 1 4 du port B en entre

BCF

STATUS , RP0

;Page d'Adresse 0

MOVLW b'10001000' MOVWF INTCON boucle clrwdt MOVLW b'10101010' MOVWF PORTD BSF PORTC,2 BSF PORTA,5 BCF PORTA,2 goto boucle

;On allume 4 des LEDS ; ; ;Teste la troisime colonne

int

clrwdt BTFSS CLRF movwf swapf movwf

INTCON,0 INTCON W_TEMP STATUS,W STATUS_TEMP b'01010101' PORTD PORTB,4 boucle2

;On teste la provenance de l'interruption ;on inhibe les IT ;On sauve tout dans la RAM ;On peut le faire aussi ans la pile mais pas l :)

MOVLW MOVWF boucle2 clrwdt BTFSS goto swapf movwf swapf swapf MOVLW MOVWF RETFIE END

;A vous de comprendre ;vous tes pas des moules

fin

STATUS_TEMP,W ;voil c'est fini STATUS ;on retablit tout mme Z W_TEMP,F ; W_TEMP,W ; b'10001000' INTCON ;On finit l'IT

Maintenant vous savez tout et il vous reste un peu de temps pour mettre vos connaissances profit : Celui qui crit le programme le plus original et le plus beau remporte le paquet de BN !!! Par exemple : un programme pourra afficher diffrentes squences sur les LEDS selon le bouton enfonc.

Benjamin Becquet

Nicolas de Dreuille 10

Sbastien Durand