• Aucun résultat trouvé

Utilisation des timers

N/A
N/A
Protected

Academic year: 2022

Partager "Utilisation des timers"

Copied!
5
0
0

Texte intégral

(1)

Lors de la séance précédente, nous avions réalisé une temporisation par boucle de décrémentation.

Les microcontrôleurs intègrent des compteurs, appelés « timers » qui gèrent parfaitement, entre autres, ce genre de fonctions.

Le PIC16f877A intègre 3 timers : - le timer 0 de 8 bits ; - le timer 1 de 16 bits ; - le timer 2 de 8 bits.

1 Etude du timer 0

Le timer 0 est un compteur 8 bits prépositionnable par le registre « TMR0 » accessible en banque 0 ; la valeur de ce registre sera incrémentée et il sera possible de la lire à tout moment.

Le timer 0 est configuré par le registre « OPTION_REG » accessible en banque 1 et 3.

Le timer 0 peut avoir comme source d’horloge, suivant le bit « TOCS » du registre « OPTION_REG » : - soit l’horloge interne du microcontrôleur, c’est à dire l’horloge du quartz à fréquence divisée

par 4 (TOCS=0) ;

- soit une horloge externe, appliquée sur la borne TOCKI, borne multiplexée avec RA4 (TOCS=1). Dans ce cas, le comptage peut se faire sur front montant (« TOSE » de

« OPTION_REG » au NL0) ou sur front descendant (TOSE=1).

(2)

Suivant le bit « PSA » de « OPTION_REG », cette horloge peut être divisée (PSA=0) ou non. Le rapport de division est fixé de 2 à 256 suivant les bits « PS2, PS1 et PS0 » du même registre.

Noter que le prédiviseur est une ressource commune avec le « Watchdog ». Il ne pourra être utilisé que pour l’une des fonctions suivant « PSA ».

Lorsque le registre TMPR0 passe de FFh à 00h, le bit « TMR0IF » (TiMeR0 Interrupt Flag) du registre

« IT1CON » passe à 1. Il est possible de détecter ce passage :

- soit en scrutant ce bit (ne pas oublier de le remettre au NL1 après lecture pour une nouvelle utilisation) ;

- soit en autorisant une interruption du programme (voir séance suivante).

2 Programmation

Ouvrir un nouveau projet TP2_timer pour PIC16F877A, y inclure le fichier « Prog1.asm » du répertoire

« Ressources \ TP2_timer », sauvegarder le fichier dans votre répertoire sous un nom différent, supprimer la version d’origine du projet.

Analyser le programme (reproduit en annexe), noter en particulier :

- l’utilisation de la directive d’assemblage « BANKSEL » qui sélectionne la banque de la variable qui suit ;

- l’initialisation du timer0 ;

- la détection de la fin du comptage.

Calculer la fréquence de sortie en RB0.

Compiler et simuler le programme en observant en particulier les registres « TM0 »,

« OPTION_REG », « IT1CON ».

On remarquera la difficulté d’effectuer la simulation avec un rapport de prédivision aussi important ; on pourra contourner cette difficulté soit en modifiant le rapport, soit en utilisant des points d’arrêts.

Noter également l’effet de la directive « BANKSEL » sur les instructions mise en mémoire.

Programmer le circuit et vérifier le résultat.

Modifier le programme pour obtenir une fréquence de sortie de 1 s en utilisant le timer1.

(3)

Annexe 1 : programme timer 0

;********************************************************************************:

; Ce programme fait clignoter la DEL de la sortie RB0 sur la carte PICDEM2PLUS

; à une fréquence de 7,5 Hz en utilisant le timer 0 *

;********************************************************************************

LIST P=16F877A ; directive qui définit le processeur utilisé

#include <P16F877A.INC> ; fichier de définition des constantes

;******************************************************************************

; BITS DE CONFIGURATION

;******************************************************************************

__CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF

; _XS_OSC l'oscillateur est configuré en oscillateur à quartz haute fréquence

; _WDT_OFF le watchdog est désactivé

; _CP_OFF le code de protection de la mémoire programme est désactivé

; _CPD_OFF le code de protection de la mémoire EEPROM est désactivé

; LVP_OFF la programmation basse tension est désactivée

; ces opérations sont nécessaires pour fonctionner en mode "debug"

;********************************************************************************

; DEFINITIIONS *

;********************************************************************************

#DEFINE DEL PORTB,0 ;la DEL sur le port B, bit 0

;********************************************************************************

; DEMARRAGE SUR RESET *

;********************************************************************************

org 0x0 ; Adresse de départ après reset

goto debut

org 0x10 ; adresse de début du programme

debut

;********************************************************************************

; PROGRAMME PRINCIPAL *

;*******************************************************************************

call init boucle

bsf DEL ; mise à 1 de la sortie call tempo

bcf DEL ; mise à 0 de la sortie call tempo

goto boucle ; rebouclage

;********************************************************************************

; SOUS PROGRAMMES *

;********************************************************************************

;********************************************************************************

; INITIALISATION *

;********************************************************************************

init

; initialisation du PORTB en sortie

BANKSEL PORTB ; passage en banque 0

clrf PORTB ; RAZ des bascules D du port B

BANKSEL TRISB ; passage en banque 1

movlw b'00000000'

(4)

movwf TRISB ; PORTB en sortie

; initialisation du Timer 0 :division par 256 de l'horloge interne BANKSEL OPTION_REG ; Accès à la BANK1

movlw b'00000111' ; TOSC=0 PSA=0 PS2=1 PS1=1 PS0=1 movwf OPTION_REG ; predivision TMR0 timer 1:256

BANKSEL PORTB ; retour en banque 0

return

;********************************************************************************

; TEMPORISATION *

;********************************************************************************

tempo

clrf TMR0 ; RAZ DU TMR0

boucle_tmr

btfss INTCON,TMR0IF ; Test bit T0IF de INTCON goto boucle_tmr ; boucle d'attente si timer non nul bcf INTCON,TMR0IF ; RAZ du drapeau

return

;********************************************************************************

END ; directive signalant la fin du programme

Annexe 2 : exemple de solution pour le timer 1

Le timer 1 est un timer 16 bits prépositionnable par les registres 8 bits « TMR1H » (partie haute) et

« TMR1L » (partie basse) accessibles en banque 0.

Il peut fonctionner en compteur (déclenchement sur évènements externe) ou en timer (déclenchement sur l’horloge cycle) ; dans ce dernier cas « TMR1CS » de « T1CON » doit être à 0.

Le rapport de prédivision est configuré de 1 à 8 par les bits « T1CKPS1 » et « T1CKPS0 » du même registre.

Le fonctionnement n’est autorisé que si « TMR1ON » de « T1CON » est à 1.

Le débordement met le bit drapeau « TMR1F » de « PIR1 » à 1.

(5)

« T1CON » et « PIR1 » sont en banque 0.

Pour obtenir une temporisation de 0,5 s avec une prédivision de 8 (soit une horloge à 8 µs), il faut un préchargement dans TMR1H et L de :

216 - 0,5/(8 10-6 )= 3036d = 0BCDh.

Seules les parties modifiées par rapport au programme précédent ont été reproduites.

;********************************************************************************

; SOUS PROGRAMMES *

;********************************************************************************

;********************************************************************************

; INITIALISATION *

;********************************************************************************

init

; initialisation du PORTB en sortie

BANKSEL PORTB ; passage en banque 0

clrf PORTB ; RAZ des bascules D du port B

BANKSEL TRISB ; passage en banque 1

movlw b'00000000'

movwf TRISB ; PORTB en sortie

; initialisation du Timer 1 :division par 8 de l'horloge interne BANKSEL T1CON ; passage en banque 0

movlw b'00110001' ; T1CGPS1=1 T1CGPS0=1 T1OSCEN=0 TMR1CS=0 TMR1ON=1 movwf T1CON ; predivision TMR1 timer 1:8, hor ext off, hor int

; timer on return

;********************************************************************************

; TEMPORISATION *

;********************************************************************************

tempo

movlw 0xCD

movwf TMR1L ; initialisation de TMR1L movlw 0x0B

movwf TMR1H ; initialisation de TMR1H

boucle_tmr

btfss PIR1,TMR1IF ; Test bit TMR1F de PIR1 goto boucle_tmr ; boucle d'attente si timer non nul bcf PIR1,TMR1IF ; RAZ du drapeau

return

;********************************************************************************

END ; directive signalant la fin du programme

Références

Documents relatifs

Faire vivre les enjeux liés à l’éthique et à l’efficacité de l’école inclusive au sein d’un établissement. Appréhender les contextes scolaires et savoir inscrire son

D’ailleurs, en consultation avec le Comité consultatif pour l’enfance en difficulté (CCED), le Conseil s’est doté d’une politique en enfance en difficulté, soit la Politique

D’ailleurs, en consultation avec le Comité consultatif pour l’enfance en difficulté (CCED), le Conseil s’est doté d’une politique en enfance en difficulté, soit la Politique

direction d’école avertit la direction des Services à l’élève et il est possible qu’un conseiller pédagogique, la direction des Services à l’élève, la surintendance

• Les élèves rencontrant des difficultés scolaires bénéficient, avec l'accord des parents, d’une aide personnalisée de 2h hebdomadaires, assurée par les

Une des ré- ponses possibles actuellement par rapport aux jeunes, qu'ils soient ou non en difficulté, c'est bien que les · adultes sachent quelles sont leurs

Ceci, pas une fois pour toutes, mais régulièrement et surtout nous inter- roger avec les autres, pas seuls.. Le problème que l'on rencontre est que cette expression

Il refuse l’idée d’un modèle unique de grammaire pour toutes les langues (sinon comme idée régulatrice), mais en même temps, son attention pour l’individualité dans la langue