Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EN LANGAGE 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.
L’écriture du programme dans la mémoire flash du PIC 16F876 se fait par l'intermédiaire d'un module
connecté au PC (ICD) identique à celui utilisé avec MPLAB , ce module permet également un dialogue avec le
PIC de la cible ( maquette pédagogique) afin de faire le "debuggage" du programme ( pas à pas, points d'arrêts,
modification directe des registres . . ).
RB6, RB7
dialogue PC-ICD RB3,
PC par liaison série Module ICD MCLR
+
CCS
(PCW)
- édition
- compilation
- mise au point
maquette pédagogique
PIC à programmer
Le logiciel CCS PCW permet de réaliser toutes les étapes nécessaires à la conception d'un programme en C
pour 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, ce
fichier a l’extension lst( ex : prog1.lst).
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érations
suivantes :
- lancer le logiciel de développement PCW (PIC C compiler ou PIC demo) et exécuter les
opé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
Comme pour MPLAB, pour que le programme puisse fonctionner sans module ICD, il faut dévalider le mode
débuggage en plaçant en commentaire ou en supprimant la ligne suivante: //#device ICD=TRUE et
recompiler. 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 faut
programmer le PIC avec le fichier .HEX généré lors de la compilation après avoir dévalidé l'option ICD)
Modifier le programme afin que ce soit SW2 qui agisse sur la led et que celle-ci s'éteigne quand on
appuie sur SW2.
Sans rajouter de ligne au programme modifier le programme afin que ce soit l'appui sur SW1 et SW2
qui allume la led. (utiliser le ET logique)
Dans le programme précédent nous avons utilisé « IF … ELSE » (si SW1 actionné, on allume la led
sinon on éteint la led), on peut également présenter le fonctionnement de la manière suivante: Tant que l'on
appuie 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.
4) Quelques instructions spécifiques au PIC
définitions des broches: ex: "#define LED pin_c7" La variable LED correspond au bit 7
du PORTC.
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.
écriture de 8 bits sur un port: ex "output_a (value)" Il y a écriture de la donnée 'value' sur
le 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 valeur
correspondante au code formé par les 8 bits du port A, comme précédemment, if faut changer le lettre pour les
autres ports.
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'aide
et aller dans la rubrique 'Built-In Function'.
5) exercices
1) Faire clignoter la led à 1Hz
2) 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. (pour
accé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.
VDD
VDD K3
1
R18 R17 RB3
Q3 2
Q2 RB6
10k 10k D2 3
R16 VDD RB7
2N2907 4
330 5
2N2907 6
AFF2 AFF1
5
3
RJ11
d d Q1 D4
AC
AC
dp
dp
R15 BC547 C7 1N4001 R11
g g 100nF 1k
10 10 10k J1
c f c f
e 9 e 9
MCLR
e e
1 1 VDD
d d
g 2 g 2
U1
VDD
c c
4 4 RC7/RX/DT
b f b f 330 18
b b R1 RC6/TX/CK RV1
330 17
6 6 R2 RC5/SDO 10k
330 16
R3 RC4/SDI/SDA
a a 330 15
7 7 R4 RC3/SCK/SCL
AC
AC
a a 330 14
R5 RC2/CCP1
330 13
RC1/T1OSI/CCP2
IC1
R6 12 R12 LM35
8
D1
K2 BAT85
X1
VDD
C3
1nF
C2 4MHz
C1
22pF 22pF
K5
R9 R10
D3 10k 10k
VDD
U3
7805
1N4001
1 3
VI VO
GND
SW1 SW2
C5 C6
C4
2
100nF 100uF
100nF
VSS