Académique Documents
Professionnel Documents
Culture Documents
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.
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 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).
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.
Noter également l’effet de la directive « BANKSEL » sur les instructions mise en mémoire.
;********************************************************************************:
; 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 *
;********************************************************************************
;******************************************************************************
; 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
;********************************************************************************
; 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'
Denis Rabasté programmation des microcontrôleurs PIC 3/5
IUFM Aix-Marseille
utilisation des timers
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
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.
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
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