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.
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 :
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 !
Salut,
Bon tu dois avoir une mauivaise version du datasheet ou quoi ? dans la tienne il n'y a pas les registres TRIS
Depuis le temps que je te dit de les utiliser avant de toucher aux ports...
Car le PIC si tu lui dis bsf PORTB,0, il acceptera quelque soit l'etat E ou S de la broche, et n'en deduira pas que c'est une sortie !
Alors il faut que tu passes en bank1, tu envoies les valeurs correspondantes dans TRIS (comme si tu commandais un port mais avec 1 pour entrée, 0 pour sortie), puis tu reviens en bank0..
En bleu, ce sont les entrées
En rouge, ce sont les sorties.
Voila tout !
En fait, je ne comprends pas trop comment on utilise la configuration des PORTS... je m'embrouille avec le 68hc11...
Merci de ton aide Ami Aurélien !
02/06/2003 - 21h10
Aurélien
Date d'inscription
janvier 2003
Localisation
Paris
Âge
30
Messages
735
Salut,
Alors dans ce cas, tu dois mettre cette routine de config au démarrage, ou du moins avant tout appel aux ports. Tu n'as à la lancer qu'une seule fois.