TP pic en C

4

Click here to load reader

Transcript of TP pic en C

Page 1: TP pic en C

TP PIC

I/ Objectifs:- connaître les structures de base;- connaître les instructions réalisant les structures de base;- connaître quelques instructions spécifiques du langage C de CSS dédiées au PIC;- faire exécuter un programme sur une maquette;- savoir modifier un programme existant.

II/ Description du système d'initiation à la programmation

L’écriture du programme dans la mémoire flash du PIC 16F876 se fait par l'intermédiaire d'un moduleconnecté au PC (ICD) identique à celui utilisé avec MPLAB , ce module permet également un dialogue avec lePIC de la cible ( maquette pédagogique) afin de faire le "debuggage" du programme ( pas à pas, points d'arrêts,modification directe des registres . . ).

Le logiciel CCS PCW permet de réaliser toutes les étapes nécessaires à la conception d'un programme en Cpour PIC.

- édition (écriture du programme source),- compilation sur PC (génération du programme binaire au format HEX ),- chargement par le module ICD du programme en mémoire flash,- exécution ou "débuggage" du programme.

Le programme source a une extension .c (ex : prog1.c), lors de la compilation, le fichier binaire (ex:prog1.HEX)est généré, un fichier listing ou apparaissent les instructions en assembleur réalisant le programme en C, cefichier a l’extension lst( ex : prog1.lst).

III/ Utilisation du système de développementLe TP se fera à l’aide d'une maquette pédagogique possédant:

- deux boutons poussoir- une LED- deux afficheurs à anodes communes multiplexés.

Connecter l'ensemble comme représenté ci-dessus.

PC+

CCS(PCW)

Module ICDdialogue PC-ICDpar liaison série

- édition- compilation- mise au point

RB6, RB7RB3,MCLR

INITIATION A LA PROGRAMMATION DU MICROCONTROLEUR PIC 16F876EN LANGAGE C

PIC à programmer

maquette pédagogique

Page 2: TP pic en C

1) exécution d'un programme existant avec module ICDIl faut au préalable que le module ICD ait été programmé afin de pouvoir fonctionner avec CCS.(si cela n'a pas été fait, lancer le programme ICD et changer le firmware en choisissant celui pour PIC16)

On désire faire exécuter le programme en C exécutant la même chose que celui étudié en assembleur, c'est-à-dire allumer la led quand on appuie sur le bouton poussoir connecté 0 RB1, pour cela réaliser les opérationssuivantes :

- lancer le logiciel de développement PCW (PIC C compiler ou PIC demo) et exécuter lesopérations suivantes

Ouvrir le programme "prog1.c" placé dans le répertoire "D:\tpccs"Compiler le programme, c'est-à-dire transformer les instructions en C en instructions en

assembleur puis en code binaire. Lancer le debugger comme indiqué ci-dessous, la programmation se fait automatiquement

A partir de maintenant, plusieurs opérations sont possibles, on peut: faire exécuter le programme en appuyant sur GO. arrêter le programme en appuyant sur S. une fois le programme arrêté, l'exécuter en pas à pas (symbole de pieds), modifier des données

en RAM et placer des points d'arrêt.

Faire exécuter le programme et vérifier son fonctionnement.

Arrêter le programme et le faire exécuter en pas à pas en vérifiant que le déroulementchange quand on appuie sur le bouton poussoir.

2) exécution d'un programme existant sans module ICD

Comme pour MPLAB, pour que le programme puisse fonctionner sans module ICD, il faut dévalider le modedébuggage en plaçant en commentaire ou en supprimant la ligne suivante: //#device ICD=TRUE etrecompiler. Il faut ensuite programmer le PIC par le programme ICD.

Faire les opérations nécessaires afin que le programme s'exécute avec la maquette seule. (il fautprogrammer le PIC avec le fichier .HEX généré lors de la compilation après avoir dévalidé l'option ICD)

3) modification d'un programme existant

Modifier le programme afin que ce soit SW2 qui agisse sur la led et que celle-ci s'éteigne quand onappuie sur SW2.

Sans rajouter de ligne au programme modifier le programme afin que ce soit l'appui sur SW1 et SW2qui allume la led. (utiliser le ET logique)

Dans le programme précédent nous avons utilisé « IF … ELSE » (si SW1 actionné, on allume la ledsinon on éteint la led), on peut également présenter le fonctionnement de la manière suivante: Tant que l'onappuie sur SW1 on allume la led. Dessiner l'algorigramme correspondant à l'instruction WHILE en pensant àéteindre la led après l'appui sur BP1

Ecrire et tester le programme utilisant l'instruction WHILE.

Page 3: TP pic en C

4) Quelques instructions spécifiques au PIC

Dans le programme précédent, il a été possible de voir les points suivants:

définitions des broches: ex: "#define LED pin_c7" La variable LED correspond au bit 7du PORTC.

mise à zéro ou à un d'une sortie: ex: "output_high(LED);" ou "output_low(LED);"La broche correspondant à LED est soit mise à un, soit mise à zéro.

lecture de l'état d'une entrée: ex: "input(SW1)" Cette instruction renvoie 0 ou 1 correspondantà l'état logique de la broche nommée SW1.

Il peut être rapidement nécessaire de connaître les instructions suivantes:

temporisation: Il existe les instructions de temporisation en millisecondes ("delay_ms()") ouen microsecondes ("delay_us()")ex: delay_us(25); = temporisation de 25µs.

écriture de 8 bits sur un port: ex "output_a (value)" Il y a écriture de la donnée 'value' surle port A, pour les autres ports il faut modifier la lettre du port (ex: output_b pour le port B).

lecture des 8 bits d'un port: ex: "value = input_a()" La variable 'value' prend la valeurcorrespondante au code formé par les 8 bits du port A, comme précédemment, if faut changer le lettre pour lesautres ports.

Validation ou dévalidation des résistances de rappel du portB: " port_b_pullups(FALSE ouTRUE);"

Ecriture dans les registres de direction TRIS: "set_tris_a (value)" Ecriture de 'value' dans TRISA.Pour les autres ports, changer la lettre.

remarque: Beaucoup d'autres fonctions sont fournies avec CCS, pour se renseigner, il faut utiliser l'aideet aller dans la rubrique 'Built-In Function'.

5) exercices1) Faire clignoter la led à 1Hz2) Faire clignoter la led à 1Hz quand on appuie sur SW1.3) Faire clignoter la led à 1Hz quand on appuie sur SW1et à 2Hz quand on appuie sur SW2.4) Faire afficher '18' en permanence sur les afficheurs.5) Réaliser un dé électronique sur un des deux afficheurs.6) Réaliser un compteur de 0 à 10 s'incrémentant toutes les secondes en utilisant un tableau.

a) compléter le tableau digit[10], qui permet d'afficher les valeurs de 0 à 10. (pouraccéder à une valeur du tableau, il faut utiliser: digit[n], ou 'n' est le rang de la valeur dans le tableau. ex:x=digit[1], x prend la deuxième valeur du tableau parce que l'indice du premier élément d'un tableau est 0)

b) écrire le programme en utilisant l'instruction FOR.

Page 4: TP pic en C

RA0/AN02

RA1/AN13

RA2/AN2/VREF-4

RA4/T0CKI6

RA5/AN4/SS7

OSC1/CLKIN9

OSC2/CLKOUT10

RC1/T1OSI/CCP212

RC2/CCP113

RC3/SCK/SCL14

RB7/PGD28

RB6/PGC27

RB526

RB425

RB3/PGM24

RB223

RB122

RB0/INT21

RC7/RX/DT18

RC6/TX/CK17

RC5/SDO16

RC4/SDI/SDA15

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI11

MCLR/Vpp/THV1

U1

PIC16F876

R1 330

R2 330

R3 330

R4 330

R5 330

R6 330

R7 330

VDD

VDD

VDD

X1

4MHzC122pF

C222pF

R810k

C31nF

D1BAT85

SW1 SW2

R910k

R1010k

R1310k

K2

R15

10k

Q1BC547

D2R16

330

VDD

VDD

VDD

VDD

K5

D3

1N4001

VI1

VO3

GN

D2

U37805

C4100nF

C5100nF

C6100uF

VSS

VDD

a

b

c

d

e

f

g

a7

b6

c4

d2

e1

f9

g10

dp

5

AC

3

AC

8

AFF1

a

b

c

d

e

f

g

a7

b6

c4

d2

e1

f9

g10

dp

5

AC

3

AC

8

AFF2

Q2

2N2907

Q3

2N2907

R17

10k

R18

10k

VDD

RB7RB6

MCLR

IC1LM35

RV110k

123456

K3

RJ11

RB3

RB3RB6RB7

D41N4001

J1

C7100nF

R111k

MCLR

R12220