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
Aide pour générer une temporisation
Aide pour générer une temporisation
Aide pour générer une temporisation
-
Jérémy
Administrateur du site- Messages : 2731
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour Jul09 ,
Tu programme donc en ASM si ton post est ici ?
Tu as des tutoriels concernant les timers par exemple ici :http://www.fantaspic.fr/viewtopic.php?f=15&t=47
As toi de nous montrer ou tu coince exactement et le travaille que tu as fait ! car tu question ressemble à un exercice scolaire !
Tu programme donc en ASM si ton post est ici ?
Tu as des tutoriels concernant les timers par exemple ici :http://www.fantaspic.fr/viewtopic.php?f=15&t=47
As toi de nous montrer ou tu coince exactement et le travaille que tu as fait ! car tu question ressemble à un exercice scolaire !
Aide pour générer une temporisation
Bonsoir Jul09, et tout le forum,
Soit le bienvenue sur le forum, et j'espère que tu y passeras des bons moment comme nous,
As tu fais un début de programme
Pour un Quartz de 8Mhz et sans prédiviseur, le timer0 génère une interruption tous les 128 µs, mais il traite 256 cycle.
Si tu veux un temps de 100 µs Il faudra incrémenter ton timer0 pour chaque débordement de 56
Ce qui donne :
J'espère ne pas avoir fait d'erreur, normalement ça doit fonctionner, pour avoir plus de précision tu peux changer la
valeur du Timer0
A+
Soit le bienvenue sur le forum, et j'espère que tu y passeras des bons moment comme nous,
Jul09 a écrit :Source du message j'ai rencontré le probléme ci dessous :
As tu fais un début de programme
Pour un Quartz de 8Mhz et sans prédiviseur, le timer0 génère une interruption tous les 128 µs, mais il traite 256 cycle.
Si tu veux un temps de 100 µs Il faudra incrémenter ton timer0 pour chaque débordement de 56
Ce qui donne :
Code : Tout sélectionner
;**************************** déclaration du processeur utilisé *******************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
LIST p=16F84A
#include <p16F84a.inc>
;***************** selection, code protection, timer reset, watch-dog, oscillateur ************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
CBLOCK 0x0C
status_temp :1
w_temp :1
pclath_temp :1
ENDC
org H'00'
goto debut
;*************************** control si interruption à eu lieu ********************************
org H'04'
movwf w_temp
swapf STATUS,W
movwf status_temp
BANKSEL INTCON ; on passe en bank 0
btfss INTCON,T0IE ; tester si interruption autorisée sur le débordement du timer0
goto restorereg ; non
btfsc INTCON,T0IF ; tester si interrupt timer0 est en cours
goto debordement ; oui, traiter interruption sur timer0
goto restorereg ; non
;********************************** débordement du timer0 *************************************
debordement
bcf INTCON,T0IE ; arrêt du timer0
movf D'56',W ; réglage à affiner pour avoir 100 µs précis
movwf TMR0
bsf INTCON,T0IE ; mise en route du débordement
goto restorereg ;
;**********************************************************************************************
restorereg
btfsc INTCON,T0IF ; si le bit T0IF est à 1 on va à la ligne 1
bcf INTCON,T0IF ; effacer flag interupttion du timer0 causé par le débordement
swapf status_temp,w
movwf STATUS
swapf w_temp,f
swapf w_temp,w
retfie
debut
;************************ configuration du registre OPTION_REG en bank 1 **********************
BANKSEL OPTION_REG ; on passe en bank 1
movlw B'00000000' ;
movwf OPTION_REG ; timer0 réglé sur 256 cycles
; b7 = Résitance en service
; b6 = Si modification sur RB0 dans le front descendant
; b5 = Timer incrémente à chaque instruction désactivé
; b4 = Timer module sur les fronts montants de RA4/T0CKI désactivé
; b3 = Le prescaler fonctionne sur le Timer
; b2 = Taux de division à 0 sur PS2
; b1 = Taux de division à 0 sur PS1
; b0 = Taux de division à 0 sur PS0
;********************** configuration du registre INTCON en bank 0,1 **************************
movlw B'01000000' ;
movwf INTCON ; on initialise INTCON
;
; b7 = Arrêt des interruption désactivé
; b6 = Autorisation générale périphériques
; b5 = Débordement sur timer0 désactiver
; b4 = Autorise interruption si modification de l'entrée RB0/INT
; b3 = Autorise interruption si modification de l'entrée RB4/RB7 désactivé
; b2 = Flag d'interruption tmr0
; b1 = Flag d'interruption RB0/Int
; b0 = Flag interruption RB4/RB7
;************************ configuration du registre TRISA en bank 1 **************************
BANKSEL TRISA ; on passe en bank 1
movlw B'00000000' ; configure les pattes pour des sorties dans TRISA
movwf TRISA ; 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4)
movlw B'11111111' ; configure les pattes pour des entrées dans TRISB
movwf TRISB ; 6(RB0),7(RB1),8(RB2),9(RB3),10(RB4),11(RB5),12(RB6),13(RB7)
;**********************************************************************************************
; alimmentation sous 5 volts patte 5 mettre au moins
; patte 14 mettre au plus
;**********************************************************************************************
BANKSEL PORTA ; on passe en bank 0
clrf PORTA ; PORTA à 0
clrf PORTB ; PORTB à 0
bsf INTCON,GIE ; autorisation de toutes les interuption
;**********************************************************************************************
do_loop
nop ; voilà toutes les 100 µs devait se produire une interruption
goto do_loop
End
J'espère ne pas avoir fait d'erreur, normalement ça doit fonctionner, pour avoir plus de précision tu peux changer la
valeur du Timer0
A+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 12 invités