|
La configuration du logiciel dans MPLAB est assez aisée. Le compilateur
fourni une explication qui permet à partir d'une fenêtre
DOS de configurer MPLAB.
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, sélectionner
le menu comme dans l'écran 1 ci-dessous.
|
Ensuite une boite de dialogue s'ouvre et permet de spécifier le
langage et le compilateur utilisé, voir l'écran 2 ci-dessous.
Il faut aussi dans la fenêtre Edit Project, configurer le projet
en rajoutant les " nodes " qui sont nécessaire au projet.

|
|
L'utilisation du langage C qui est considérée 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 si celui-ci est bien commenté. Il est clair que l'écriture de programme de plusieurs
centaines de ligne impose quasiment l'emploi de langage de haut
niveau comme le C, JAVA, C++, BASIC, etc... L'utilisation de langage
objet n'est pas encore trop employée dans le domaine des petits microcontroleurs,
mais certain compilateur C++ commence à faire leur apparition
sur le marché.
L'autre avantage du langage C est qui reste assez proche de la machine
qui est utilisée. L'utilisation des pointeurs par exemple simplifie
grandement la gestion des zone mémoire, tableau, chaîne de caractères.
De plus un nombre important de fonctions permettant de gérer
les interfaces sont déjà disponibles.
Nous allons pas 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 fonctions,
chacunes définies par un fichier d'entête ( header). Par conséquent
on retrouve des fichiers spécifiques au PIC, ceci pour simplifier
la gestion des diverses interfaces du microcontrôleurs.
Le code exemple utilisé lors de notre discussion.
Le première partie de code comporte des commentaires qui donnent
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)
Nous retrouvons ensuite la définition de constantes, variables globales
et toutes les fonctions utilisées par le code de la fonction
main(). En effet les fonctions doivent être déclaré avant la fonction
main. Parmi celle-ci, 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. lcd
en assembleur
Fonction d'initialisation de l'écran.
void InitLcd(); // initialisation de l'écran, Attention au
brochage.
Fonction de positionnement de curseur sur une ligne déterminée.
void Lcd_Line1(); // position en début de ligne 1
void Lcd_Line2();// position en début de ligne 2
void Lcd_Line3();// position en début de ligne 3
void Lcd_Line4();// position en début de ligne 4
Fonction d'envoi des commandes à l'écran.
void Lcd_Send_noWait(char VarSend);// envoi de commande sans delais
void Lcd_Send(char VarSend);// envoi de commande avec delais de
50us, minimum pour les écrans
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'écran et position du
curseur en 00
void Lcd_Char(char CharSend); // Affichage d'un caractère,
passe la valeur Ascii du carac
void ReturnHome(); // revient en position 00
void Lcd_Cur_S_Right();// décalage du curseur vers la droite
void Lcd_Cur_S_Left();// décalage 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 caractère
void AffichageAlphabet(); // Affichage de tous les caracteres supportés
par le LCD
void DisplayHexaBinDeci(char Val); // Affichage d'une valeur en
Hexa, binaire, décimal pour écran 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).
On a que deux fonctions une qui scrute la touche appuyée , et une
autre qui gère l'entrée d'une chaîne de caractère.
char GetKey(); // recuperation d'un caractère.
Fonction annexe pour la temporisation. Pour cela on utilise les
fonctions fournies par le compilateur.
char GetString(); // récuperation d'une chaine de caractère.
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.
|