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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

ennuis avec le timer1 d'un Pic 16F883
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#1 Message par JJE » dim. 26 avr. 2020 10:38 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,
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 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. :sifflotte:

Quelqu'un a-t-il une idée de ma (mes) bévue(s) ?

Merci
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

ennuis avec le timer1 d'un Pic 16F883
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » dim. 26 avr. 2020 19:14 lien vers la Data-Sheet : Cliquez ici

bonsoir,

quelle est la source de comptage pour le Timer1 FOSC,FOSC/4, Externe ?

; bit 1, TMR1CS : 0 internalClock ? à zero
Aide toi, le ciel ou FantasPic t'aidera

ennuis avec le timer1 d'un Pic 16F883
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#3 Message par JJE » dim. 26 avr. 2020 19:36 lien vers la Data-Sheet : Cliquez ici

Bonsoir paulfjujo, merci de t'intéresser à mon problème.

J'ai bien T1C,TMR1CS à 0, ce que j'ai interprété comme source de comptage interne à FOSC/4
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

ennuis avec le timer1 d'un Pic 16F883
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » dim. 26 avr. 2020 19:55 lien vers la Data-Sheet : Cliquez ici

Bonsoir JJE, paulfjujo, et tout le forum,

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             
:
      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,***********************

      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.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

ennuis avec le timer1 d'un Pic 16F883
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#5 Message par satinas » dim. 26 avr. 2020 20:13 lien vers la Data-Sheet : Cliquez ici

INTCONVAL EQU B'11100000'
active l'interruption Timer 0, c'est voulu ?

movwf T1CONVAL
voila pourquoi je crée toujours une macro movlf :)

ennuis avec le timer1 d'un Pic 16F883
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#6 Message par JJE » lun. 27 avr. 2020 17:01 lien vers la Data-Sheet : Cliquez ici

Merci à vous deux,
à temps-x :
Je crois que ça va m'aider à me débrouiller. :wink:
à 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é :sifflotte: , merci beaucoup
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 42 invités