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 : Jérémy
ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
- F6FCO
Expert- Messages : 2158
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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
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
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
ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
F6FCO a écrit :Il parait qu'il boude parce qu'il va devoir renommer le forum Fanstas'cube.
je n'avais pas vue ce message
@++
ASM: Hello World avec Timer0 et Timer 1 PIC18F4525
Retourner vers « Recueil de mini programmes »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité