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
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
atmaxi a écrit :d'abords merci pour tout le monde,
ce que j'ai pigé :
1. il ne faut pas placer la temporisation à l'interruption, on doit y passer le moins de temps possible
2. la routine d'int change l'etat du bit indiquant que le bouton poussoir est appuyé, et puis on fait le test dans le programme principale.
Voilà, on commence comme ça !
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
Pic16F84A probleme d'interruption
apres avoir pris en considération vos conseils, j'ai modifié mon programme en ceci , mais tjrs ça ne marche pas
list p=16f84a, f=inhx8m, r=dec
include "p16f84a.inc"
__CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON & _WDT_OFF
;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************
optionval equ b'00000000' ; Valeur registre option
; Résistance pull-up ON
intconmask equ b'10001000' ;Interruptions sur rb0/int
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
cblock 0x00c
wtemp :1
statustemp :1
n1 :1
n2 :1
n3 :1
flags :1
endc
;*********************************************************************
; MACRO *
;*********************************************************************
bank0 macro
bcf STATUS,RP0
endm
bank1 macro
bsf STATUS,RP0
endm
;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************
org 0x00
goto init
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************
;sauvegarder registres
;------------------------
org 0x04
movwf wtemp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf statustemp
; ----------------------------------------
bank0
bsf flags,0
bcf INTCON,INTF
swapf statustemp,w ; swap status avec résultat dans w
movwf STATUS
swapf wtemp,f ; sauver registre W
swapf wtemp,w
retfie
;*********************************************************************
; INITIALISATIONS *
;*********************************************************************
init
bank1
movlw optionval ; charger masque
movwf OPTION_REG ; initialiser registre option
; Effacer RAM
; ------------
movlw 0x0c ; initialisation pointeur
movwf FSR ; pointeur d'adressage indirect
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,6 ; tester si fin zone atteinte (>=40)
goto init1 ; non, boucler
btfss FSR,4 ; tester si fin zone atteinte (>=50)
goto init1 ; non, boucler
movlw intconmask ; charger masque
movwf INTCON ;charger interrupt control
movlw 0x01 ; configurer rb0 comme une entrée
movwf TRISB
clrf TRISA ; PORTA est configuré comme sorties
bank0 ; accés à la banque 0
clrf PORTA
goto start
clign
bank0
movlw 0xff
movwf PORTA
call tempo
clrf PORTA
call tempo
movlw 0xff
movwf PORTA
call tempo
clrf PORTA
call tempo
movlw 0xff
movwf PORTA
call tempo
clrf PORTA
call tempo
movlw 0xff
movwf PORTA
call tempo
bcf flags,0
return
;*********************************************************************
; Fonction de temporisation *
;*********************************************************************
tempo ; une temporisation de presque deux secondes
bank0
movlw 2
movwf n1
tempo1
movlw 0xff
movwf n2
tempo2
movlw 0xff
movwf n3
tempo3
decfsz n3
goto tempo3
decfsz n2
goto tempo2
decfsz n1
goto tempo1
return
;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************
start
btfsc flags,0
call clign
goto start
end
list p=16f84a, f=inhx8m, r=dec
include "p16f84a.inc"
__CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON & _WDT_OFF
;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************
optionval equ b'00000000' ; Valeur registre option
; Résistance pull-up ON
intconmask equ b'10001000' ;Interruptions sur rb0/int
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
cblock 0x00c
wtemp :1
statustemp :1
n1 :1
n2 :1
n3 :1
flags :1
endc
;*********************************************************************
; MACRO *
;*********************************************************************
bank0 macro
bcf STATUS,RP0
endm
bank1 macro
bsf STATUS,RP0
endm
;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************
org 0x00
goto init
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************
;sauvegarder registres
;------------------------
org 0x04
movwf wtemp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf statustemp
; ----------------------------------------
bank0
bsf flags,0
bcf INTCON,INTF
swapf statustemp,w ; swap status avec résultat dans w
movwf STATUS
swapf wtemp,f ; sauver registre W
swapf wtemp,w
retfie
;*********************************************************************
; INITIALISATIONS *
;*********************************************************************
init
bank1
movlw optionval ; charger masque
movwf OPTION_REG ; initialiser registre option
; Effacer RAM
; ------------
movlw 0x0c ; initialisation pointeur
movwf FSR ; pointeur d'adressage indirect
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,6 ; tester si fin zone atteinte (>=40)
goto init1 ; non, boucler
btfss FSR,4 ; tester si fin zone atteinte (>=50)
goto init1 ; non, boucler
movlw intconmask ; charger masque
movwf INTCON ;charger interrupt control
movlw 0x01 ; configurer rb0 comme une entrée
movwf TRISB
clrf TRISA ; PORTA est configuré comme sorties
bank0 ; accés à la banque 0
clrf PORTA
goto start
clign
bank0
movlw 0xff
movwf PORTA
call tempo
clrf PORTA
call tempo
movlw 0xff
movwf PORTA
call tempo
clrf PORTA
call tempo
movlw 0xff
movwf PORTA
call tempo
clrf PORTA
call tempo
movlw 0xff
movwf PORTA
call tempo
bcf flags,0
return
;*********************************************************************
; Fonction de temporisation *
;*********************************************************************
tempo ; une temporisation de presque deux secondes
bank0
movlw 2
movwf n1
tempo1
movlw 0xff
movwf n2
tempo2
movlw 0xff
movwf n3
tempo3
decfsz n3
goto tempo3
decfsz n2
goto tempo2
decfsz n1
goto tempo1
return
;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************
start
btfsc flags,0
call clign
goto start
end
Pic16F84A probleme d'interruption
- Gérard
Expert- Messages : 1644
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
J'ai trouvé une erreur qui peut être la cause du dysfonctionnement.
Dans le masque d'interruption, tu autorise RBIE (int portB) au lieu de INTE (int RB0)
Ton masque doit être %10010000 au lieu de %10001000
Tu as lu Bigonoff?
Dans le masque d'interruption, tu autorise RBIE (int portB) au lieu de INTE (int RB0)
Ton masque doit être %10010000 au lieu de %10001000
Tu as lu Bigonoff?
Pic16F84A probleme d'interruption
C'est quoi f=inhx8m ?
Non, tu n'as pas suivi certaines recommandations.
Essaye d'abord l'allumage d'une led avec INT.
Appui BP -> allume led
Appui suivant sur BP -> étaint led
J'ai modifié ton programme pour changer l'état d'une led en PORTA,0 à chaque interruption (c'est plus simple).
Vérifie ce programme et le fonctionnement de l'interruption AVEC LE SIMULATEUR DE MPLAB.
Tant que tu ne sauras pas utiliser ce simulateur ce sera difficile (voire impossible) pour toi de débeuguer.
Non, tu n'as pas suivi certaines recommandations.
Essaye d'abord l'allumage d'une led avec INT.
Appui BP -> allume led
Appui suivant sur BP -> étaint led
J'ai modifié ton programme pour changer l'état d'une led en PORTA,0 à chaque interruption (c'est plus simple).
Vérifie ce programme et le fonctionnement de l'interruption AVEC LE SIMULATEUR DE MPLAB.
Tant que tu ne sauras pas utiliser ce simulateur ce sera difficile (voire impossible) pour toi de débeuguer.
atmaxi a écrit :list p=16f84a, f=inhx8m, r=dec
include "p16f84a.inc"
__CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON & _WDT_OFF
;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************
optionval equ b'00000000' ; Valeur registre option
; Résistance pull-up ON
intconmask equ b'10001000' ;Interruptions sur rb0/int
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
cblock 0x00c
wtemp :1
statustemp :1
n1 :1
n2 :1
n3 :1
flags :1
endc
;*********************************************************************
; MACRO *
;*********************************************************************
bank0 macro
bcf STATUS,RP0
endm
bank1 macro
bsf STATUS,RP0
endm
;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************
org 0x00
goto init
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************
;sauvegarder registres
;------------------------
org 0x04
movwf wtemp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf statustemp
; ----------------------------------------
bank0
bsf flags,0
bcf INTCON,INTF
swapf statustemp,w ; swap status avec résultat dans w
movwf STATUS
swapf wtemp,f ; sauver registre W
swapf wtemp,w
retfie
;*********************************************************************
; INITIALISATIONS *
;*********************************************************************
init
bank1
movlw optionval ; charger masque
movwf OPTION_REG ; initialiser registre option
; Effacer RAM
; ------------
movlw 0x0c ; initialisation pointeur
movwf FSR ; pointeur d'adressage indirect
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,6 ; tester si fin zone atteinte (>=40)
goto init1 ; non, boucler
btfss FSR,4 ; tester si fin zone atteinte (>=50)
goto init1 ; non, boucler
movlw intconmask ; charger masque
movwf INTCON ;charger interrupt control
movlw 0x01 ; configurer rb0 comme une entrée
movwf TRISB
clrf TRISA ; PORTA est configuré comme sorties
bank0 ; accés à la banque 0
clrf PORTA
goto start
led ; inverse état led (bit PORTA,0)
btfss porta,0
goto led1
bcf porta,0
return
led1
bsf porta,0
return
;*********************************************************************
; Fonction de temporisation *
;*********************************************************************
nop
;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************
start
btfss flags,0
goto start
bcf INTCON, GIE ; interdit les interruptions pendant la gestion de la led
bcf flags,0 ; RAZ indicateur "BP pressé"
call led
bsf INTCON, GIE ; re-autorise les INT
goto start
end
Pic16F84A probleme d'interruption
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités