Bonjour !
J'ai besoin de votre aide !
J'ai lu, relu le cours de Bigonoff, qui est super, et maintenant j'ai fait mon programme, et j'aimerai que vous me disiez s'il est valide, et sutrtout s'il n'y a pas d'erreur, car j'ai peur qu'il y est des problèmes au niveau de la déclaration des variables.
Voici le programme:
;// RA0 : détection audio
;// RA1 : Validation du circuit
;// RA2 : NC
;// RA3 : NC
;// RA4 : NC
;// RB0 : NC
;// RB1 : REC / PLAY
;// RB2 : DECLENCHEMENT
;// RB3 : NC
;// RB4 : NC
;// RB5 : IMPULSION PC
;// RB6 : RX
;// RB7 : TX
;1.1 Les déclarations fondamentales :
LIST p=16F84 ; Définition de processeur
#include <p16F84.inc> ; Définitions de variables
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
OPTIONVAL EQU H'0008' ; Valeur registre option
; Résistance pull-up ON
; Pas de préscaler
1.2. La déclarations des variables :
CBLOCK 0x00C ; début de la zone variables
chrono: 0 ; compteur de boucles 1
PDel0: 0 ; pour la tempo
PDel1: 0 ; pour la tempo
PDel2: 0 ; pour la tempo
ENDC ; Fin de la zone
1.3 Effacement de la Ram :
movlw 0x0c ; initialisation pointeur
movwf FSR ; pointeur d'adressage indirec
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,6 ; tester si fin zone atteinte (>=40)
goto init1 ; non, boucler
btfss FSR,4 ; tester si fin zone atteinte (>=50)
goto init1 ; non, boucler
;PROGRAMME PRINCIPAL
;1.On teste si le circuit est activé, donc si un niveau haut est présent sur RA0.
Debut ;étiquette du début du prog
BCF PORTB,1 ;on mets PB1 à 0 (mode REC)
BSF PORTB,2 ;on mets PB2 à 1 (no declenchemen)
BCF PORTB,5 ;on mets PB5 à 0 (no impulsion)
BSF PORTB,6 ;on mets PB6 à 1 (on est en RX)
BCF PORTB,7 ;on mets PB7 à 0 (pas de TX)
BTFSS PORTA,1 ;si PA1=0, on
GOTO Debut ;reboucle sur debut.
;si PA1 = 1, on continu le programme.
;2.On considère que RA1 est au niveau bas, ce qui nous permet de continuer ce programme. On va donc tester RA0.
Test ;étiquette de début de prog
BTFSS PORTA,0 ;si PA0=0 on reboucle sur
GOTO Test ;TEST.
BCF PORTB,1 ;on mets PB1 à 0 (REC)
NOP ; pause
NOP ; pause
NOP ; pause
BCF PORTB,2 ;on mets PB2 à 0 (déclenchent)
BSF PORTB,5 ;PB5=1 (envoie impulsion pc)
CALL Tempo ; on va au sous prog TEMPO
INCF chrono,F ;incrémentation de CHRONO
BTFSC PORTA,0 ;Si PA0=0 on boucle sur
GOTO sortir ;SORTIR.
GOTO Test ;Si PA0=1,on va sur TEST.
;3.La première partie du programme a été exécutée, on passe maintenant à la seconde partie :
Sortir ; etiquette
BSF PORTB,2 ; PB2=1 (stop la validation)
NOP ; pause
NOP ; pause
BSF PORTB,1 ; PB1=1 (lecture)
NOP ; pause
BCF PORTB,5 ; PB5=0 (stop impulsion)
BCF PORTB,6 ; PB6=0 (pas de RX)
NOP ; pause
NOP ; pause
BSF PORTB,7 ; PB7=1 (TX)
BCF PORTB,2 ; PB2=0 (on déclenche lecture)
Suite1 ; etiquette
CALL tempo ; sera exécuté si CHRONO <> 0
DECF chrono,F ;décrémente F, et on exécute la ;ligne suivante, jusqu'à ce que ;la variable CHRONO=0
GOTO suite1 ; tant que CHRONO < > 0, on
; Décrémente CHRONO.
NOP ; sera exécuté si CHRONO = 0
NOP ; pause
BSF PORTB,2 ; RB2=1 (pas de déclenchement)
CALL tempo ; tempo de 1 seconde
BCF PORTB,7 ; RB7=0 (pas de TX)
NOP ; temporisation
BSF PORTB,6 ; RB6=1 (passe en RX)
CALL tempo ; tempo de 1 seconde (important)
CALL tempo ; tempo de 1 seconde (important)
GOTO Debut ; FIN on repart au DEBUT
END ; Finalisation du pgrm
;Sous programme de temporisation de 1 seconde :
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
Merci à tous de l'attention que vous avez porté à mon programme, et grand merci à tous ceux qui m'aideront !
Amitiés à tous !
-----