Bonjour,
Voici mon programme:
;============================= =====================
; DEBUT DU PARAMETRAGE =
;============================= ====================
;==================VALIDE===== ====================
LIST p=16f84
include "p16F84.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 00H ;reset vector.
;============================= =====================
; INITIALISATION DES VARIABLES =
;============================= =====================
;==============VALIDE========= =====================
init ;Initialise les differents registre du pic
CBLOCK 0x00C ; début de la zone variables
chrono: 0 ; compteur de boucles 1
PDel0: 1 ; pour la tempo
PDel1: 1 ; pour la tempo
PDel2: 1 ; pour la tempo
ENDC ; Fin de la zone
;============================= =====================
; EFFACEMENT DE VARIABLES =
;============================= ====================
;=============VALIDE========== ====================
clrf chrono
;============================= ====================
; PARAMETRAGE DES PORTS =
;============================= ====================
;==============VALIDE========= ===================
bcf STATUS, RP1
bsf STATUS, RP0
movlw 0xFF
movwf TRISA
movlw B'00011001'
movwf TRISB
bcf STATUS, RP0
;============================= ============================== =====
; PROGRAMME PRINCIPALE =
;============================= ============================== =====
;***************************** ****************************** **************************
;*1.On teste si le circuit est activé, donc si un niveau haut est présent sur RA0. *
;***************************** ****************************** **************************
;============VALIDE=========== ============================== =====
Test ;étiquette de début de prog
BCF PORTB,7 ;eteint la DEL rouge
BCF PORTB,6 ;eteinte la DEL verte
CALL tempo
BTFSS PORTA,0 ;si PA0=0 on reboucle sur
GOTO Test ;TEST.
;A ce stade, on à PA0=1========================= ==========
BSF PORTB,6 ;on allume la DEL VERTE
Test1 ;etiquette de sous-programme
;On allume la DEL ROUGE de façon à visualiser les impulsions de comptage===========
BSF PORTB,7 ; on allume la DEL ROUGE
CALL tempo ; on va au sous prog TEMPO
BCF PORTB,7 ; on éteint la DEL ROUGE
CALL tempo
INCF chrono,F ;incrémentation de CHRONO
MOVLW D'10' ; on charge 10 dans W
SUBWF chrono,w ; soustraire 10 à la variable CHRONO, et stocker le résultat dans W
BTFSC STATUS,Z ; Tester le bit Z du CCR, et si Z=1 on execute l'instruction suivante (avec BTFSC).
GOTO Sortir ; Z=1 donc CHRONO = 100, donc on se branche sur SORTIR.
;Fin de la gestion de la visualistion ============================== ==========
BTFSS PORTA,0 ;Si PA0=0 on boucle sur
GOTO Test ;le tout debut du programme.
GOTO Test1 ;Si PA0=1,on va sur TEST1.
;============================= =====================
; SOUS PROGRAMME TEMPORISATION 1 SECONDE =
;============================= ====================
;==================VALIDE===== ====================
tempo
PDelay movlw .14 ; 1 set number of repetitions (C)
movwf PDel0 ; 1
PLoop0 movlw .72 ; 1 set number of repetitions (B)
movwf PDel1 ; 1
PLoop1 movlw .247 ; 1 set number of repetitions (A)
movwf PDel2 ; 1
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
Sortir
BSF PORTB,7 ; on allume la DEL ROUGE
BSF PORTB,6 ; on allume la DEL VERTE
GOTO Sortir ; on fait une boucle sans fin
END ; Finalisation du pgrm
En fonctionnement normal, on devrait avoir:
*on test le port PA0:
>Si pa0=1, la DEL verte s'allume
>>La del rouge clignote à chaque incrémentation
>Dés que CHRONO est à la valeur 10 (incrémenter 10 fois), on sort du programme, et on allume les 2 DEL.
Si à un moment donné, on a pa0=0, on sort du programme et les 2 DEL s'allume.
Or dans mon cas, cela ne marche pas...
La del verte s'allume correctement lorsque pa0=1, et le clignotement à bien lieu (donc l'incrémentation se fait bien).
Mais on ne sort jamais du programme (sauf quand pa0=0), lorsque la valeur 10 est atteinte !
Aidez moi !!!!!!!!!!!!!!!!!!!!!!!!!!!!
Merci de votre aide !
-----