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

Pic16F84A probleme d'interruption
atmaxi
Membre
Membre
Messages : 17
Enregistré en : octobre 2015

#41 Message par atmaxi » ven. 16 oct. 2015 00:45

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.

Pic16F84A probleme d'interruption
atmaxi
Membre
Membre
Messages : 17
Enregistré en : octobre 2015

#42 Message par atmaxi » ven. 16 oct. 2015 00:48

Gérard a écrit :C'est quoi les instructions 3 à 8?


mon programme principale avait d'autres taches à effectuer
durant plusieurs centaines de mS, alors on pourrait observer un decalage entre l'action et le clignotement

Pic16F84A probleme d'interruption
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#43 Message par Guest » ven. 16 oct. 2015 08:33

Une derniere chose dans le P.P. NE PAS OUBLIER DE BIEN CONFIGURER LES PORTS :-)

Bonne journée

Pic16F84A probleme d'interruption
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#44 Message par mazertoc » ven. 16 oct. 2015 14:43

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
atmaxi
Membre
Membre
Messages : 17
Enregistré en : octobre 2015

#45 Message par atmaxi » ven. 16 oct. 2015 15:51

maï a écrit :Une derniere chose dans le P.P. NE PAS OUBLIER DE BIEN CONFIGURER LES PORTS :-)

Bonne journée


hhhhhh ok chef :D

Pic16F84A probleme d'interruption
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#46 Message par Guest » ven. 16 oct. 2015 18:19

hhhhhh ok chef :D


j'aime bien :)

A+

Pic16F84A probleme d'interruption
atmaxi
Membre
Membre
Messages : 17
Enregistré en : octobre 2015

#47 Message par atmaxi » dim. 18 oct. 2015 01:09

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

Pic16F84A probleme d'interruption
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#48 Message par Gérard » dim. 18 oct. 2015 10:37

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?
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Pic16F84A probleme d'interruption
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#49 Message par mazertoc » dim. 18 oct. 2015 10:53

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.
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
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#50 Message par mazertoc » dim. 18 oct. 2015 10:54

Gérard a écrit :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

Ben ça j'avais pas vérifié !


Retourner vers « Langage ASM »

Qui est en ligne

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