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 ---
Bout de code posé là !

Modérateur : Jérémy

ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2158
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#1 Message par F6FCO » mar. 21 mai 2024 13:08

J'ai choisi ce gros PIC parce que l'utilisation de deux Timers est prévue sur un projet futur, besoin de beaucoup de pins.
Utiliser deux Timers en même temps peut-être intéressant. Par exemple pour mesurer une fréquence, un timer crée une fenêtre de mesure pendant que l'autre compte à l'intérieur de ce créneau des impulsions reçues sur une pin. C'est la base d'un fréquencemètre.

Ici çà fait clignoter deux leds, une sur le Timer0 (B0) et l'autre sur le Timer1 (B1), mais la base est posée. Les deux leds sont visuelles mais seule celle de B1 à été calculée pour une période de 1s.

Je vais me faire eng..... par Satinas, j'ai encore utilisé mes tabulations :? :-D

Code : Tout sélectionner

;**********************************************************************
;
                                                                    
;             Leds clignotantes avec TIMER0 et TIMER3
;                  F6FCO - mai 2024                                                                   
;                                                                     
;**********************************************************************

        Errorlevel-302             ; Supprime le message "Ensure that bank bits are correct" 
        list            p
=18f4525    ; processeur utilisé 
        
#include        <p18f4525.inc>    ; Définitions des constantes PIC
    
 CONFIG OSC 
= INTIO67                   ; Oscillateur interne 8MHz 
 
;CONFIG OSC = XT                         ; Oscillateur xtal externe 
 CONFIG IESO 
= OFF                         ; Délai au démarrage (ON/OFF)
 CONFIG BOREN = OFF                        ; Reset si chute de tension (ON/OFF)
 CONFIG PWRT = ON                          ; Délai au démarrage (ON/OFF)
 CONFIG BORV = 0                           ; Tension de reset en 1/10ème Volts 
 CONFIG WDT 
= OFF                          ; Mise hors service du watchdog (ON/OFF)
 CONFIG PBADEN = OFF                       ; PORTB<4:0> les broches sont configurées comme E/S numériques lors de la réinitialisation
 CONFIG LPT1OSC 
= OFF                      ; Timer1 configuré pour un fonctionnement plus puissant
 CONFIG MCLRE 
= ON                         ; Mclr configuré comme entrée
 CONFIG STVREN 
= ON                        ; Reset sur débordement de pile (ON/OFF)
 CONFIG LVP = OFF                          ; Programmation basse tension autorisée (ON/OFF)
 CONFIG XINST = OFF                        ; L'extension du jeu d'instructions et le mode d'adressage indexé sont désactivés(mode hérité)
 CONFIG DEBUG = OFF                        ; Debugger hors service
 CONFIG CP0 = OFF                       ; Code protection sur block 0 (ON/OFF)
 CONFIG CP1 = OFF                       ; Code protection sur block 1 (ON/OFF)
 CONFIG CP2 = OFF                       ; Code protection sur block 2 (ON/OFF)
 CONFIG CPB = OFF                       ; Code protection sur bootblock  (ON/OFF)
 CONFIG CPD = OFF                          ; Code protection sur eeprom (ON/OFF)
 CONFIG WRT0 = OFF                         ; Protection écriture block 0 (ON/OFF)
 CONFIG WRT1 = OFF                         ; Protection écriture block 1 (ON/OFF)
 CONFIG WRT2 = OFF                         ; Protection écriture block 2 (ON/OFF)
 CONFIG WRTB = OFF                         ; Protection écriture bootblock (ON/OFF)
 CONFIG WRTC = OFF                         ; Protection écriture configurations (ON/OFF)
 CONFIG WRTD = OFF                         ; Protection écriture zone eeprom (ON/OFF)
 CONFIG EBTR0 = OFF                        ; Protection lecture de table block 0 (ON/OFF)
 CONFIG EBTR1 = OFF                        ; Protection lecture de table block 1 (ON/OFF)
 CONFIG EBTR2 = OFF                        ; Protection lecture de table block 2 (ON/OFF)
 CONFIG EBTRB = OFF                        ; Protection lecture de table bootblock (ON/OFF)

MasqueIntcon    EQU    H'
00A0'     ; réglage interruptions Timer0

#define Led0    PORTB,0    
#define Led1    PORTB,1         

    CBLOCK 0x00C               
    w_temp         :1        ; Sauvegarde du registre W
    status_temp     :1        ; Sauvegarde du registre STATUS
    cmpt         :1        
    cmpt1         :1    
    ENDC                                      

    org    0x000             ; Adresse de départ après reset
      bra        init            ; Adresse 0: initialiser

; ------------------------  Routines Interruptions                            
    ;sauvegarder registres    
    org     0x008            ; adresse d'
interruption
    movwf   w_temp          
; sauver registre W
    swapf    STATUS
,w        ; swap status avec résultat dans w
    movwf    status_temp        
; sauver status swappé

    
; Interrupt TIMER0
    btfsc    INTCON
,TMR0IE        ; interrupt timer0 autorisée ?
    btfss    INTCON,TMR0IF        ; si oui, tester si interrupt timer en cours
    bra     restorereg
    call    inttimer0        
; vers routine interrupt timer0
    bcf    INTCON
,TMR0IF        ; effacer flag interrupt timer0
    
    
; Interrupt TIMER1
    btfsc    T1CON
,TMR1ON        ; interrupt timer1 autorisée ?
    btfss    PIR1,TMR1IF        ; si oui, tester si interrupt timer en cours
    bra    restorereg
    call    inttimer1        
; vers routine interrupt timer1
    bcf    PIR1
,TMR1IF        ; effacer flag interrupt timer1
    movlw    d
'11'
    movwf    TMR1L            ; préload TMR1
    movlw    d
'220'
    movwf    TMR1H            ; préload TMR1
    
    
;restaurer registres
restorereg
    swapf    status_temp
,w        ; swap ancien status, résultat dans w
    movwf   STATUS            
; restaurer status
    swapf   w_temp
,f        ; Inversion L et H de l'ancien W, sans modifier Z
    swapf   w_temp,w          ; Réinversion de L et H dans W, W restauré sans modifier status
    retfie              ; return from interrupt

    ;  Routine d'
interruption TIMER 0                            
inttimer0
    decfsz    cmpt
,f            ; décrémenter compteur de passages
    return                
; pas 0, on ne fait rien
    movlw    b
'00000001'        ; sélectionner bit à inverser
    xorwf    PORTB 
, f        ; inverser LED
    movlw    d
'7'            ; on recommence à décompter
    movwf    cmpt            
    return                
; fin d'interruption timer
    
inttimer1
    decfsz    cmpt1,f            ; décrémenter compteur de passages
    return                ; pas 0, on ne fait rien
    movlw    b'
00000010'        ; sélectionner bit à inverser
    xorwf    PORTB , f        ; inverser LED
    movlw    d'
1'            ; on recommence à décompter
    movwf    cmpt1            
    return
    
; ------------------------ Init

init
    clrf    EEADR            ; diminue la consommation
    
    ; init Timer0
    movlw    h'
C7'            ; Timer0 interne avec prescaler 256        
    movwf    T0CON             
    
    ; init Timer1
    bsf    T1CON,TMR1ON        ; mise en route du Timer1
    bcf    T1CON,TMR1CS        ; Horloge interne
    bsf    T1CON,T1SYNC        ; Horloge externe
    bsf    T1CON,T1OSCEN        ; Osc Timer1
    bsf    T1CON,T1CKPS0        ; prescaler 
    bsf    T1CON,T1CKPS1        ; prescaler 
    bsf    T1CON,T1RUN             
    bcf    T1CON,RD16        ; mode 8 bits
    movwf    TMR1L            ; préload TMR1
    movlw    d'
220'
    movwf    TMR1H            ; préload TMR1
    bsf    PIE1,TMR1IE        ; Interrupt Timer1 validée
        
        ; inti ports
    clrf    PORTA            
    clrf    PORTB            
        movlw     0Fh
          movwf     ADCON1                ; mode digital
    movlw    b'
00000000'
    movwf    TRISA
    movwf    TRISB

    movlw    MasqueIntcon        ; masque interruption
    movwf    INTCON            ; charger interrupt control

    movlw    d'
2'
    movwf    cmpt            ; cmpt timer0, non calculé, au pif, clignotement seulement visuel    
    movlw    d'
1'    
    movwf    cmpt1            ; cmpt1 timer1, pour un clignotement de 1s, horloge ext du PIC xtal 4Mhz
            

; -----------------------------------
main
    bra     main            ; boucler

    END                


Une porte nand prend 2 bits en entrée... :eek:

ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
satinas
Expert
Expert
Messages : 1274
Enregistré en : novembre 2015

#2 Message par satinas » mar. 21 mai 2024 14:36

C'est Jeremy qui devrait t'engueuler, mais il s'est mis en grève, il veut une augmentation pour les JO. Alors je fais le jaune (rien à voir avec le Rubik'sCube) :-)

ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1805
Âge : 66
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#3 Message par Gérard » mar. 21 mai 2024 19:57

Non, pas engueuler Jérémy, il est à l'origine de notre super forum.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2158
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#4 Message par F6FCO » mer. 22 mai 2024 12:23

Il parait qu'il boude parce qu'il va devoir renommer le forum Fanstas'cube.
Une porte nand prend 2 bits en entrée... :eek:

ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
Jérémy
Administrateur du site
Administrateur du site
Messages : 2740
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » mer. 22 mai 2024 12:42

Je vous lis , je vous lis ! ! dehors!!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
venom
Avatar de l’utilisateur
Expert
Expert
Messages : 1280
Âge : 39
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#6 Message par venom » mer. 22 mai 2024 13:09

F6FCO a écrit :Il parait qu'il boude parce qu'il va devoir renommer le forum Fanstas'cube.

:lol: je n'avais pas vue ce message exit







@++
Mon site web
Mon discord : venom#4888

ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1805
Âge : 66
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#7 Message par Gérard » mer. 22 mai 2024 13:59

F6FCO a écrit :Il parait qu'il boude parce qu'il va devoir renommer le forum Fanstas'cube.



Plié de rire.

:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

Je ne sors pas, je reste.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.


Retourner vers « Recueil de mini programmes »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité