Vous êtes sur la page 1sur 83

Chapitre 12 : Programmation du PIC en C

Section 12.1: Pourquoi programmer les PIC en C.


Section 12.2: Types de donnes et dlais de retard en C
Section 12.3: Programmation I/O en C.
Section 12.4: Les oprations logiques en C
Section 12.5: Programmes de conversion des donnes
en C
Section 12.6: Srialisation des donnes en C
Systmes microprocesseurs
Introduction
La programmation en C sera le principal objectif de ce chapitre.
Il sera vu et discut
- les types de donnes, et les dlais temporels,
- la programmation I/O,
- les oprations logiques AND, OR, XOR, inverseur, et le dcalage,
- les conversion ASCII et BCD,
- la srialisation des donnes pour les PIC18.
Nous allons voir aussi comment le compilateur C18 utilise le
programme ROM pour sauvegarder les donnes. Nous allons aussi
examiner comment le compilateur C18 traite lallocation des
donnes RAM.
12.1 Pourquoi programmer les PIC en C
Les compilateurs produisent des fichiers HEX quon imprime dans la ROM des
microcontrleurs. La taille du fichier HEX produit par le compilateur est lune des
proccupations des programmeurs des microcontrleurs pour deux raisons que sont:
1. Les microcontrleurs ont une ROM limite.
2. Lespace occup par le code pour les PIC18 est limit 2M.
Pendant que la programmation assembleur produit un code plus compact par rapport C,
mais la tache est fastidieuse et couteuse en temps de programmation. En contre partie, la
programmation C consomme moins de temps mais facile programmer. Ce qui suit sont les
principales raisons :
1. Moins de temps pour programmer par rapport lassembleur.
2. Cest facile modifier et faire voluer ou mettre jour.
3. On peut utiliser le code valable sous forme de bibliothques de fonctions.
4. Le code C est portable dun microcontrleur un autre avec peu ou presque
aucune modification.
Plusieurs compagnies (Tiers Partie) fabrique des compilateurs C pour les PICs.
Lobjectif est de ne pas vous recommander lun ou lautre des compilateurs
existants, mais de vous fournir les notions de base de programmation C pour
les PICs. Pour les exemples de programmes qui seront traits, vous pouvez
choisir le compilateur de votre choix, en particulier si dsir celui de
Microchip, le C18 intgr au MPLAB IDE.
12.2 Types de donnes et dlais de retard en C
Une bonne comprhension des types de donnes C destins pour le
compilateur C18 aide les programmeurs crer des codes HEX
petits. Voici la liste des types largement utiliss par le C18:
Unsigned char
Puisque les microcontrleurs sont de 8-bits, le type de donnes caractres est le choix
Naturel dans la plupart des applications.
Il convient de se rappeler que les compilateurs C utilsient Signed char comme dfaut
Sinon il faut le prcder par le mot cl unsigned devant char.
Nous pouvons utiliser unsigned char pour les chaines de caractres ASCII incluant
les caractres ASCII tendu.
Dans la dclaration des variables, on doit faire attention la taille des donnes et essayer
dutiliser unsigned char la place du type int si possible, cause du nombre limit des
Registres et des locations des donnes dans la RAM puisque du type int prend 16-bits.
Ceci conduit et inutilement un fichier large de code HEX.
Exemple 2 : crire un programme C18 qui envoie les valeurs
00-FFh vers le port B.
NOTE: linstruction while(1) est ncessaire que si on excute
Le programme en hardware. Elle est quivalente aux instructions
Assembleur GOTO $ et BRA $.
Exemple 2 : crire un programme qui envoie les valeurs HEX
des caractres ASCII 0, 1, 2, 3, 4, 5, A, B, C, and D vers le port B.
Excuter le programme ci-dessus sur votre simulateur pour voir
Comment le PORT B affiche les valeur 30h, 31h, 32h, 33h, 34h,
35h, 41h, 42h, 43h, et 44h (les valeurs HEZ de 0, 1, 2, etc.).
Exemple 3 : crire un programme qui inverse tout les bits
du port B continuellement.
Excuter le programme ci-dessus sur votre simulateur pour voir
Le rsultat
Signed char
Le signed char est un type de donne 8-bits qui utilise le bit
Le plus significatif D7 pour reprsenter le signe. Nous navons
donc que 7 bits pour reprsenter la magnitude.
Il est ncessaire pour reprsenter les grandeurs avec signe comme
La temprature.
A noter que char tout seul quivalent signed char. Sinon il
faut mettre unsigned evant char, soit unsigned char.
Exemple : crire un programme C18 qui envoie des valeurs
au choix entre -4 et +4 vers le port B.
Excuter le programme ci-dessus sur votre simulateur pour voir
comment le port B affiche: 1, FFh, 2, FEh, 3, FDh, 4 et FCh.
Unsigned int
Signed int
Autres types de donnes
Exemple : crire un programme C18 qui inverse les bits de port B 50 000 fois.
Excuter le programme ci-dessus sur votre simulateur pour voir le port B.
Exemple 2 : crire un programme C18 qui inverse les bits de port B 100 000 fois.
Excuter le programme ci-dessus sur votre simulateur pour voir le port B.
Dlais temporels
Exemple : crire un programme C18 qui inverse les bits de port B
continuellement avec un retard de 250ms en supposant que le systme est le
PIC18F458 avec XTAL = 10 MHz.
Exemple 2 : crire un programme C18 qui inverse les bits des ports C et D
continuellement avec un retard de 250ms en supposant que le systme est le
PIC18F458 avec XTAL = 10 MHz.
12.3 Programmation I/O en C
Programmation I/O au niveau Octet
Les ports A-D sont accessibles par Octet. Nous utilisons les tiquettes PORT A-D
Comme dfinies dans le fichier entte de C18.
Exemple : Des LEDs sont connectes aux bits des ports B et C. crire un
programme C18 qui montre le comptage de 00 FFh sur les LEDs.
Le rsultat aprs litration 24.
Exemple 2 : crire un programme C18 qui permet dobtenir un octet de donnes
du PORT B. Attendre une seconde, et lenvoyer ensuite vers le PORT C.
Exemple 3 : crire un programme C18 qui permet dobtenir un octet de donnes
du PORT C. Si elle est infrieure 100, lenvoyer ensuite vers le PORT B sinon
lenvoyer au port D.
Programmation I/O au niveau Bit
Rappel
Structure des Bits du port B tel que donne par le compilateur C18. On peut trouver la
Structure des ports dans le fichier entte du microcontrleur.
Exemple : crire un programme C18 qui permet dinverser continuellement le bit
RB4 du PORT B sans perturber les autres bits.
Exemple 2: crire un programme C18 qui permet de surveiller le bit RC5 du
PORT C. Sil est haut, envoie 55h au port C sinon envoyer AAh au port D.
Vrification avec le simulateur MPLAB
Exemple : Un capteur douverture de portes est connect au RB1 et un metteur de son est
connect au RC7. crire un programme C18 qui permet de surveiller le capteur
douverture de portes et quand cest ouvert, envoyer un son. Pour cela, on peut mettre
une onde carre de quelques centaines de Hz.
Vrification avec lanalyseur logique de MPLAB
Exemple : Les pins de donnes dun LCD sont connects au Port B. Linformation est
passe au LCD quand le pin ENABLE passe de ltat haut ltat bas. crire un
programme C18 qui permet denvoyer le message suivant au LCd: Le monde est un
village plantaire
``Le monde est un village plantaire``
Vrification avec lanalyseur logique de MPLAB
Exemple : crire un programme C18 qui permet dinverser continuellement les port B, C,
et D aprs chaque 250ms.
Exemple : crire un programme C18 qui permet dinverser
continuellement le bit 5 du port B 50 000 fois.
Exemple : crire un programme C18 qui permet de vrifier
continuellement ltat du bit RB0 et lenvoyer au RC7.
Dsassemblage de lexemple prcdent.
12.4 Les oprations logiques en C
Oprateurs niveau Bit
Exemples
Oprateurs de dcalage niveau Bit
Exemples
Exemple : crire un programme C18 qui permet dinverser
continuellement les bits des ports B et C aprs 250ms en utilisant
loprateur dinversion de bits.
Exemple : crire un programme C18 qui permet dinverser
continuellement les bits des ports B, C et D aprs 250ms en
utilisant loprateur EX-OR niveau bit.
Exemple : crire un programme C18 qui une fois le bit RB2
obtenu, son inverse est envoy au RC7.
Exemple : crire un programme C18 qui lit les bits RB0 et RB1 et
envoie un caractre ASCII au PD en suivant :
Solution
Solution avec MPLAB
12.5 Programmes de conversion des donnes en C
Nombres ASCII
Conversion BCD vers ASCII
Exemple : crire un programme C18 qui convertit le BCD paquet 0x29 en ASCII et
laffiche les octets sur les ports B et C.
Conversion ASCII vers BCD
Exemple : crire un programme C18 qui convertit les ASCII 4 et 7 en BCD paquet et les
affiche au port B.
Vrifier par exemple le contenu dune ROM sil
nest pas corrompu par un incident quelconque.
Vrification de la somme
Exemple
Vrifier avec le simulateur MPLAB en utilisant Single Step les contenus de ports B et C.
crire un programme C18 qui vrifie lexactitude de la somme des donnes de lexemple
passe en envoyant le caractre ASCII G pour Good ou B pour Bad.
Changer une deux ou deux donnes dans mydata, simuler le programme pour voir les
rsultats.
Conversion Binaire(HEX) vers Dcimal et ASCII avec C18
Exemple : crire un programme C18 qui convertit 11111110 ou FDh en dcimale en
laffichant aux ports B, C et D.
12.6 Srialisation des donnes en C
Exemple : crire un programme C18 qui envoie 44h un bit la fois via RC0. Le bit LSB
en premier.
Exemple : Mme chose mais le bit MSB en premier.
Exemple : crire un programme C18 qui amne un octet de donnes en srie un bit la
fois partir du pin Rb0. Placer loctet au port D. Le bit LSB doit venir en premier.
Exemple : Mme chose mais le bit MSB en premier.
Question
Comment coder EFFICACEMENT les procdures de
Checksum, Conversion BCD/HEX vers ASCII
en Assembleur.
Rponse
En utilisant le mode dadressage (IN)direct
Modes dadressage immdiat, direct et indirect
Mode dadressage immdiat
Mode dadressage direct
Lopcode du Mode dadressage direct de MOVFF
Diffrence entre INFC fileReg, Wet INFC fileReg, F
DECFSZ et DECF
Registres SFR et leurs adresses
Quelques adresses des registres SFR de PIC18
Quelques notes aux sujet de SFR
Exemple : crire un code qui envoie 55h au port B en incluant (a) les noms de
Registres et (b) leurs adresses.
Quelques notes au sujet du mode dadressage direct du PIC18
Mode dadressage indirect
page 8 where
Les avantages du mode dadressage indirect
Next example
Next example
Exemple : crire un programme pour crire la valeur 55h vers les locations 40h 45h en utilisant :
(a) le mode direct, (b) le mode indirect sans la boucle, et (c) avec la boucle.
Exemple 2 : Supposant que les locations RAM 30h 34h contiennent la chaine
ASCII HELLO. crire un programme qui capture les caractres de la chaine et
les envoie vers le port B un octet la fois. Utilises les deux modes dadressage:
(a) direct et (b) indirect.
Option dauto-incrmentation de FSR
Next.
Exemple : crire un programme qui initialise 16 locations RAM partir de 60h
de deux faons diffrentes: (a) avec FSRnL et (b) lauto incrmentation.
Exemple 2 : crire un programme qui transfert un bloc de 5 octets RAM partir
de 30h vers 60h.
Exemple 3 : crire un programme qui additionne 4 octets RAM stocks dans les
locations 40-43h et met le rsultat aux adresses 06h et 07h. Les octets sont
respectivement:
Exemple 4: crire un programme qui effectue la somme multi-octets suivante:
12896577h + 12647839h. Ces 2 oprandes se trouvent partir respectivement
des adresses 30h et 50h. Le rsultat de laddition doit se mettre partir de 60h.
Rappel: Procdures Checksum/Conversion BCD/HEX vers ASCII en Assembleur
Procdure Checksum
Procdure conversion BCD vers ASCII
This program
Procdure conversion Binaire (Hex) vers ASCII

Vous aimerez peut-être aussi