programmation du pic en c

publicité
PROGRAMMATION DU PIC EN C
1 Introduction
Le but de la présente page est la programmation des microcontrôleurs de la famille Microchip en langage
C. Nous nous attarderons plus particulièrement sur la famille des 14 bits à mémoire flash, modèle 16F877.
L intérêt de ce microcontrôleur est sa taille mémoire qui est de 8Ko, car en effet il faut avoir en mémoire
que lorsqu on programme en C, généralement la taille du code exécutable est plus gros que pour un
programme en assembleur. Cependant ces dernières années les compilateurs ont beaucoup évolués, et
l’optimisation permet d’avoir des codes exécutables de taille raisonnable.
Nous utilisons un compilateur de la famille PCW de la société CCS. Ce compilateur peut s’acheter via
Internet sur le site de : http://www.hvwtech.com/
Nous présenterons dans un deuxième temps d autre compilateur du marché avec un tableau comparatif.
2 Description du compilateur
Le compilateur est fourni avec une disquette et un manuel de 100 pages environs.
Sur la disquette, on retrouve évidement l’environnement de compilation et un fichier d’aide en ligne.
L’avantage de ce compilateur est qu il s intègre parfaitement à l environnement de développement de chez
Microchip MPLAB, bien connu de tout les programmeurs de PIC.
2.1 Configuration dans MPLAB
La configuration du logiciel dans MPLAB est assez aisé. Ouvrir une fenêtre dos et taper : CCSC +SETUP.
Cette commande configure le compilateur comme une option de MPLAB pour les langages utilisables.
Ensuite après avoir ouvert un nouveau projet dans MPLAB, selectionner le menu comme dans la photo n1
ci-dessous.
Photo n1
Ensuite une boite de dialogue s’ouvre et permet de spécifier le langage et le compilateur utilisé, voir la
photo n2 ci-dessous.
Il faut aussi dans la fenêtre Edit Project, configurer le projet en rajoutant les « nodes » qui sont nécessaire.
2.3 Description de programme
L’utilisation du langage C qui est considèré de haut niveau permet de simplifier la programmation par
l’utilisation de fonction de haut niveau. Il est aussi plus aisé de relire un code plusieurs mois après.
Il est clair que l’écriture de programme de plusieurs centaines de ligne impose quasiment l emploi de
langage de haut niveau. L’utilisation de langage objet n’est pas encore trop employé dans le domaine des
petits microcontroleurs .
L’autre avantage du langage C est qui reste assez proche de la machine qui est utilisé. L’utilisation
des pointeurs par exemple simplifie grandement la gestion des zone mémoire, tableau, chaîne de caractères.
Nous allons par reprendre les bases du langage C, il y a de très bon sujet sur le web pour cela.
Nous allons juste montrer son utilisation dans la programmation de microcontrôleur PIC de chez microchip.
Le langage C au standard ANSI défini un certain nombre de fonctions standards, qui sont
regroupées dans les librairies de fonction, chaque une défini par un fichier d’entête ( header). Par
conséquent on retrouve des fichiers spécifique au PIC, ceci pour simplifier la gestion des diverses
interfaces du microcontrôleurs.
Le code exemple utilisé lors de notre discussion se trouve en suivant le lien : ……..
Le première partie de code comporte des commentaires qui donne un résumé et des explications succinctes
des fonctions décrites par la suite.
Ensuite, on retrouve l’inclusion du header correspondant au microcontrôleur utilisé. #include <16F877.H>
Puis on retrouve des définitions correspondant aux paramétrages du microcontrôleur :
Paramétrage des fusibles du microcontrôleur, comme la protection du code source en lecture etc…
#fuses HS,NOWDT,NOPROTECT
Définition de l’horloge de fonctionnement, ici 20MHz. Ceci sera utilisé pour le calcul des delais.
#use delay(clock=20000000)
Définition des paramètres de l’interface série.
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
La définition de constantes, variables globales et de toutes les fonctions utilisées par le code de la fonction
main().
Parmi ces fonctions, on a une série de fonctions qui permettent de gérer un écran LCD en mode 4 bits.
Nous avons gardé les connections du programme assembleur décrit par julien. (cf lien…….)
 Fonction d’initialisation de l’écran.
void InitLcd();
// initialisation de l ecran, Attention
au brochage.
 Fonction de positionnement de curseur sur une ligne déterminée.
void Lcd_Line1();
// position en debut de ligne 1
void Lcd_Line2();
// position en debut de ligne 2
void Lcd_Line3();
// position en debut de ligne 3
void Lcd_Line4();
// position en debut de ligne 4
 Fonction d’envoi des commandes à l’écran.
void Lcd_Send_noWait(char VarSend);
// envoi de commande dans delais
void Lcd_Send(char VarSend);
// envoi de commande avec delais
de 50us, minimum pour les ecrans
 Fonction affichage de variable suivant un certain format : binaire, hexa, decimal.
void Lcd_Hexa(char VarSend);
// affichage d une valeur hexa 0x..
void Lcd_Binaire(char VarSend);
// Affichage d une valeur Binaire
10101010b
void Lcd_Decimal(char ValSend);
// Affichage d une valeur en
decimal (donnée d entrée sur 1 octet)
 Fonction administrative pour la gestion de l’écran
void Lcd_Clear();
// Effacement de l ecran et position du
curseur en 00
void Lcd_Char(char CharSend);
// Affichage du un caractere, passe
la valeur Ascii du carac
void ReturnHome();
// revient en position 00
void Lcd_Cur_S_Right();
// decalage du curseur vers la droite
void Lcd_Cur_S_Left();
// decalage du curseur vers la
gauche
 Fonction d’affichage de chaîne de caractère à l’écran
void Lcd_Printf(char *Chaine);
// Affichage d une chaine de
caractere
void AffichageAlphabet();
// Affichage de tous les caracteres supportés
par le LCD
void DisplayHexaBinDeci(char Val);
// Affichage d une valeur en Hexa,
binaire, decimal pour ecran 4 ligne


Fonction pour la gestion d’un mini clavier de 4 touches qui n’utilise pas les interruptions mais la
méthode de scrutation ( polling).
Fonction annexe pour la temporisation.
La fonction main () utilise les différentes fonction à tour de rôle sans autre but que de donner des exemples
et montrer le résultat à l utilisateur.
3
Autre compilateur
Vous trouverez ci-dessous un autre compilateur C qui a le mérite d être un freeware, mais n est utilisable
qu’avec les PIC 16F84.
Cependant cela permettra de se faire la main. Une version avec licence est cependant valable pour les
autres types de microcontrôleur.
Si vous avez d’autres compilateurs, ou que vous avez fait des tests avec nous sommes preneur pour
améliorer le comparatif. De plus avec l’arrivé des dsPIC, l’utilisation du langage C va devenir obligatoire.
Compilateur
PCW (CCS)
PIC supporté
Tous
Utilisation
Facile
MPLAB
Oui
Piclite (hitec)
16F84
version
freeware
Non testé
oui
Prix
30$
US
0
Site web
?
www.htsoft.
com
Téléchargement