Вы находитесь на странице: 1из 10

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION)

page 1 / 10

TP DINITIATION AU LANGAGE C
I. TP Clignotement de RB0 A. Prsentation
L'objectif est de faire clignoter une LED la frquence de 1Hz. Pour cela, il faudra qu'elle soit allume pendant 0,5s puis teinte pendant aussi pendant 0,5s. La LED utilise est connecte sur le bit 0 du port B.

C. Algorithme
Proposer un algorithme structur traduisant lordinogramme prcdent.

DEBUT ALGORITHME FAIRE RB0 RB5 en sortie et RB6 RB7 en entre

B. Ordinogramme
Dbut

TANT QUE 1=1 FAIRE RB0=1

RB0 RB5 en sortie RB6 et RB7 en entre

FAIRE Temporisation 0,5s


FAUX

FAIRE RB0=0 FAIRE Temporisation 0,5s FIN TANT QUE

1=1 ? VRAI RB0=1

Temporisation 0,5s

RB0=0

Temporisation 0,5s

Fin

FIN ALGORITHME

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) // Dfinitions des Fonctions void Configuration_PORTB(void) { TRISB=0b11000000; } void Allumer_RB0(void) { RB0=1; } void Eteindre_RB0(void) { RB0=0; } // Fonction principales void main(void) { Configuration_PORTB(); while(1) { Allumer_RB0(); DelayMs(250); DelayMs(250); Eteindre_RB0(); DelayMs(250); DelayMs(250); } } // 250ms + 250ms = 0,5s // 250ms + 250ms = 0,5s // Rpter toujours // RB0 mis 0 // RB0 mis 1 // RB0 RB5 en sortie // RB6 et RB7 en entre

page 2 / 10

D. Programme en langage C 1. a) Consignes Fonction prdfinie

Pour raliser la temporisation de 500ms, nous utiliserons une fonction prdfinie du fichier delay.h : DelayMs(x). Pour appeler cette fonction, il suffit dutiliser la syntaxe prcdente en remplacant x par la dure en milliseconde. La valeur de x ne doit pas excder 255. Remarque : Le fichier delay.h doit tre ajout comme fichier dentte et le fichier delay.c doit tre inclus au projet MPLAB.

b) Fonction crer
Afin de structurer le programme, la fonction main devra appeler les fonctions suivantes : Configuration_PORTB() qui doit fixer la direction de RB0 RB7. Allumer_RB0() qui doit faire passer RB0 1. Eteindre_RB0() qui doit faire passer RB0 0. Laccs la Bank0 et Bank1 se fait automatiquement grce au fichier pic16f6x.h

2.

Programme en C
// Fichier de dfinition des // adresses des registres des // PIC de la famille 16F6x

#include <pic16f6x.h>

#include <pic.h> #include <delay.h>

// Fichier de fonctions prdfinies // Fichier de fonctions prdfinies // pour temporisations logiciels

// le fichier delay.h doit tre dans le rpertoire des fichiers dentte sinon il faut le mettre entre guillemets "delay.h" et le placer avec dans le rpertoire du fichier source // Directives dassemblage __CONFIG(MCLRDIS & LVPDIS & PWRTEN & BORDIS & \ UNPROTECT & DATUNPROT & WDTDIS & XT);

E. Exprimentation
Saisir et tester votre programme sur les maquettes PIC en utilisant le projet MPLAB prvu cet effet.

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION)

page 3 / 10

II.

TP Lecture et affichage de ltat des boutons poussoirs

C. Algorithme
Proposer un algorithme structur traduisant lordinogramme prcdent.

A. Prsentation
L'objectif est de lire l'tat des boutons poussoirs connects sur le port A (RA0 RA3). L'tat de chaque boutons sera visualis par une LED. Les LED sont connectes sur le port B. Nous utiliserons les LED 0 3.

DEBUT ALGORITHME FAIRE Inhiber les comparateurs

B. Ordinogramme
Dbut

FAIRE RB0 RB5 en sortie et RB6 RB7 en entre FAIRE PORTA en entre TANT QUE 1=1

Inhiber les comparateurs ( CMCON=(00000111)2 ) RB0 RB5 en sortie RB6 et RB7 en entre

FAIRE Lecture PORTA FAIRE PORTB = PORTA . (00001111)2 FIN TANT QUE

PORTA en entre

1=1 ? VRAI Lecture du PORTA

FAUX

Ne garder que RA0 RA3 (Forcer les autres 0)

criture du rsultat dans le PORTB

Fin

FIN ALGORITHME

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) void Configuration_PORTB(void) { TRISB=0b11000000; } void Configuration_PORTA(void) { TRISA=0b11111111; } void Lecture_et_Affichage(void) { // PORTA en entre // RB0 RB5 en sortie // RB6 et RB7 en entre

page 4 / 10

D. Programme en langage C 1. a) Consignes Fonction prdfinie

Le programme nutilisera pas de fonction prdfinie.

b) Fonction crer
Afin de structurer le programme, la fonction main devra appeler les fonctions suivantes : Inhiber_comparateur() qui doit inhiber le fonctionnement des comparateur afin dutiliser le PORTA en entre numrique. Configuration_PORTB() qui doit fixer la direction de RB0 RB7. Configuration_PORTA() qui doit fixer la direction de RA0 RA7. Lecture_et_Affichage() qui doit lire ltat des quatre bits de poids faible du PORTA et afficher le rsultat sur le PORTB. RB4 RB7 doivent tre forcs 0.

2.

Programme en C
// Fichier de dfinition des adresses des // registres // des PIC de la famille 16F6x }

PORTB=PORTA & 0b00001111; // Recopie du PORTA sur le PORTB // avec masquage 0 de RA4 RA7 // Fonction principales void main(void) { Inhiber_comparateur(); Configuration_PORTB(); Configuration_PORTA(); for(;;) { Lecture_et_Affichage(); } } // Une autre syntaxe possible pour // boucle sans fin (non standard)

#include <pic16f6x.h>

#include <pic.h> // Directives dassemblage

// Fichier de fonctions prdfinies

__CONFIG(MCLRDIS & LVPDIS & PWRTEN & BORDIS & \ UNPROTECT & DATUNPROT & WDTDIS & XT); // Dfinitions des Fonctions void Inhiber_comparateur(void) { CMCON=0b00000111; } // Inhibition des comparateurs // donc PORTA en entre numrique

E. Exprimentation
Saisir et tester votre programme sur les maquettes PIC en utilisant le projet MPLAB prvu cet effet.

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION)

page 5 / 10

III. TP chenillard simple dfilement A. Prsentation


L'objectif est de raliser un chenillard qui a un seul sens de dfilement. La premire LED s'allumer est la LED1 relie RB0. La LED2 sallume 0,5 seconde plus tard et ainsi de suite jusqu la LED6. Ce cycle recommence ensuite indfiniment.

C. Algorithme
Proposer un algorithme structur traduisant lordinogramme prcdent. Remarque : Le premier test correspond une structure rptitive et le second test une structure rptitive contrle.

B. Ordinogramme
Dbut

DEBUT ALGORITHME FAIRE RB0 RB5 en sortie et RB6 RB7 en entre TANT QUE 1=1
FAUX 1=1? VRAI PORTB = (00000001)2

RB0 RB5 en sortie et RB6 et RB7 en entre

POUR PORTB = (00000001)2 PORTB.(00111111)2 0 et par dcalage gauche de 1 FAIRE Temporisation 0,5s
FAUX

PORTB.(00111111)2 0? VRAI Temporisation 0,5s

FIN POUR FIN TANT QUE

Dcalage gauche du PORTB

Fin

Remarque : Le deuxime test comporte un masque (ET logique) car nous ne connaissons pas la valeur de RB6 et RB7 qui sont en entre sur nos carte PIC.

FIN ALGORITHME

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) // Fonction principales void main(void) { Configuration_PORTB(); while(1) {

page 6 / 10

D. Programme en langage C 1. a) Consignes Fonction prdfinie

Pour raliser la temporisation de 500ms, nous utiliserons une fonction prdfinie du fichier delay.h : DelayMs(x). Pour appeler cette fonction, il suffit dutiliser la syntaxe prcdente en remplacant x par la dure en milliseconde. La valeur de x ne doit pas excder 255. Remarque : Le fichier delay.h doit tre ajout comme fichier dentte et le fichier delay.c doit tre inclus au projet MPLAB.

for(PORTB=0b00000001;PORTB&0b00111111;PORTB=PORTB<<1) { DelayMs(250); DelayMs(250); } } }

b) Fonction crer
Afin de structurer le programme, la fonction main devra appeler les fonctions suivantes : Configuration_PORTB() qui doit fixer la direction de RB0 RB7.

2.

Programme en C
// Fichier de dfinition des adresses des // registres // des PIC de la famille 16F6x

#include <pic16f6x.h>

#include <pic.h> #include <delay.h>

// Fichier de fonctions prdfinies // Fichier de fonctions prdfinies // pour temporisations logiciels // voir note page 2

// Directives dassemblage __CONFIG(MCLRDIS & LVPDIS & PWRTEN & BORDIS & \ UNPROTECT & DATUNPROT & WDTDIS & XT); // Dfinitions des Fonctions

E. Exprimentation
Saisir et tester votre programme sur les maquettes PIC en utilisant le projet MPLAB prvu cet effet.

IV. TP chenillard deux sens de dfilement


void Configuration_PORTB(void) { TRISB=0b11000000; } // RB0 RB5 en sortie // RB6 et RB7 en entre

A. Prsentation
L'objectif est de raliser un chenillard a deux sens de dfilement. La premire LED s'allumer est la LED1 relie RB0. La LED2 sallume 0,5 seconde plus tard et ainsi de suite jusqu la LED6. Ensuite, cest au tour de la LED5 de sallume pour revenir la LED1.

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION)

page 7 / 10

B. Algorithme
Dbut

DEBUT ALGORITHME FAIRE RB0 RB5 en sortie et RB6 RB7 en entre TANT QUE 1=1 POUR PORTB = (00000001)2 PORTB.(00111111)2 0 et par dcalage gauche de 1 FAIRE Temporisation 0,5s FIN POUR POUR PORTB = (00010000)2 PORTB.(00111110)2 0 et par dcalage droite de 1 FAIRE Temporisation 0,5s FIN POUR FIN TANT QUE FIN ALGORITHME

RB0 RB5 en sortie et RB6 et RB7 en entre FAUX 1=1? VRAI PORTB = (00000001)2

PORTB.(00111111)2 0? VRAI Temporisation 0,5s

FAUX

Dcalage gauche du PORTB

PORTB = (00010000)2 FAUX PORTB.(00111110)2 0? VRAI Temporisation 0,5s PORTB = (PORTB.(00111111)2)>>1

C. Ordinogramme
Proposer un ordinogramme structur traduisant lalgorithme prcdent en prenant soin de masquer les bits RB6 et RB7 qui sont entre sur nos cartes lectroniques. Fin

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) // Fonction principales void main(void) { Configuration_PORTB(); while(1) {

page 8 / 10

D. Programme en langage C 1. a) Consignes Fonction prdfinie

Pour raliser la temporisation de 500ms, nous utiliserons une fonction prdfinie du fichier delay.h : DelayMs(x). Pour appeler cette fonction, il suffit dutiliser la syntaxe prcdente en remplacant x par la dure en milliseconde. La valeur de x ne doit pas excder 255. Remarque : Le fichier delay.h doit tre ajout comme fichier dentte et le fichier delay.c doit tre inclus au projet MPLAB.

for(PORTB=0b00000001;PORTB&0b00111111;PORTB=PORTB<<1) { DelayMs(250); DelayMs(250); }


for(PORTB=0b00010000;PORTB&0b00111110;PORTB=(PORTB&0b00111111)>>1)

b) Fonction crer
Afin de structurer le programme, la fonction main devra appeler les fonctions suivantes : Configuration_PORTB() qui doit fixer la direction de RB0 RB7.

2.

Programme en C
// Fichier de dfinition des adresses des // registres // des PIC de la famille 16F6x } }

{ DelayMs(250); DelayMs(250); }

#include <pic16f6x.h>

#include <pic.h> #include <delay.h>

// Fichier de fonctions prdfinies // Fichier de fonctions prdfinies // pour temporisations logiciels // voir note page 2

E. Exprimentation
Saisir et tester votre programme sur les maquettes PIC en utilisant le projet MPLAB prvu cet effet. Que ce passe-t-il si la condition du dernier teste est PORTB.(00111111)2 0 ? Modifier votre programme et commenter le rsultat obtenu.

// Directives dassemblage __CONFIG(MCLRDIS & LVPDIS & PWRTEN & BORDIS & \ UNPROTECT & DATUNPROT & WDTDIS & XT); // Dfinitions des Fonctions void Configuration_PORTB(void) { TRISB=0b11000000; } // RB0 RB5 en sortie // RB6 et RB7 en entre

La combinaison 00000001 saffiche durant 1 seconde au lieu de 0,5s.

V.

TP lecture de ltat des boutons poussoirs et clignotement de la LED5

A. Prsentation
L'objectif est dafficher sur LED1 LED4 (RB0 RB3) l'tat des boutons poussoirs SW1 SW4 (RA0 RA3) tout en faisant clignoter 1Hz la LED5 (RB4).

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION)

page 9 / 10

B. Algorithme

Dbut Inhiber les comparateurs ( CMCON=(00000111)2 ) RB0 RB5 en sortie RB6 et RB7 en entre PORTA en entre PORTB=0 FAUX 1=1 ? VRAI RB4= /RB4 i=0

DEBUT ALGORITHME FAIRE Inhiber les comparateurs FAIRE RB0 RB5 en sortie et RB6 RB7 en entre FAIRE PORTA en entre FAIRE PORTB = 0 TANT QUE 1 = 1 FAIRE RB4 = /RB4 FAIRE i = 0 FAIRE FAIRE RB0=RA0 RB1=RA1 RB2=RA2 RB3=RA3 FAIRE i = i +1 FAIRE Temporisation 250ms TANT QUE i < 2 FIN TANT QUE FIN ALGORITHME
VRAI RB0=RA0 RB1=RA1 RB2=RB2 RB3=RB3 i = i +1 Temporisation 250ms I<2 ? FAUX

C. Ordinogramme
Proposer un ordinogramme structur traduisant lalgorithme prcdent. Fin

TP PROGRAMMATION

INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) char Lecture_Poids_Faible(char a) { RB0=RA0; et RB1=RA1; RB2=RA2; RB3=RA3; a=a+1; return a; } // Fichier de dfinition des registres // Fichier de fonctions prdfinies // Fonctions tempo voir note page 2 // Fonction principales void main(void) { char i; Inhiber_comparateur(); Configuration_PORTB(); Configuration_PORTA(); PORTB=0; while(1) { RB4=!RB4; i=0; do { i=Lecture_Poids_Faible(i); DelayMs(250); // RB0 RB5 en sortie // RB6 et RB7 en entre } } } while(i<2); // Tant que i<2 // Basculement de RB4 // Boucle sans fin

page 10 / 10

D. Programme en langage C 1. Consignes

Afin de structurer le programme, la fonction main devra appeler les fonctions suivantes : Inhiber_comparateur(), Configuration_PORTB(), Configuration_PORTA() DelayMs(x) identiques celles utilise prcdemment.

char Lecture_Poids_Faible(char a) qui doit lire ltat des quatre bits de poids faible du PORTA et les afficher sur les quatre bits de poids faible du PORTB. Elle doit galement incrmenter la variable passe en paramtre et retourner cette valeur.

2.

Programme en C

#include <pic16f6x.h> #include <pic.h> #include <delay.h> // Directives dassemblage

// Dclaration dune variable i

__CONFIG(MCLRDIS & LVPDIS & PWRTEN & BORDIS & \ UNPROTECT & DATUNPROT & WDTDIS & XT); // Dfinitions des Fonctions void Inhiber_comparateur(void) { CMCON=0b00000111; } void Configuration_PORTB(void) { TRISB=0b11000000; } void Configuration_PORTA(void) { TRISA=0b11111111; } // PORTA en entre // Inhibition des comparateurs // donc PORTA en entre numrique

// initialisation de i 0 // Dbut boucle Faire

E. Exprimentation
Saisir et tester votre programme sur les maquettes PIC en utilisant le projet MPLAB prvu cet effet.

Вам также может понравиться