Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
ennuis avec le timer1 d'un Pic 16F883
Bonjour à tous,
je veux utiliser le timer 1 de ce contrôleur.
je définis quelques constantes utiles à l'initialisation comme suit :
Dans la phase d'initialisation du programme j'exécute le code
Juste après cette phase d'initialisation, j'exécute le code
A partir de ce moment, je pensais voir TMR1L s'incrémenter à chaque instruction (puisque le prescaler est à 1:1) même d'ailleurs sans armer le bit TMR1IE de PIE1. Or rien ne bouge sous MPSIM.
Quelqu'un a-t-il une idée de ma (mes) bévue(s) ?
Merci
je veux utiliser le timer 1 de ce contrôleur.
je définis quelques constantes utiles à l'initialisation comme suit :
Code : Tout sélectionner
PIE1VAL EQU B'00000000'
; toutes IT périphériques disable
; cf page34 du Datasheet
T1CONVAL EQU B'00000000'
; bit 7, T1GINV : 0 sans objet
; bit 6, TMR1GE : 0 pas de gate
; bit 5, 4 T1CKPS: 00 préscaler = 1:1
; bit 3, T1OSCEN : 0 Oscilateur OFF
; bit 2, T1SYNC : 0 ignoré en mode timer
; bit 1, TMR1CS : 0 internalClock
; bit 0, TMR1ON : 0 Timer 1 stopé
; cf page81 du Datasheet
; valeur initiale de INTCON
INTCONVAL EQU B'11100000'
; bit 7 = 1 : enables unmasked
; interrupts
; bit 6 = 1 : enables all
; peripheral interrupts
; bit 5 = 1 : enables TMR0 IT
; bit 4 = 0 : disables GPIO port
; change interrupt
; bit 3-0 = 0 sans objet
; cf page 32 du DataSheet
Dans la phase d'initialisation du programme j'exécute le code
Code : Tout sélectionner
BANK1
.../..
movlw PIE1VAL
movwf PIE1
movlw OSCCONVAL
movwf OSCCON
BANK0
movlw INTCONVAL
movwf INTCON ; initialise INTCON
movwf T1CONVAL
movwf T1CON
Juste après cette phase d'initialisation, j'exécute le code
Code : Tout sélectionner
; autorise les IT timer 1
BANK0
clrf TMR1H
clrf TMR1L
bcf PIR1, TMR1IF
bsf T1CON, TMR1ON
BANK1
bsf PIE1, TMR1IE
A partir de ce moment, je pensais voir TMR1L s'incrémenter à chaque instruction (puisque le prescaler est à 1:1) même d'ailleurs sans armer le bit TMR1IE de PIE1. Or rien ne bouge sous MPSIM.
Quelqu'un a-t-il une idée de ma (mes) bévue(s) ?
Merci
ennuis avec le timer1 d'un Pic 16F883
ennuis avec le timer1 d'un Pic 16F883
ennuis avec le timer1 d'un Pic 16F883
Bonsoir JJE, paulfjujo, et tout le forum,
Avec ça tu devrais ton sortir
A+
Avec ça tu devrais ton sortir
Code : Tout sélectionner
;;**********************************************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
list p=16F883 ; processeur utilisé
#include <p16F883.inc> ; Définitions des constantes
radix dec ; par defaut en mode décimal
__CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR40V
;******************************** déclaration des variables ***********************************
CBLOCK 0x70
débordement :1
res8 :1
res16 :1
status_temp :1
w_temp :1
pclath_temp :1
fsr_temp :1
ENDC
;***************************** adresse de depart après reset **********************************
ORG H'00'
goto debut
ORG H'04'
movwf w_temp
swapf STATUS,W
movwf status_temp
movf FSR,W
movwf fsr_temp
movf PCLATH,W
movwf pclath_temp
clrf PCLATH
btfss PIR1,TMR1IF ; tester si le timer1 a débordé
goto restoreg ; non, aucun débordement
; oui, le timer1 à débordé
;********************************** débordement du timer1 *************************************
timer1
incf débordement,F ; compter le nombre de fois que le timer1 à débordé
goto restoreg
;******************************** effacer flag du timer1 **************************************
restoreg
btfsc PIR1,TMR1IF ; si le bit TMR1IF est à 1 on va à la ligne 1
bcf PIR1,TMR1IF ; effacer flag interupttion du timer1 causé par le débordement
;************************************* restauration *******************************************
movf pclath_temp,W
movwf PCLATH
movf fsr_temp,W
movwf FSR
swapf status_temp,W
movwf STATUS
swapf w_temp,F
swapf w_temp,W
retfie
;**********************************************************************************************
debut
BANKSEL OSCTUNE ; on passe en bank 1
movlw B'01111000' ; oscillateur interne du Pic, qui est réglé sur 8 Mhz
movwf OSCCON ;
;************************ configuration du registre T1CON en bank 0 ***************************
BANKSEL T1CON
bcf T1CON,T1GINV ; = 0 b7
bcf T1CON,TMR1GE ; = 0 b6
bcf T1CON,T1CKPS1 ; réglage présiviseur = 0 b5
bcf T1CON,T1CKPS0 ; réglage présiviseur = 0 b4
bcf T1CON,T1OSCEN ; oscillateur interne hors service RC0,RC1 = 0 b3
bcf T1CON,T1SYNC ; fonctionnement synchrone si T1SYNC = 0 b2
bcf T1CON,TMR1CS ; mode de comptage par intruction si TMR1CS = 0 b1
bcf T1CON,TMR1ON ; arrêt du timer1 si TMR1ON = 0 b0
;********************* configuration du registre INTCON en bank 0,1,2,3 ***********************
movlw B'01000000' ; autorisation générale périphériques
movwf INTCON ;
;**********************************************************************************************
;**********************************************************************************************
;**********************************************************************************************
départ
clrf TMR1L
clrf TMR1H
clrf débordement ; compteur du nombre de débordement
bsf INTCON,GIE ; interruptions général en service
bsf T1CON,TMR1ON ; lancer le timer1
nop
nop
nop
arriver
bcf T1CON,TMR1ON ; arrêt du timer1
bcf INTCON,GIE ; interruptions général hors service
;**********************************************************************************************
sauvegarder
movf TMR1L,W ; récupérer les temps dans res8 et res16
movwf res8
movf TMR1H,W
movwf res16
End
A+
Modifié en dernier par Temps-x le lun. 27 avr. 2020 19:31, modifié 2 fois.
ennuis avec le timer1 d'un Pic 16F883
ennuis avec le timer1 d'un Pic 16F883
Merci à vous deux,
à temps-x :
Je crois que ça va m'aider à me débrouiller.
à satinas :
oui, en fait j'utilise les trois timer de ce pic.
je crois que c'est vraiment une bonne idée, moi qui suis plutôt fan de l'usage des macros, pourquoi ne l'ai-je jamais mise dans ma panoplie. Je ne suis pas certain que ça va suffire mais il est clair qu'il ya a erreur. Je ne compte plus les fois où tu m'a dépanné , merci beaucoup
à temps-x :
Je crois que ça va m'aider à me débrouiller.
à satinas :
satinas a écrit :Source du message INTCONVAL EQU B'11100000'
active l'interruption Timer 0, c'est voulu ?
oui, en fait j'utilise les trois timer de ce pic.
satinas a écrit :Source du message movwf T1CONVAL voila pourquoi je crée toujours une macro movlf :)
je crois que c'est vraiment une bonne idée, moi qui suis plutôt fan de l'usage des macros, pourquoi ne l'ai-je jamais mise dans ma panoplie. Je ne suis pas certain que ça va suffire mais il est clair qu'il ya a erreur. Je ne compte plus les fois où tu m'a dépanné , merci beaucoup
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 42 invités