Bonjour,
je souhaite effectuer, grace à une interruption lors de l'appui sur un bouton en rbo, un changement de clignotement de led.
En normal, la led en rb3 clignote, en interruption les leds en rb1 et 2 clignotent.
Cependant j'ai l'impression que je ne rentre jamais dans l'interruption malgré les appuis sur le bouton.
Pouvez vous m'aider?
Pierrot
#include <P18F2550.inc>
; __CONFIG (_INTRC_OSC_CLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _FCMEN_OFF)
org 0
;************** Début du programme *********************
CBLOCK 0x20
debordement : 1
temps :1
cmpt1 : 1 ; compteur de boucles 1
cmpt2 : 1 ; compteur de boucles 2
cmpt3 : 1 ; compteur de boucles 3
endc
goto init
;****** Le programme d' interruption se déclenche ***
;****** lorsque l' entrée RB0 passe de 0 à 1 ***
;*********** Programme d 'interruption **********************
ORG 0x08
;btfsc INTCON,INT0IF ; tester si flag INT0IF positionné
rcall traitint
RETFIE ; retour d 'interruption
;************* Programme d' INIT **************************
init
MOVLW B'10010001' ; rb0,rb4 en entrée ( rb0 sera la broche utilisée
; pour l ' interruption )
MOVWF TRISB
bsf INTCON2,INTEDG0 ; Le passage de 0 à 1 sur RB0 provoque une IT
; sur un front montant
bsf INTCON,INT0IE ; autorise l ' IT sur RB0
bsf INTCON,TMR0IE ; autoriste l'IT sur Timer
bsf INTCON,GIE ; autorise les Interruptions
clrf PORTB
;bsf T0CON, PSA ; vire le prescaler/prediviseur
;************ Programme principal en rebouclage *********************
debut
bsf PORTB,3 ; on allume la led connectée sur rb1
call tempo
bcf PORTB,3
call tempo
; sleep ; mise en sommeil du PIC conso : 3.2 mA, attente impulsion sur RB0
GOTO debut
;*********** Fin du programme ***********
;********************tempo
tempo
movlw 1 ; pour 2 boucles
movwf cmpt3 ; initialiser compteur3
boucle3
clrf cmpt2 ; effacer compteur2
boucle2
clrf cmpt1 ; effacer compteur1
boucle1
nop ; perdre 1 cycle
decfsz cmpt1,f ; décrémenter compteur1
goto boucle1 ; si pas 0, boucler
decfsz cmpt2,f ; si 0, décrémenter compteur 2
goto boucle2 ; si cmpt2 pas 0, recommencer boucle1
decfsz cmpt3,f ; si 0, décrémenter compteur 3
goto boucle3 ; si cmpt3 pas 0, recommencer boucle2
return ; retour de la sous-routine
traitint
bsf PORTB,2 ; on allume la led connectée sur rb1
rcall tempo
bcf PORTB,2
rcall tempo
bsf PORTB,1
rcall tempo
rcall tempo
bcf PORTB,1
bcf INTCON,INT0IF ; put the flag down
return
end
-----