Bonsoir à tous,
Voilà j'ai un problème assez bête, cela fait 1semaine que je cherche en me disant que je vais trouvé mais la je ne trouve vraiment pas d'où vient mon erreur!
J'initialise mon PIC 16F819 de la manière suivante :
OPTIONVAL EQU B'10000000'
INTCONVAL EQU B'10101010'
PIE1VAL EQU B'00000000'
OSCCONVAL EQU B'01000101'
ADCON0VAL EQU B'0000000'
ADCON1VAL EQU B'00000111'
DIRPORTA EQU B'00011111' ; Direction PORTA (1=entrée)
DIRPORTB EQU B'00000000' ; Direction PORTB (0=sortie)Ensuite mon programme principal :init
clrf PORTA ; sorties portA à 0
clrf PORTB ; sorties portB à 0
BANK1
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
movlw OSCCONVAL ; initialiser resgistre osccon
movwf OSCCON
movlw DIRPORTA ; Direction PORTA
movwf TRISA ; écriture dans registre direction
movlw DIRPORTB ; Direction PORTB
movwf TRISB ; écriture dans registre direction
movlw PIE1VAL ; initialiser registre d'activation des interruptions
movwf PIE1
clrf OSCTUNE
BANK0
movlw INTCONVAL ; initialiser registre interruptions
movwf INTCON
bcf DIR_VAL0
bcf DIR_VAL1
bcf DIR_VAL2
bcf DIR_VAL3
bcf DIR_VAL4
bcf DIR_VAL5
movlw ZERO
movwf VAL_SEC ; Mise à 0 du compteur val_sec
movwf VAL_10SEC ; Mise à 0 du compteur val_10sec
movwf VAL_MIN ; Mise à 0 du compteur val_min
movwf VAL_10MIN ; Mise à 0 du compteur val_10min
movwf VAL_HEUR ; Mise à 0 de val_heur
movwf VAL_10HEUR ; Mise à 0 de val_10heur
movlw BASE_TEMPS1
movwf CMP_TIMER1
clrf TMR0]
Cependant mon PIC va tout le temps dans les 2 sous-programmes(inc_min et inc_heur) si je change par btfsc(le contraire de btfss) mon programme ne fait rien du tout lorsque je presse les boutons....start
.
.
. quelques instructions....qui fonctionnent!
.
puis arrive les tests suivants:
btfss SW_MIN ;Test sw_min, si à 0 va à inc_min
call inc_min
btfss SW_HEUR ;Test sw_heur, si à 0 va à inc_heur
call inc_heur
goto start ; Retourne à start
voici les 2 sous-programmes:
Dans un 1er temps je pensais que l'erreur venais du fait que je ne ressortais pas correctement de mes sous-programmes mais lorsque je fais du pas-à-pas dans MPLAB tout semble fonctionner, le programme retourne correctement a la fin de l'interruption TMR0 ou en ressortent de n'importe quels sous-programme.inc_min
bcf INTCON,TMR0IE ; Interdit les interruptions TMR0
CALL TEMPO2
incf VAL_MIN,F ; Val_MIN + 1
movf VAL_MIN,W
sublw H'A' ; Soustrait 10
btfss STATUS,Z ; Test le bit Z si Z=0 retourne
RETURN
CLRF VAL_MIN
CALL TEMPO2
movlw ZERO
movwf VAL_MIN ; Mise à 0 du compteur val_MIN
incf VAL_10MIN,F ; Val_10MIN +1
movf VAL_10MIN,W
sublw 6 ; Soustrait 7
btfss STATUS,Z ; Test le bit Z si Z=0 retourne
RETURN
CLRF VAL_10MIN
inc_heur
bcf INTCON,TMR0IE ; Interdit les interruptions TMR0
CALL TEMPO2
incf VAL_HEUR,F ; Val_HEUR + 1
movf VAL_HEUR,W
sublw H'A' ; Soustrait 10
btfss STATUS,Z ; Test le bit Z si Z=0 retourne
RETURN
CLRF VAL_HEUR
CALL TEMPO2
movlw ZERO
movwf VAL_HEUR ; Mise à 0 du compteur val_HEUR
incf VAL_10HEUR,F ; Val_10HEUR +1
movf VAL_10HEUR,W
sublw 3 ; Soustrait 3
btfss STATUS,Z ; Test le bit Z si Z=0 retourne
RETURN
CLRF VAL_10HEUR
RETURN
Donc un petit peu d'aide ne serait pas de refus!
Merci d'avance A++
-----