Vous êtes sur la page 1sur 31

Module: Informatique Industrielle

Cycle Ingénieur: GLT & GSI


A.U: 2020/2021

Programmation des Microcontrôleurs PIC à l’aide du


compilateur MiKroC

Réalisé par:
Pr. AHMED MOUHSEN
2
Plan
Introduction

MicroC for PIC

Rappel de quelques notions sur Langage c

Bibliothèques Intégrées dans mikroC

Applications générales
MiKroC for PIC
3
 Le mikroC PRO for PIC est un outil de développement puissant et
riche en fonctionnalités pour les microcontrôleurs PIC.
 Le « mikroC PRO » est un compilateur Conçu par la société
«Mikroelektronika », le compilateur C nouvelle génération "MikroC
PRO" pour microcontrôleurs PIC bénéficie d'une prise en main très
facile.
 Il a une capacité à pouvoir gérer la plupart des périphériques
rencontrés dans l'industrie (Bus I2C, SPI, CAN, PWM, afficheur
LCD, EEPROM …), de ce fait il est un des outils de développement
incontournable et puissant.
MikroC for PIC
4
L’interface de mikroC for PIC

La zone de configuration
de circuit choisis

Zone pour le saisie de La liste des


code bibliothèque

Zone des messages de


compilation
MikroC for PIC
5 Création d’un nouveau projet sous mikroC

1) File=>New=>New
Project=>Next
MikroC for PIC
6
Création d’un nouveau projet sous mikroC

2)Saise les paramètre de


projetc=>Next
MikroC for PIC
7
Création d’un nouveau projet sous mikroC
Structure du programme MikroC

Déclaration et
directives sbit switch_on at RA0_bit;
sbit switch_off at RA1_bit;
Le programme
sbit LED at RB0_bit;
commence avec les mots clés
void main() Entrée au programme
{ L’exécution commence ici
trisa=3;
trisb=0;
porta=0;

Programme portb=0;
principale for(;;)
{
if(!switch_on)
LED=1;
if(!switch_off)
LED=0;
}
}
Langage c
9
Type de données standard
10 Langage c

Déclaration des variables:

Char car, pic; // deux caractères


Int table[10]; //Tableau de 10 entiers
Char *p; // Pointeur sur un caractère
11
Langage c

Affectation : = Affectation simple a=b;


*= Affectation produit a*=2=>(a=a*2)
%= Affectation reste a % =5;=>(a=le reste de a/5)
+= Affectation somme a+=2=>(a=a+2)
&= Affectation ET entre bits a & =5;=>(a=a&5)
^= Affectation OU EX entre bits a ^b=5;=>(a=a^5)

|= Affectation OU entre bits a | b=5;=>(a=a|5)

<<= Affectation décalage gauche a<<=5; =>(a=a<<5)

>>= Affectation décalage droite a>>=5; =>(a=a>>5)


12 Langage c
Opérateurs binaires :
13 Langage c

Symbole Description Notation


Tests :
< Strictement inferieur If(a<b)

<= Inferieur ou égale If(a<=b)

> Strictement supérieur If(a>b)

>= Supérieur ou égale If(a>=b)

!= Différent If(a!=b)

&& ET logique If(a=5&&b=4)

|| OU logique If((a==4)||(b==5));

== Egale If((a==b);
Langage c
14

Boucle: For
Syntaxe:
For(Initialisation; condition ; Modification)
{
Action 1;
Action2;
…;
}
Exemple:
For(i=0; i<7; i++)
{
Action;
}
15 Langage c
Fonctions:
Définition d’une fonction :
type nom-fonction (type-1 arg-1,...,type-n arg-n)
{
[déclarations de variables locales ]
liste d'instructions }
Exemple:
int produit (int a, int b)
{
return(a*b);
}
16 Langage c
Quelques fonctions :
fonction Description

Highest Retourne le 3eme plus faible octets d’un nombre

Delay_us Crée le retard en microsecondes

Delay_ms Crée le retard en milisecondes

Clock_Khz Règle l’horloge de microcontrôleur en KHz

Clock_Mhz Règle l’horloge de microcontrôleur en Mhz


EX: Une LED est connectée au PORTB (broche RB0) d'un microcontrôleur PIC16F877A, Ecrire un
programme qui fera clignoter la LED ON et OFF en permanence dans l’intervalle d'une seconde.
17
Solution:
Void main () void main()
{
{
TRISB = 0; // Configurer PORTB en sortie
PORTB = 0;
for (;;) // Boucle sans fin
TRISB = 0;
{
while(1)
PORTB = 1; // Activer LED
{
Delay_ms (1000); // Retard 1 seconde
PORTB = ~PORTB;
PORTB = 0; // Desactiver LED
Delay_ms(1000);
Delay_ms (1000); // Retard 1 seconde
} }

} }
Compteur modulo 64:
void main () {
char x;
TRISB=0 ;
Loop :
PORTB=0 ;
delay_ms(1000) ;
for (x=0 ; x<64 ; x++ )
{
PORTB++; //PORTB+PORTB+1
delay_ms(1000);
}
goto loop ;
}
20
Bibliothèques Intégrées à mikroC
Dons le compilateur mikroC for PIC on trouve un ensemble des bibliothèques qui facilitent la programmation,
ici on va détailler quelques une.

Bibliothéque Description
ADC Convresion analogique numérique

UART Pour manipuler la communication à travers le module UART

PWM Manipulation de PWM

I2C Pour simuler le protocole I2C

CAN Pour le fonctionnement avec le module CAN

Keybad Pour manipuler le clavier

SPI Pour manipuler le module de communication SPI

LCD Pour manipuler une afficheur LCD


21
Bibliothèques Intégrées à mikroC
bibliothèque ADC: Fonctions essentielles
ADC_Init(x) Initialser le module

ADC_Read(x) Lecture de résultat de conversion a partir de canal spécifier x

Registres utilisés
Le registre utilisé dans ce cas est:
 ADCON1 en h'9F' page 1 : registre de contrôle n°1 du convertisseur.
ADFM PCFG3 PCFG2 PCFG1 PCFG0

Bits de contrôle de la configuration des Ports.


Choix de forme du résultat

N.B: dans ce cas on va utilisé la bibliothèque ADC=>il suffit d’affecté la valeur 0 au registre
ADCON1
22
Bibliothèques Intégrée à mikroC
Exemple d’utilisation d’ADC: description
Cette manipulation a pour objectif de programmer le module CAN (Conversion Analogique Numérique) du
pic 16f877A. (Le signal à convertir peut-être une tension issue d'un capteur qui sera simulé par un
potentiomètre.), le signal numérique sera codé sur 10bits, c'est une valeur comprise entre h'000' et h'3FF'.
Bibliothèques Intégrées à mikroC
23 Exemple d’utilisation d’ADC : Le code de programme sous mikroC for PIC

int temp_rs; //Déclaration d’un variable pour le stockage des valeurs de conversion
void main() //la function principal
{
ADCON1=0x00; // configuration de registre ADDCON1
TRISB=0x00; // configuration de registre des prorts B/C en sortie
TRISC=0x00;
ADC_Init(); // initialization du module ADC
while(1)
{
temp_rs=ADC_Read(0);
PORTB=temp_rs; // affectation des premiers 8 bits temp_res au portB
PORTC=temp_rs>>8; // affectation des 2 bits de poid fort au portC
delay_ms(100);
}
}
24 Bibliothèques Intégrées à mikroC
bibliothèque PWM: Fonctions essentielles

PWMx_Init(y) Choi de la fréquence y de PWM en Hz sur le canal x

PWMx_Start() Démmarer du module x de PWM

PWMx_Stop() Arrét du module x PWM

PWMx-Set_Duty(y) Chois du rapport cyclique


Exemple 1 : Utilisation de PWM
char i ;
void main() {

TRISB = 0; // PORTB en sortie


TRISC = 0; // PORTC en sortie
Pwm_Init(2000); // Initialise PWM a 2 Khz
i =0 ;
while (1)
{
Pwm_Start(); // Demarre PWM
i= i+10 ; // incrémentation par 10 du rapport cyclique
Pwm_Change_Duty(i); // changer le rapport cyclique

// ou PWM1_Set_Duty (i) ;

portb = i ; // on affiche la valeur sur le portb


delay_ms(1000) ; //on attend 1 sec
}
}
27 Bibliothèques Intégrée à mikroC
Exemple 2 : Utilisation de PWM

Un signal PWM est caractérisé par une période, et un temps de travail ou le signal est à "1".
Ce temps permet de calculer le rapport cyclique qui peut caractériser le signal.

Cette manipulation a pour objectif de programmer une modulation de largeur d’impulsion


via le pic 16f877A. Grace a ce signal on va contrôler un moteur MCC
28
Bibliothèques Intégrée à mikroC
Bibliothèque LCD: Fonctions essentielles
Lcd_Init() Initialisation du module LCD

Lcd_Cmd(x) Envoi du commande x au module LCD

Lcd_Out(I,C, ’’chaine’’) Afficher une chaine de caractère sur LCD a la ligne I et la colonne C

Lcd_Out_Cp(‘y’) Afficher une caractère y sur LCD a la position actuelle du curseur

Lcd_Chr(I,C,’y’) Afficher une caractère y sur LCD a la ligne I et la colonne C


29 Bibliothèques Intégrées à mikroC
Exemple d’utilisation de LCD: description
 Afficheur LCD relié au PIC16F877A(RS-4 EN-5 D4-0 D5-1 D6-2 D7-3).
 Programme affichant textes « FST_SETTAT » sur la le 1ère ligne et « CI_ISESE_S3 » sur la deuxième ligne.
 Oscillateur: 8MHz
Bibliothèques Intégrées à mikroC
30 Exemple d’utilisation du LCD: Le code de programme sous mikroC for PIC

// les connections de l’afficheur LCD 2x16 // programme principal


sbit LCD_RS at RB4_bit; void main() {
sbit LCD_EN at RB5_bit; char text1[]=" FST_SETTAT " ;
sbit LCD_D4 at RB0_bit; char text2[]=" CI:GLT_GSI " ;
sbit LCD_D5 at RB1_bit; TRISB=0x00;
sbit LCD_D6 at RB2_bit;
PORTB=0xFF;
sbit LCD_D7 at RB3_bit;
//les directions
Lcd_Init();
sbit LCD_RS_Direction at TRISB4_bit; Lcd_Cmd(_LCD_CLEAR);
sbit LCD_EN_Direction at TRISB5_bit; Lcd_Cmd(_LCD_CURSOR_OFF);
sbit LCD_D4_Direction at TRISB0_bit; Lcd_Out(1,1,text1);
sbit LCD_D5_Direction at TRISB1_bit; Lcd_Out(2,1,text2);
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit; }
31

Merci pour votre Attention

Vous aimerez peut-être aussi