Vous êtes sur la page 1sur 13

TRADUCTEUR LANGAGE C pour les PICs

SOMMAIRE

1) TRADUCTION D’UN ALGORITHME EN LANGAGE C. .............................................. 2


1.1) CONSTANTES ET VARIABLES ................................................................................... 2
1.1.1) Déclarations de constantes............................................................................ 2
1.1.2) Déclarations de Variables. ............................................................................ 3

1.2) LES STRUCTURES ALGORITHMIQUES ........................................................................ 4


1.2.1) Structure SI ... ALORS ….............................................................................. 4
7.2.2) Structure SI ... ALORS ...SINON ................................................................... 4
1.2.3) Structure de choix multiple ............................................................................ 5
1.2.4) Structure REPETER ... JUSQUA ................................................................... 6
1.2.5) Structure TANT QUE ... FAIRE ... .................................................................. 6
1.2.6) Structure POUR Indice ALLANT DE ... A .... FAIRE ... .................................... 7

1.3) PROCEDURES ET FONCTIONS.................................................................................. 8


1.3.1) Syntaxe :...................................................................................................... 8
1.3.2) Une fonction sans paramètres d’entrée et de sortie......................................... 9
1.3.3) Une fonction avec des paramètres d’entrée et sans paramètres de sortie....... 10
1.3.4) Une fonction avec des paramètres d’entrée et un paramètre de sortie............ 11
1.3.5) Une fonction d’interruption........................................................................... 12

2) ORGANISATION D’UN PROGRAMME EN LANGAGE C ......................................... 13

Philippe LETENNEUR - GRANVILLE - 2003 - page 1


TRADUCTEUR LANGAGE C pour les PICs

1) TRADUCTION D’UN ALGORITHME EN LANGAGE C.


1.1) Constantes et variables

1.1.1) Déclarations de constantes.


Algorithmique: Constante NomConstante : [Type] = Valeur

Syntaxe C: #define ID_de_la_constante valeur

Exemples :
// Définition des modes de FCT
#define MODE_BISTABLE 0
#define MODE_TEMPO 1

// Déclaration des codes d’un clavier


#define AUCUNE 0xFF
#define PLUS 0x26
#define MOINS 0x25
#define MLPI 0x13
#define STOP 0x15
#define BOLUS 0x16
#define PURG 0x16

// Définition de PORTs ou de REGISTREs de type octet


// Déclaration des adresses des ports E/S du PIC
// #byte propre au compilateur CCS
#byte PORTA = 5 // adresse du PORT A
#byte PORTB = 6 // adresse du PORT B
#byte PORTC = 7 // adresse du PORT C
#byte PORTD = 8 // adresse du PORT D
#byte PORTE = 9

// Déclaration de registres internes du CAN


#byte ADCON0 = 0x1F // adresse du registre ADCON0
#byte ADCON1 = 0x9F // adresse du registre ADCON1

// Déclaration de bits internes


// #bit propre au compilateur CCS
#bit GODONE = ADCON0.2
#bit ADFM = ADCON1.7

// Affectation d’E/S de type bit


// Par exemple : Commande d’un moteur
#bit LIMIT = PORTC.1
#bit CLOCK = PORTD.3
#bit F_H = PORTC.5
#bit ENABLE = PORTC.0

// Définition d’un tableau de constantes


const int AD_MODE[4]={0x00,0x01,0x02,0x03};

Philippe LETENNEUR - GRANVILLE - 2003 - page 2


TRADUCTEUR LANGAGE C pour les PICs

1.1.2) Déclarations de Variables.


Algorithmique: Variable NomVariable : [Type]

Syntaxe C : type ID_de_la_constante ;

Exemples :
// Entier non signé
int CODE_TOUCHE; // Variable 8 bits
long CMP_TOUCHE; // Variable 16 bits
int CMP_SEC;
int CMP_ML;
int VIT_MOT;
int TPS_MIN, TPS_HEURE, TPS_SECONDE ;

// Entier signé
signed int TAMB ; // Variable 8 bits signée
signed long LUM ; // Variable 16 bits signée

// Réel
float VALEUR_CAN ; // Variable de type réel

// Tableau
int ETAT_RE[4]; // Tableau de 4 éléments entier

// chaîne de caractères
char MESSAGE_N1[10] ; // chaîne de 9 caractères

Philippe LETENNEUR - GRANVILLE - 2003 - page 3


TRADUCTEUR LANGAGE C pour les PICs
1.2) Les structures algorithmiques

1.2.1) Structure SI ... ALORS …

Algorithme Algorigramme Syntaxe C

Oui Non
Si condition vraie condition if (condition)
vraie ?
Alors {
instruction;
Actions Actions }

Fin Si

Exemple
Algorithme Programme source
Variable Compteur : Double Octet long Compteur ;

Si Compteur < 1000 if (Compteur < 1000)


Alors Compteur ← Compteur + 1 {
FinSi Compteur = Compteur + 1 ;
}

7.2.2) Structure SI ... ALORS ...SINON ...

Algorithme Algorigramme Syntaxe C


Oui Non
Si condition vraie condition if (condition)
Alors vraie ? {
instruction_1;
Actions1 Actions1 Actions2 }
else
Sinon {
Actions2 instruction_2;
Fin Si }

Exemple
Algorithme Programme source
Variable NoTouche : Octet int NoTouche ;
if (NoTouche == 3 )
Si NoTouche = 3 {
Alors NoTouche ← 0 NoTouche = 0;
Sinon NoTouche ← NoTouche + 1 }
FinSi else
{
NoTouche = NoTouche + 1;
}

Philippe LETENNEUR - GRANVILLE - 2003 - page 4


TRADUCTEUR LANGAGE C pour les PICs

1.2.3) Structure de choix multiple


L’instruction if ne permet de faire un choix qu’entre 2 possibilités. Si l’on désire faire un choix sur 3
possibilités ou plus, il devient nécessaire de cascader plusieurs instructions if, et le programme perd de sa
clarté.
Le langage C possède une instruction spécifique à ce cas de figure, il s’agit de l’instruction switch…case.

Algorithme Algorigramme
Selon expression E
Cas expression E1 E = E1 E = E2 E = E3
Instruction A ? Non ? ?
Non Non
Cas expression E2
Instruction B
Cas expression E3
Instruction C Instruction Instruction Instruction Instruction
Cas sinon A B C D
Instruction D
Fin Selon

Chaque expression est évaluée l’une après l’autre jusqu’à ce que l’une d’elles
Syntaxe C corresponde à l’expression entre parenthèses.
switch (expression E) L’instruction de branchement inconditionnel break provoque la sortie de la
{ structure de choix multiples.
case E1 : instruction A; L’oubli de break après une instruction entraîne l’évaluation du cas suivant, même
break ; si le résultat de l’évaluation est vrai.
case E2 : instruction B;
break ; L’étiquette default est utile dans le cas ou aucune évaluation n’a été satisfaisante.
case E3 : instruction C; Elle n’est pas obligatoire.
break ;
default :instruction D; Attention : Le choix entre les diverses possibilités est régit par la valeur d’une
} expression de type entier ou caractère et non plus par une condition.

Exemple
Algorithme Programme source

Variable Nombre,Sortie : Octet int Nombre, Sortie ;

Cas ou Nombre Vaut switch (Nombre)


1 : Sortie ← %11110111 {
4 : Sortie ← %11111110 case 1 : Sortie = 0b11110111 ;
Autres : Sortie ← %11111111 break ;
FinCas case 4 : Sortie = 0b11111110 ;
break ;
default : Sortie = 0b11111111 ;
}

Philippe LETENNEUR - GRANVILLE - 2003 - page 5


TRADUCTEUR LANGAGE C pour les PICs

1.2.4) Structure REPETER ... JUSQUA ...


La condition qui régit la boucle ainsi que sa répétition est évaluée à la fin de chaque tour de boucle.
Le test se faisant en fin de boucle, celle-ci sera effectuée au moins une fois.

Algorithme Algorigramme Syntaxe C


Répéter Actions
do
{
Actions instruction ;
Non
condition }
vraie ? while ( ! (condition vraie)) ;
Jusqu’à condition vraie

Exemple
Algorithme Programme source

Variable Compteur : Octet int Compteur ;

Répéter do
{
Incrémenter Compteur Compteur = Compteur + 1 ;
}
Jusqu'à Compteur = 100 while( !( Compteur == 100)) ;

1.2.5) Structure TANT QUE ... FAIRE ...


La condition qui régit l’entrée dans la boucle ainsi que sa répétition est évaluée avant chaque tour de
boucle, donc aussi avant le premier.
Le test se faisant en début de boucle, celle-ci ne sera pas effectuée si la condition est fausse.

Algorithme Algorigramme Syntaxe C


Tant que condition vraie
Faire condition Non while (condition)
vraie ? {
instruction ;
Actions }
Actions
Fin Faire

Exemple
Algorithme Programme source
Variable Compteur2 : Octet signé signed int Compteur2 ;

Tant Que Compteur2 > -8 while (Compteur2 > -8)


Faire {
Décrémenter Compteur2 Compteur2 = Compteur2 - 1 ;
FinFaire }

Philippe LETENNEUR - GRANVILLE - 2003 - page 6


TRADUCTEUR LANGAGE C pour les PICs

1.2.6) Structure POUR Indice ALLANT DE ... A .... FAIRE ...


Il s’agit d’une boucle inconditionnelle, car le nombre de tours de boucle est fixé par le programmeur.
Ce type de boucle comporte un compteur dont la valeur est fixée avant le premier tour valeur1, puis
comparée à une valeur donnée valeur2 à chaque tour.
Si la condition est vraie, on exécute le bloc d’instructions, puis on modifie le contenu du compteur etc…

Algorithme Algorigramme Syntaxe C

Pour Indice Allant De Valeur1 A Valeur2 Indice <- valeur1


for(val_ini ;condition ; modif)
Faire {
instruction ;
Actions Non
}
Indice <
valeur2
FinFaire

Actions

Indice <- Indice +1

Exemple
Algorithme Programme source

Variable NbDecalage, Indice : octet int NbDecalage, Indice ;


Mot : double octet long Mot ;

Pour Indice Allant de 1 à NbDecalage for (Indice=1 ;Indice < NbDecalage ;Indice = Indice + 1)
Faire {
Décaler Mot d'1 bit à gauche Mot = Mot << 1;
FinFaire }

Philippe LETENNEUR - GRANVILLE - 2003 - page 7


TRADUCTEUR LANGAGE C pour les PICs

1.3) Procédures et fonctions

Fonction logicielle
Paramètres
d'entrée

Appel de la Paramètres de
fonction sortie

La traduction d’une fonction ou procédure ou encore appelées sous-programme s’effectue ainsi :

1.3.1) Syntaxe :
// Nom de la fonction :
// Description du rôle de la fonction :
// Paramètres d’entrée : Noms et types des paramètres d’entrée
// Paramètre de sortie : Nom et type du paramètre de sortie
Type_de_la_valeur_de_retour nom_de_la_fonction( types nom_des_paramètres )
{
instruction 1 ;
.
.
.
instruction n ;
return(valeur) ; // Valeur a renvoyer
}

Remarque : Tous les paramètres d’entrées deviennent des variables locales de la fonction.

A partir de cette syntaxe, on peut avoir plusieurs cas possibles :


1) Une fonction sans paramètres d’entrée et de sortie.
2) Une fonction avec des paramètres d’entrée et sans paramètres de sortie.
3) Une fonction avec des paramètres d’entrée et un paramètre de sortie.
4) Une fonction d’interruption.

Philippe LETENNEUR - GRANVILLE - 2003 - page 8


TRADUCTEUR LANGAGE C pour les PICs

1.3.2) Une fonction sans paramètres d’entrée et de sortie.

Fonction logicielle

Appel de la
fonction
En anglais, dépourvu ou sans se traduit par void, donc la définition de la fonction sera :

// Nom de la fonction :
// Description du rôle de la fonction :
// Paramètres d’entrée : Rien
// Paramètre de sortie : Rien
void nom_de_la_fonction( void )
{
instruction 1 ;
.
.
.
instruction n ;
}

Exemple :

// Procédure AFF_PURGE
// Description: Affichage du message PurG
// Entrée : Rien
// Sortie : Rien
void AFF_PURGE(void)
{
// commande de l'affichage multiplexé
PORTA=C_P; SEL1=1; SEL0=1; MEMO=1; MEMO=0;
PORTA=C_uu; SEL1=1; SEL0=0; MEMO=1; MEMO=0;
PORTA=C_r; SEL1=0; SEL0=1; MEMO=1; MEMO=0;
PORTA=C_G; SEL1=0; SEL0=0; MEMO=1; MEMO=0;
}

Appel de la fonction : nom_de_la_fonction() ;

Exemple : AFF_PURGE() ;

Philippe LETENNEUR - GRANVILLE - 2003 - page 9


TRADUCTEUR LANGAGE C pour les PICs

1.3.3) Une fonction avec des paramètres d’entrée et sans paramètres de sortie.

Fonction logicielle
Paramètres
d'entrée

Appel de la
fonction
// Nom de la fonction :
// Description du rôle de la fonction :
// Paramètres d’entrée : Noms et types des paramètres d’entrée
// Paramètre de sortie : Rien
void nom_de_la_fonction(types nom_des_paramètres )
{
instruction 1 ;
.
instruction n ;
}
Remarque : Tous les paramètres d’entrées deviennent des variables locales de la fonction.

Exemple :
// Procédure d'affichage du logo
// Entrée : Entier CODE
// sortie : Rien
// Description : Affichage des codes du logo
void AFF_LOGO(int CODE)
{
PORTA=CODE;
SEL1=1; SEL0=1;
MEMO=1;
MEMO=0;
}

Appel de la fonction : nom_de_la_fonction(nom_des_paramètres) ;

Exemple : AFF_LOGO(0x45); // La valeur 0x45 sera affectée à CODE

Philippe LETENNEUR - GRANVILLE - 2003 - page 10


TRADUCTEUR LANGAGE C pour les PICs

1.3.4) Une fonction avec des paramètres d’entrée et un paramètre de sortie.

Fonction logicielle
Paramètres
d'entrée

Appel de la Paramètres de
fonction sortie

// Nom de la fonction :
// Description du rôle de la fonction :
// Paramètres d’entrée : Noms et types des paramètres d’entrée
// Paramètre de sortie : Nom et type du paramètre de sortie
Type_de_la_valeur_de_retour nom_de_la_fonction(types nom_des_paramètres )
{
instruction 1 ;
.
.
.
instruction n ;
return(valeur) ; // Valeur a renvoyer
}

Exemple :

// Procédure DECALAGE_DROITE
// Description : DECALAGE à droite de NB bits
// Entrée : Entier VAL, Entier NB
// Sortie : Entier RESULTAT
int DECALAGE_DROITE(int VAL, int NB)
{
int RESULTAT;

RESULTAT = VAL >> NB;

return(RESULTAT); // La valeur de la variable RESULAT est renvoyée


// au programme appelant
}

Appel de la fonction : nom_de_la_fonction(nom_des_paramètres) ;

Exemple :

A = 16 ;
B = DECALAGE_DROITE (A,2) ; // La valeur de A sera affectée à VAL
// La valeur 2 sera affectée à NB
// Le résultat de la fonction sera affecté à B

Philippe LETENNEUR - GRANVILLE - 2003 - page 11


TRADUCTEUR LANGAGE C pour les PICs

1.3.5) Une fonction d’interruption.


L’exécution d’une fonction d’interruption répond à un événement qui peut être interne (Périphériques :
CAN, TIMER, EEPROM, USART, I2C) ou externe (RB0, PORTB) du microcontrôleur. L’appel d’une
fonction d’interruption ne dépend pas du programme principal, mais elle l’interrompt pendant son
exécution.

Fonction logicielle
INTERRUPTION
FL 4
FL 3
FL 6

Déclenchement
FL 2 Prog
Déclenchement Principal
événement FL 7
extérieur
FL 1
Périphérique interne
I2C, TIMER, CAN, USART, ....

PIC

RESET

Une fonction d’interruption n’a pas de paramètres d’entrée et de sortie. Le compilateur CCS utilise
une directive spéciale INT_XXXX (XXXX nom de l’interruption) pour les différencier avec les autres fonctions
logicielles.

// Nom de la fonction :
// Description du rôle de la fonction :
#INT_xxxx // Nom de l’interruption
void nom_de_la_fonction( void )
{
instruction 1 ;
.
instruction n ;
}

Exemple :

// Procédure CLOCK_TIMER2
// Description: Interruption toutes les secondes

// Directive CCS pour une interruption TIMER2


#int_timer2
void CLOCK_TIMER2(void)
{
if(INT_CMP == 0)
{
INT_CMP = INT_CMP – 1 ;
// toutes les secondes
INT_CMP = 100;
}

Philippe LETENNEUR - GRANVILLE - 2003 - page 12


TRADUCTEUR LANGAGE C pour les PICs

2) ORGANISATION D’UN PROGRAMME EN LANGAGE C


// Rôle du programme :
// Auteur :
// Lieu :
// Version:

// fichier de déclaration des registres internes du micro contrôleur 16F877.H ou 16F876.H


#include <16F877.H>

// Directive pour débuguer sous MPLAB6 avec l’ICD2


#device ICD=TRUE

// Déclaration des adresses des ports E/S


#byte PORTA = 5 // adresse du PORT A
#byte PORTB = 6 // adresse du PORT B
#byte PORTC = 7 // adresse du PORT C
#byte PORTD = 8 // adresse du PORT D
#byte PORTE = 9 // adresse du PORT E

// Déclaration des constantes


#define NB_MAX 100 // Par exemple NB_MAX

// Affectation des entrées et sorties de type bit


#bit BUZZER = PORTD.7 // Par exemple : Commande d’un buzzer

// Fréquence du quartz
#use delay (clock=20000000)

// Configuration de la liaison série du PIC avec une vitesse de 9600 bauds.


#use rs232 (BAUD=9600, xmit=PIN_C6, rcv=PIN_C7)

// Déclaration des prototypes de toutes les fonctions logicielles


// nom de la fonction suivi d’un point virgule
// Par exemple :
void INIT_UC(void);

// Déclaration des variables globales


// Par exemple :
long DEBIT; // DEBIT mlh

// Programme Principal
main()
{
Instruction_1 ;
Instruction_n ;
}

// Déclaration des fonctions logicielles


// Nom de la fonction :
// Description du rôle de la fonction :
// Paramètres d’entrée : Noms et types des paramètres d’entrée
// Paramètre de sortie : Nom et type du paramètre de sortie
Type_de_la_valeur_de_retour nom_de_la_fonction( types nom_des_paramètres )
{
instruction_1 ;
instruction_n ;
return(valeur) ; // Valeur a renvoyer
}

// Par exemple
// Nom de la fonction : INIT_UC
// Description du rôle de la fonction : Initialisation du uC
// Paramètres d’entrée : Rien
// Paramètre de sortie : Rien
void INIT_UC(void)
{
PORTA=0x00 ;
set_tris_A(0b11100000) ;
PORTB=0x00 ;
set_tris_B(0b11000000) ; // RB6 & RB7 entrées pour l’ICD
}

Philippe LETENNEUR - GRANVILLE - 2003 - page 13

Vous aimerez peut-être aussi