Sie sind auf Seite 1von 10

I - PROGRAMMATION EN MIKROPASCAL :

1 - Structure d’un programme :


Un programme est un texte que le compilateur va traduire en fichier hexadécimal. Le texte d'un programme
contient au moins trois parties.
a- L'entête : commence par le mot réservé " Program " suivi par le nom du projet.
b- Les déclarations : On déclare les variables, les Procédures et les fonctions utilisées dans le
programme.
c- Le corps du programme : Commence par " Begin " et se termine par "End " suivi d'un point final.
Entre "Begin" et "End" se trouvent les instructions à effectuer par le programme.
Algorithmique Langage PASCAL Commentaires
Algoritme Nom Algorithme ; // Entête
Program Nom programme ;
Variables
Var
Nom variable : Type ; // Déclaration
Nom variable : Type ;
Constantes
Const
Nom constante : Type =valeur ;
Nom constante : Type =valeur ;
Début
Begin
…….. // Programme
……..
Fin. principal
End.

2 - Les règles de bases :


a- Toutes instructions ou actions se terminent par un point virgule ;
b- Une ligne de commentaires doit commencer par "{" et se terminer par "}" ou commence par "//".
c- Un bloc d'instructions commence par "Begin" et se termine par "End".
3 - Les types de variables utilisées en Mikropascal :
Type Désignation Taille Rang
Bit bit 1 bit 0 ou 1
Bit registre sbit 1 bit 0 ou 1
octet byte 8 bits 0 - 255
Caractère ASCII char 8 bits 0 - 255
mot word 16 bits 0 - 65535
Octet signé short 8 bits -128 à +127
Entier integer 16 bits -32768 à +32767
Entier long longint 32 bits -2147483648 à +214783647
±1.17549435082 * 10-38 à
Réel real 32 bits
±6.80564774407 * 1038
Tableau Array[n]of type n éléments Rang du type
Chaîne de caractères String[N] N*8bits 0 – 255(pour chaque caractère)

N.L Documents technologiques pour PIC Page : 1/10


4 - Les bases du compilateur Mikropascal :
Le décimal : A = 12 ; L’hexadécimal : A = $0C ou A = 0x0C ; Le binaire A = %0001100
5- Les opérateurs arithmétiques :
Opérateur Opération Opérateur Opération
+ Addition / Division
- Soustraction Div Division : arrondit à l'entier le plus proche
* Multiplication Mod reste de la division entière
6- Les opérateurs de comparaison :
Opérateur Opération Opérateur Opération
= Egalité < Inférieur à
<> Différent >= Supérieur ou égale
> Supérieur à <= Inférieur ou égale
7- Les opérateurs logiques :
Opérateur Opération Opérateur Opération
And Fonction ET logique Not complement : inverser chaque bit
Or Fonction OU logique Xor Fonction XOR logique
- décalage à droite - décalage à gauche
- chaque bit de l’octet a est déplacé - chaque bit de l’octet a est déplacé
Shr vers la droite Shl vers la gauche
- exemple : si a = 1101 alors : - exemple : si a = 1101 alors :
a shr 2 = 0011 a shl 2 = 0100

8 - Les structures usuelles :


a- L'affectation : C'est l'action d'attribuer une valeur à une variable.

Langage graphique Langage algorithmique Langage PASCAL

a = b+c a  b+c a : = b+c

b- Structure répétitive:
Structure : Boucle While
Langage Graphique Langage algorithmique Langage mikropascal

TANQUE condition WHILE condition DO


FAIRE BEGIN
DEBUT Action ;
Action ; END ;
FINFAIRE ;

- L’action est exécutée de façon répété tant que la condition est vraie.
- L’action ne s’exécute pas si la condition est fausse.

Structure : Boucle Repeat


Langage Graphique Langage algorithmique Langage mikropascal

REPETER REPEAT
DEBUT BEGIN
Action ; Action ;
FIN ; END ;
JUSQU’A condition UNTIL condition;
-L’action est exécutée de façon répété tant que la condition est fausse.
-L’action est exécutée une seule fois si la condition est vraie.

N.L Documents technologiques pour PIC Page : 2/10


Structure : for .. To .. do :
Langage Graphique Langage algorithmique Langage mikropascal

POUR n variant de valeur_initiale FOR n :=valeur_initiale


JUSQU’A valeur_finale FAIRE TO valeur_finale DO
DEBUT DEBUT
Action ; Action ;
FIN ; FIN ;
FINFAIRE ; END ;

c- Structure conditionnelle :

Structure : if ... Then …

Langage graphique Langage algorithmique Langage MikroPascal

Si condition ALORS IF condition THEN


DEBUT BEGIN
Action ; Action ;
FINSI ; END;

Structure : if ... Then ... else …

Langage graphique Langage algorithmique Langage MikroPascal

SI condition ALORS Action1 ; IF condition THEN Action1


SINON Action2 ; ELSE Action2 ;

Structure : case ... of ...


Utiliser dans le cas d’une longue série des conditions en cascade
Langage graphique Langage algorithmique Langage MikroPascal
Selon expression Case expression of
Val1 : Action1 ; Val1 : Action1 ;
Val2 : Action2 ; Val2 : Action2 ;
… …
ValN : ActionN; ValN : ActionN;
Autrement : Action0 ; Else : Action0
FinSelon End ;

II- Différents types de PIC :


 Le PIC 16F84 :
La Figure ci-contre montre le brochage du circuit.
Les fonctions des pattes sont les suivantes :
- VSS, VDD : Alimentation
- OSC1, 2 : Horloge
- RA0-4 : Port A
- RB0-7 : Port B
- T0CKL : Entrée de comptage
- INT : Entrée d'interruption
- MCLR : Reset

N.L Documents technologiques pour PIC Page : 3/10


 Le PIC 16F628 :
Le 16F628 possède jusqu'à
16 entrées/sorties :
 6 dans le port A (RA0 à RA7)
 8 dans le port B (RB0 à RB7)

 Le PIC 16F876 :

Le 16F876 possède jusqu'à


22 entrées/sorties :
 6 dans le port A (RA0 à RA5)
 8 dans le port B (RB0 à RB7)
 8 dans le port C (RC0 à RC7)

 Le PIC 16F877 :

Le 16F877 possède jusqu'à


33 entrées/sorties :
 6 dans le port A (RA0 à RA5)
 8 dans le port B (RB0 à RB7)
 8 dans le port C (RC0 à RC7)
 8 dans le port D (RD0 à RD7)
 3 dans le port E (RE0 à RE2)

III- Les interruptions :


1- Définition : Une interruption est un événement qui provoque l’arrêt d’un programme en cours
d’exécution pour aller exécuter un autre programme appelé programme (ou routine ) d’interruption.
A la fin du programme d’interruption le microcontrôleur reprend le programme principal à l’endroit où il
s’est arrêté.
Donc Une interruption est un programme qui a une totale priorité sur le déroulement global d’un programme.
En l’absence d’interruption, le programme se déroule de la façon dont a décidé
L'exécution d'une procédure d'interruption répond à un évènement qui peut être interne ou externe au
microcontrôleur. Dans la suite, on s’intéresse uniquement aux interruptions externes.
2- Les interruptions externes :
 Un changement d'état sur la broche RB0/INT
 Un changement d'état sur l’une des broches RB4 à RB7;
Registre INTCON (INTerrupt CONTroler):: (PIC 16F628 - PIC 16F876 - PIC16F877)
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
Pour le PIC 16F84A le bit 6 est : EEIE (EEPROM Interrupt Enable bit)

N.L Documents technologiques pour PIC Page : 4/10


Bit7 GIE Global Interrupt Enable : autorise toute les sources d’interruption
Bit6 PEIE Peripheral Interrupt Enable : interruptions causées par les périphériques.
Bit5 T0IE Timer0 Overflow Interrupt Enable : Interruption suite au débordement du Timer0
Bit4 INTE RB0 Interrupt Enable : autorise l’Interruption sur RB0
Bit3 RBIE PortB Interrupt Enable : autorise l’interruption suite au changement de RB4..7
Bit2 T0IF Timer0 Overflow Interrupt Flag : drapeau mis à 1 suite au débordement du Timer0
Bit1 INTF RB0 Interrupt Flag : drapeau mis à 1 si l’interruption sur RB0 est active
Bit0 RBIF PortB Interrupt Flag : drapeau mis à 1 si l’interruption sur RB4..7 est active

3- Déroulement d'une interruption :


Lorsque l'événement déclencheur d'une interruption intervient, alors son drapeau est positionné à un
(levé). Si l'interruption correspondante a été validée (au cours du programme), elle est alors déclenchée :
le programme arrête ce qu'il est en train de faire et va exécuter la procédure d’interruption.
Interruptions
causés par les
périphériques

PEIE

Interruption RB0/INT :
L’interruption externe RB0/INT se produit sur le front montant ou descendant sur l’entrée RB0.
 Configuration de l’interruption RB0/INT : L’interruption externe RB0/INT est gérée par 4 bits :
- GIE : bit de validation globale de toutes les interruptions (1 = oui, 0 = non)
- INTE : bit de validation de l’interruption externe RB0/INT (1 = oui, 0 = non)
- INTF : indicateur ou drapeau correspondant à l’interruption externe RB0/INT
- INTEDG : type du front sur l’entrée RB0/INT
(INTEDG = 1 : Front montant ; INTEDG = 0 : Front descendant) (Registre PTION_REG)
Pour activer l'interruption externe via la broche RB0/INT on doit affecter au registre INTCON :
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
INTCON := $90
1 0 0 1 0 0 0 0
Pour pouvoir revenir au programme principal et autoriser de nouvelles interruptions sur la broche RB0/INT,
il faut mettre : Intcon.GIE :=1 ; Intcon.INTF :=0 ; à la fin du sous-programme d’interruption.
N.B : si on veut produire l’interruption sur le front descendant ou le front montant d’une impulsion appliquée
sur RB0 on doit configurer le registre OPTION_REG

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


RBPU INTEDG TOCS TOSE PSA PS2 PS1 PSO

INTEDG = 1 : interruption si front montant sur RB0.


INTEDG = 0 : interruption si front descendant sur RB0.

N.L Documents technologiques pour PIC Page : 5/10


Interruption RBI :
Cette interruption est provoquée par un changement d’état sur au moins une des entrées RB4 à RB7.
Les broches (RB4 à RB7) configurées en entrées sont comparées périodiquement à l’ancienne valeur
mémorisée par la dernière lecture du port B pour gérer l’interruption.
Lorsque le mécanisme de l’interruption RB4 à RB7 se déclenche le microcontrôleur verrouille le bit
indicateur RBIF à 1, une opération de lecture sur le port B est nécessaire pour déverrouiller l’accès
au bit RBIF afin de pouvoir le remettre à 0

 Configuration de l’interruption RBI : Cette interruption est gérée par les 3 bits suivants :
- GIE : bit de validation globale de toutes les interruptions (1 = oui, 0 = non)
- RBIE : bit de validation de l’interruption externe RBI (1 = oui, 0 = non)
- RBIF : indicateur ou drapeau correspondant à l’interruption externe RBI
Pour activer l'interruption sur les broches RB4 à RB7, on doit affecter au registre INTCON :
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF INTCON := $88
1 0 0 0 1 0 0 0

Pour pouvoir revenir au programme principal et autoriser d’autres interruptions sur les broches RB4 à RB7,
il faut mettre : Intcon.GIE :=1 ; Intcon.RBIF :=0 ; à la fin du sous-programme d’interruption.
Procedure interrupt ;
Begin
Instruction 1 ; …… ; Instruction n ;
Réactivation de l’interruption // bit GIE
Remise à zéro de l’indicateur correspondant à la source d’interruption utilisée // bit TOIF INTF RBIF
End ;

IV- LE TIMER :
1- Définition : Le Timer est un module intégré dans les microcontrôleurs type PIC. Il assure la
fonction comptage ou la fonction temporisation.
Le choix du mode de fonctionnement se fait par programmation du registre OPTION_REG.
 Mode compteur : le TIMER0 est un compteur modulo 256 qui permet de compter le nombre des
impulsions reçues sur la broche RA4/TOCKI.
 Mode Temporisateur : le TIMER0 est un compteur modulo 256 qui permet de compter le nombre
des impulsions d’horloge reçues sur la broche Osc1/Osc2.
2- Principe de fonctionnement :

3- Registre de contrôle :OPTION_REG :


Bit 7 Bit 6 Bit5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

N.L Documents technologiques pour PIC Page : 6/10


Le tableau suivant résume les huit bits du registre OPTION_REG:

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Prédivision


RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 TMR0 WDT
0 0 0 2 1
Pull up 1 : RB0/INT Timer0 Timer0 Prédiviseur
0 0 1 4 2
sur portB active au clock select source edge
0 1 0 8 4
front mon (RA4) 0: Timer0
0 1 1 16 8
1: 1 : Compteur (RA4) 0 : front
1 0 0 32 16
désactivé 0 : RB0/INT montant 1:chien de
1 0 1 64 32
active au 1 : front garde
1 1 0 128 64
0 : activé front des 0 : Temporisateur descendant (WDT)
1 1 1 256 128

NB : Quand le prédiviseur est affecté au watchdog (PSA=1), le TMR0 est prédivisé par 1.

V- Les afficheurs LCD :


Les afficheurs à cristaux liquides, autrement appelés afficheurs LCD.
Bibliothèque LCD :

Description Exemple
Initialiser le module LCD en
Lcd_Init(); Lcd_Init();
respectant les connexions déclarées
Imprime le texte sur l'écran LCD à
partir de la position spécifiée.
Lcd_Out(ligne: byte; • ligne: la position de départ Lcd_Out(1, 3, "Hello!");
colonne: byte; var texte: numéro de ligne // écrire texte « Hello! » sur LCD
string); • Colonne: la position de départ à la position ( ligne 1, colonne 3)
numéro de colonne
• Texte: texte à rédiger
Lcd_Chr(ligne: byte; Afficher caractère sur l'écran LCD à Lcd_Chr(2, 3, 'i');
colonne: byte; la position spécifiée. // écrire le caractère « i » sur LCD
caractere: byte); à la position (ligne2, colonne3)
Lcd_Cmd( commande: Envoie une commande à LCD Lcd_Cmd(_LCD_CLEAR);
byte); //effacer l’écran LCD

VI- Conversion Analogique Numérique : CAN ou ADC


1- Introduction : - Le PortA est un Port multiplexé en mode analogique noté (AN) et en mode numérique
noté (RA) : (RA) : mode logique (0 ou 1) ; (AN) : mode analogique (de 0 à 5V)
Pour PIC16F628A : Pour initialiser les broches du PortA en mode logique en doit configurer le
registre CMCON :=7;
Pour PIC16F876A ou PIC16F877A : Pour initialiser les broches du PortA en mode logique en doit
configurer le registre : ADCON1 :=6 ;
Pour PIC16F84A : les broches du PortA sont non multiplexées et ils sont en mode logique.
Les microcontrôleurs PIC 16F87X possèdent un module de conversion permettant de convertir une tension
analogique, appliquée sur l’un des 8 canaux (de AN0 à AN7 pour le PIC 16F877A) ou l’un des 5 canaux
(de AN0 à AN4 pour le PIC 16F876A), comprise entre Vréf - et Vréf + en une valeur numérique N de 10 bits

N.L Documents technologiques pour PIC Page : 7/10


2- Principe de fonctionnement :
Le convertisseur analogique-numérique (CAN ou ADC) permet de convertir une grandeur analogique
(tension Ue) en une valeur numérique (nombre N) :

3- Bibliothèque d’un CAN :

Description Exemple
ADC_Init();
ADC_Init(); - Initialiser le module ADC de PIC.
// Initialiser le module ADC
- initialiser le module et configurer le var tmp : word; // tmp : valeur
channel spécifié comme entrée.
ADC_Read(channel : byte) numérique de 0..1023
: word; - démarrer une opération de conversion.
- lire la tension analogique sur le channel tmp := ADC_READ(2);
et le convertir en une valeur numérique
- lire le résultat de conversion var tmp : word; // tmp : valeur
ADC_Get_Sample(channel uniquement. numérique de 0..1023
: byte) : word; - Remarque : Il faut initialiser le module
avant d’appeler cette fonction tmp := ADC_Get_Sample(2);

4- Conversion d’un nombre en une chaine de caractère :


 ByteToStr :
procedure ByteToStr(nombre : byte; var chaine : array[3] of char);
Description Convertir un nombre en une chaine de caractères,
var N : byte; txt : Sting[3] ;
N := 24;
Exemple
ByteToStr(N, txt);
// N = 24 = nombre , txt ="˽24" = 3 chaines de caractère

 Autres procédures de conversion des données :


WordToStr( ) ; IntToStr ( ) ;
5- Registre de configuration :
ADCON1 :
Bit 7 Bit 6 Bit5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0

 Bit « 7 » : ADFM : Justification du résultat


de la conversion sur 10 bits « ADRESH-ADRESL ».
 ADFM = 1 : justification à droite,
 ADFM = 0 : justification à gauche
 Bits « 6 : 5 : 4 » : non utilisés  lire 0.

N.L Documents technologiques pour PIC Page : 8/10


 Bits « 3 à 0 » : PCFG3 PCFG2 PCFG1 PCFG0 : Configuration des E/S et des tensions de références.
Les 5 broches de PORTA peuvent être configurés soit en E/S digitales, soit en entrées analogiques.
RA2 et RA3 peuvent aussi être configurées en entrée de référence.

PIC 16F876
PIC 16F877
ADCON1 Port E Port A Tension de référence

AN4/RA5

AN3/RA3

AN2/RA2

AN1/RA1

AN0/RA0
AN7/RE2

AN6/RE1

AN5/RE0
PCFG3

PCFG2

PCFG1

PCFG0
ADFM

- - - Vréf+ Vréf-

1 - - - 0 0 0 0 A A A A A A A A VDD Vss
1 - - - 0 0 1 0 D D D A A A A A VDD Vss
1 - - - 0 1 0 0 D D D D A D A A VDD Vss
1 - - - 0 1 1 × D D D D D D D D VDD Vss
1 - - - 1 0 0 1 D D A A A A A A VDD Vss
1 - - - 1 1 1 0 D D D D D D D A VDD Vss

A : entrée analogique ; D : entrée numérique ; - : état 0 ou 1

VII- Modulation de largeur d’une impulsion : MLI ou PWM


1- Principe :
La PWM est un module intégré dans le PIC qui consiste à générer un signal carré de période constante
mais à rapport cyclique α variable. (C’est le principe d’un hacheur série)

2- Bibliothèque d’un MLI :

Description Exemple
Initialiser le module pour générer sur la PWM1_ Init (5000) ;
PWMi_Init(f)
sortie CCPi un signal PWM à la fréquence f Initialise le module à f = 5KHz
Changer le rapport α (0 < α < 1) PWM1_Set_Duty(192) ;
PWMi_Set_Duty(alpha)
α= alpha / 255 et 0 < alpha <255  = 192 / 255 = 0.75
PWMi_Start Démarrer le signal PWM PWM1_Start() ;
PWMi_Stop Arrêter le signal PWM PWM1_Stop() ;

N.L Documents technologiques pour PIC Page : 9/10


VIII- Gestion d’un clavier :
Le compilateur Mikropascal Pro propose des procédures
prédéfinies pour la gestion d’un clavier matriciel :
Bibliothèque d’un clavier :

Description Exemple
var keypadPort : byte at PORTB;
Initialiser le port pour travailler avec clavier. Keypad_Init();
Keypad_Init( );
// Initialiser PORTB pour
communication avec keypad
-Si une touche enfoncée : var kp : byte;
Keypad_Key_Click( ): le code est de 1 à 16. kp := Keypad_Key_Click();
byte; -Si aucune touche n’est actionnée (au // kp={0,1,2,…,16}
repos) : le code est 0.

IX- Procédure prédéfinie :


1- Procédure INC ( ) ;
L’instruction N :=N+1 peut être remplacée par la procédure prédéfinie INC
Prototype Procedure Inc (var p : longint);
Description Incrémenter p par 1.
Exemple p := 4; // p =4
Inc(p); // p = 5
2- Procédure DEC ( ) ;
L’instruction N :=N-1 peut être remplacée par la procédure prédéfinie DEC
Prototype Procedure Dec (var p : longint);
Description décrémenter p par 1.
Exemple p := 4; // p =4
Inc(p); // p = 3
3- Procédure Delay_ms ( ) ;
Prototype procedure Delay_ms(time_in_ms : const dword);
Exemple Delay_ms(1000); // pause d’une seconde
4- Procédure SetBit :
Prototype procedure SetBit(var register : byte; bit_registre : byte);
Description Mettre le bit du registre à 1
Exemple SetBit(PORTB, 2); // mettre à 1 le bit N°2 du registre PORTB
équivalence L’instruction SetBit(PORTB,2) est équivalente à l’instruction : PORTB.2 :=1 ;
5- Procédure ClearBit :
Prototype procedure ClearBit(var register : byte; bit_registre : byte);
Description Mettre le bit du registre à 0
Exemple ClearBit(PORTC,7) ; // mettre à 0 le bit N°7du registre PORTC
Equivalence L’instruction ClearBit(PORTC,7) est équivalente à l’instruction : PORTC.7 := 0;
6- Procédure TestBit :
Prototype function TestBit(register, bit_registre : byte) : byte;
Description Si le bit du regsitre égale 1 alors TestBit = 1 sinon alors TestBit = 0
Exemple KM:= TestBit(PORTD,3); // Si PORTD.3 = 1 alors le relais KM =1
// si PORTD = 0 alors le relais KM=0
Equivalence If PortD.3 = 1 then KM :=1 else KM :=0 ; est équivalent à KM :=TestBit(Portd,3) ;

N.L Documents technologiques pour PIC Page : 10/10

Das könnte Ihnen auch gefallen