Bonjour à tous,
Voilà, j'aurais besoin d'un coup de main pour la config de mon pic 16F887.
J'ai passé des heures sur la datasheet, mais je n'arrive pas à mes fins.
Je souhaite tout simplement configurer la pin RB0 en source d'interruption.
Voilà mon programme :
Le programme se lance, la diode placée sur RA0 s'allume.Code:title 'none' LIST P=16F887, F=INHX8M #include <p16F887.inc> __CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTOSCIO __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ; -------------------------- Définition des macros ------------------------------------- bank0 macro BCF STATUS, RP1; BCF STATUS, RP0; ENDM bank1 macro BCF STATUS, RP1; BSF STATUS, RP0; ENDM bank2 macro BSF STATUS, RP1 BCF STATUS, RP0; ENDM bank3 macro BSF STATUS, RP1 BSF STATUS, RP0 ENDM clearports macro clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE endm ; ------------------------------------------------------- Programme principale ----------------------------------------------- ORG 0x0000; GOTO debut; ORG 0x0004; bcf PORTA, 5 stb btfss PORTB, 0 goto stb bcf INTCON,INTF RETFIE ORG 0x00A0; debut call INIT_PIC bank0 bsf PORTA, 5 sl goto sl ; -------------------------------------------------------- Initialisation de PIC -------------------------------------------- INIT_PIC bank3 clrf ANSEL clrf ANSELH bank1 movlw b'00000000' movwf TRISA movlw b'11111111' movwf TRISB movlw b'00000000' movwf TRISC movwf TRISD movwf TRISE bsf TRISB, 6 ; ISCPCLK bsf TRISC, 7 ; ISCPDAT bsf TRISE, 3 ; MCLRE movlw b'11111111' movwf IOCB movlw b'10011000' movwf INTCON MOVLW b'00000000'; MOVWF PIE1; MOVWF PIE2 bank0 return
Lorsqu'on appuie sur un bouton, ça fait changer l'état sur RB0, et la diode devrait s'éteindre ( RA0 = 0 )
J'ai beau appuyer des centaines de fois sur ce bouton, la diode ne s'éteint pas. J'ai vérifé mon montage au voltmètre, j'ai bien un changement d'état de RB0
Conclusion, le programme ne rentre pas dans la routine d'interruption.
Conclusion (bis), les registres sont mal configurés.
Vous remarquerez que j'ai "enabled" les interruptions sur TOUTES les pins de RB0 ... mais rien à faire, ça ne fonctionne pas.
Quelqu'un peut-il me filer un coup de main sur cette foutu config d'interruption ?
Merci !
-----