Exercices 7
Exercices 7
Exercices 7
Exercices 7 :
1) On veut réaliser un signal carré avec le PIC 16F887. Le signal va être sur le bit 0 du
PORTC. Proposer un programme en assembleur afin d’assurer ce signal.
2) Si on vous dit que le signal d’horloge externe du PIC est à une fréquence de 4Mhz.
Proposer le programme qui assure une fréquence de 100Khz pour le signal désiré.
Exercices 8 :
Nous désirons allumer la LED lorsque nous pressons le bouton, et l’éteindre lorsque nous le
relâchons. On considère un bouton poussoir sur le pin RA3 et la LED branchée sur le pin RC0. On
utilise ici le uC 16F887.
RC0
BSF
1
BSF 2xNOP
BCF Goto
0
Ts = 10 Tcy
Ts/2 = 5Tcy Ts/2=5Tcy
Fp=F/4=1Mhz
Tp = 1us = Tcy
F/4
Div uP
F uC
RC0
F=4Mhz
Fs = 100Khz
Ts = 1/Fs
= 10 us
Ts = 10 Tcy
Exemple de programme complet
Exemple 1 : sans interruptions
Gestion de
Org H'00' ; Début du programme dans la ROM (ligne non obligatoire) mémoire
; qq instruction 6 != 6h programme
; suite du programme :
Sur le 16F887, l'es interruptions sont classées en deux catégories, les interruptions
primaires et les interruptions périphériques. Elles sont gérées par les registres :
Toutes les interruptions peuvent être validées/interdites par le bit INTCON,GIE
Toutes les interruptions périphériques peuvent être validées/interdites par le bit
INTCON,PEIE
Chaque interruption peut être validée/interdite par son bit de validation individuel
→ En résumé, pour valider une interruption périphérique (par exemple), il faut
positionner 3 bits, GIE, PEIE et le bit individuel de l’interruption.
Interruptions / Timers
Validation TMR0 Vérifier le déclenchement de l’interruption
INTCON = b’ 1 0 1 0 0 0 0 0’
Toutes les interruptions peuvent être validées/interdites par le bit INTCON,GIE
Toutes les interruptions périphériques peuvent être validées/interdites par le bit
INTCON,PEIE
Chaque interruption peut être validée/interdite par son bit de validation individuel
→ En résumé, pour valider une interruption périphérique (par exemple), il faut
positionner 3 bits, GIE, PEIE et le bit individuel de l’interruption .
Interruptions / Timers
Timers :
Principe de fonctionnement
Lorsque le compteur dépasse la valeur maximale qu'il peut contenir (par exemple : 256 pour un
compteur sur 8 bits), un drapeau (flag en anglais) se lève. TMR0 : taille de 8 bit => 0 - 255
Interruptions / Timers
Timers :
Méthodes de configuration
Un Timer doit pouvoir compter un temps défini par le programme (par exemple 1ms, 10ms, 50ms,
etc.). Pour cela, 2 paramètres peuvent être modifiés :
La fréquence du signal appliqué au compteur : Le compteur s'incrémentera ainsi plus ou moins vite.
Le nombre d'impulsions à compter : Le drapeau se lève toujours lorsqu'il y a débordement, on peut
donc faire partir le compteur d'une valeur non nulle pour réduire le temps de comptage.
Ts
Pour réduire le temps de comptage, on peut donc charger une valeur initiale non nulle dans le
compteur.
/2
8MHz 2Mhz 1MHz 1MHz / nbr_imp
Pré-compteur
reglable
Registre du Drapeau du
timer0 (8bits) timer0 dans
INTCON
Interruptions / Timers
Timers : timers du PIC16F887
Composition du
Timer0
Le pré-diviseur peut prendre une valeur parmi la liste suivante : 1, 2, 4, 8, 16, 32, 64, 128 ou
256.
La valeur initiale peut prendre n'importe quelle valeur entière comprise entre 0 et 255.
Temps maximum :
Configurer le pré-diviseur le plus grand : 256
Démarrer le compteur avec la valeur la plus petite possible: 0
Interruptions / Timers
Timers : timers du PIC16F887
Exemple: Calcul d'un temps de 10ms
Interruptions / Timers
Timers : timers du PIC16F887
Registre de configuration du Timer0 : OPTION_REG
Source externe
d’oscillation via
RA4
Interruptions / Timers
Timers : timers du PIC16F887
Registre de configuration du Timer0 : OPTION_REG
Source externe
d’oscillation via
RA4
Interruptions / Timers
Timers : timers du PIC16F887
Registre de configuration du Timer0 : OPTION_REG