Bonjour,
Après avoir fait "joujou" avec mon PIC18F avec des fonctions basiques je voudrais creuser un peu plus ce PIC en utilisant les interruptions externes. Depuis deux jours je rame pour le programmer en interruption externe et je ne trouve pas d'où vient mon problème.
Sachant que mon code fonctionne en simulation (debugg) mais pas quand j'envoie le code dans le PIC. En simulation (avec MPLABX) quand je change le bit RB0 mon programme va bien exécuter l'interruption externe (je le vois en faisant du step by step). Alors que quand le programme est dans le PIC18F4685, je met un signal sur RB0 (à l'aide d'un GBF, signal carré 1KHz 2vpp) rien ne se passe sur la broche de sorti qu'elle devrait faire changé d'état (RD1 dans mon code). RD1 reste à 5v en entrée (Pull-up actif).
Je pense pourtant avoir configuré les registres nécessaire à sont bon fonctionnement (page 115-128 datasheet)
Si une âme charitable pouvait m'aider à trouver l'erreur ou me donner des éléments de réponse ça m'aiderait grandement,
Merci d'avance!
LIST P=18F4685 ;directive to define processor
#include <P18F4685.INC> ;processor specific variable definitions
;***************************** ****************************** *******************
;Configuration bits
; Oscillator Selection:
CONFIG OSC = IRCIO67 ; Oscillateur principal (LP,XT,HS,RC,EC,ECIO,HSPLL,RCI O,IRCIO67)
CONFIG IESO = OFF ; Oscillator Switchover mode disabled
CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor disabled
CONFIG PWRT = OFF ; Délai au démarrage (ON/OFF)
CONFIG WDT = OFF ; Mise en service watchdog (ON/OFF)
CONFIG BOREN = OFF ; Brown-out Reset disabled in hardware and software
CONFIG LVP = OFF ; Programmation basse tension autorisée (ON/OFF)
CONFIG PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
CONFIG DEBUG = OFF ; Debugger hors service (laisser sur OFF)
;***************************** ****************************** *******************
; Vecteur de reset
; Ce code sera executé quand un reset aura lieux
ORG 0x0000
goto MainInit
;***************************** ****************************** *******************
; Routine d'interruption
ORG 0x0008
; *** Interruption Priorité "haute" ***
bcf INTCON,INT0IF ; Efface le flag
bcf INTCON,T0IF ;
bsf INTCON,GIE_GIEH
btg PORTD,1
return
;***************************** ****************************** *******************
; Début des initialisation
; Le code d'initiailisation est placé ici
MainInit:
;Init Clock Intern
movlw b'11110111' ; OSCCON<6:4> = 111 8MHz, 110 4MHz, etc...
movwf OSCCON ;
;Init I/O
movlw 0x0E
movwf ADCON1
clrf PORTA
movlw 0xB0 ; 0x1011 0000 RA7 Input, RA6 Output
movwf TRISA
clrf PORTB
movlw 0xFF ; ALL Input
movwf TRISB
clrf PORTD
movlw 0x00 ; ALL Output
movwf TRISD
;Initialisation Interruption Externe sur RB0
bsf RCON,IPEN ; Active toutes les priotités "high"
bcf INTCON,PEIE_GIEL;Désactive les priorités "low"
bsf INTCON,RBIE ; Active les interruptions PORTB
bsf INTCON,INT0IE ; Active l'interuption INT0 sur RB0
bcf INTCON,T0IF ;
bsf INTCON,T0IE ;
bcf INTCON2,RBPU ; Active toutes les pull-up PORTB
bcf INTCON2,INTEDG0 ; Interruption sur front descendant INT0 RB0
bsf INTCON2,RBIP ; Priorité "High" du PORTB
bsf INTCON,GIE_GIEH ; Bit d'activation Global d'Interruptions
;***************************** ****************************** *******************
; Début du programme principal
; Le code du programme principal est placé ici
Main:
bra Main
;***************************** ****************************** *******************
;Fin du programme
END
-----