cours programmation du pic en c www.automate pro.blogspot.com

Upload: oussama-adjoudj

Post on 30-Oct-2015

77 views

Category:

Documents


0 download

TRANSCRIPT

  • 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 aussiexaminer 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 desproccupations 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 choixNaturel dans la plupart des applications.

    Il convient de se rappeler que les compilateurs C utilsient Signed char comme dfautSinon il faut le prcder par le mot cl unsigned devant char.

    Nous pouvons utiliser unsigned char pour les chaines de caractres ASCII incluantles 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 desRegistres 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 HEXdes 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 voirComment 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 bitsdu port B continuellement.

    Excuter le programme ci-dessus sur votre simulateur pour voirLe rsultat

  • Signed char

    Le signed char est un type de donne 8-bits qui utilise le bitLe plus significatif D7 pour reprsenter le signe. Nous navonsdonc que 7 bits pour reprsenter la magnitude.

    Il est ncessaire pour reprsenter les grandeurs avec signe commeLa 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 voircomment 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-DComme 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 donnesdu PORT B. Attendre une seconde, et lenvoyer ensuite vers le PORT C.

  • Exemple 3 : crire un programme C18 qui permet dobtenir un octet de donnesdu 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, W et 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 deRegistres 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

  • Chapitre 12 : Programmation du PIC en CIntroduction