Beruflich Dokumente
Kultur Dokumente
b- Structure répétitive:
Structure : Boucle While
Langage Graphique Langage algorithmique Langage mikropascal
- 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.
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.
c- Structure conditionnelle :
Le PIC 16F876 :
Le PIC 16F877 :
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
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 :
NB : Quand le prédiviseur est affecté au watchdog (PSA=1), le TMR0 est prédivisé par 1.
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
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);
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
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() ;
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.