Problème dans un programme de PIC
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Problème dans un programme de PIC



  1. #1
    invite67d96d45

    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 !

    -----

  2. #2
    Bigonoff

    Salut
    -------

    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...
    Logique. D'après ce que tu as écrit, lorsque PA0 = 0, on éteint les 2 leds, et on interrompt le comptage.
    Une fois PA0 = 1, on réallume la led verte et on reprend le comptage où il en était arrivé.

    A+
    Bigonoff
    Vive l'Internet libre

  3. #3
    invite67d96d45

    Salut Bigonoff !

    Merci de ton message, j'ai compris ce que tu voulais me dire, et je te remercie d'avoir pris le temps de m'expliquer !

    Cependant, il y a une chose qui ne marche pas:
    >Supposons que pa0=1 durant toute le durée du programme
    >>Normalement la DEL verte sera allumé, et la rouge va clignoter au rythme des incrémentations de CHRONO. La variable CHRONO va donc s'incrémenter de 1 à chaque seconde. Et quand on arrivera à la valeur 10, on va allumer les 2 DEL.

    Or dans mon cas, si je mets pa0 à 1, j'ai la DEL verte allumé, et la rouge qui clignote, mais JAMAIS je ne sors de la boucle (on ne détecte jamais que CHRONO = 10 !!!!)

    Que modifier ????

    amitiés et merci à tous

  4. #4
    Bigonoff

    Salut
    ------

    Ben, d'après moi, il n'y a rien à modifier, ton programme doit fonctionner.

    Si tu ne sors pas de la boucle, explique ce qui se passe au niveau des leds.

    es-tu certain que ton niveau haut sur RA0 est correctement forcé au +Vdd?


    A+
    Bigonoff
    Vive l'Internet libre

  5. A voir en vidéo sur Futura
  6. #5
    invite67d96d45

    Salut !

    CA MARCHE !!!!!!!!!!!!!!!

    Grâce à tous vos conseils, et grâce à Aurélien www.aurelienr.com, ça fonctionne à merveille !!!!!!!!!

    En fait, il n'y avait pas à proprement parlé une grosse erreur, mais une successions d'etourderies qui ont fait raté le programme.

    Dans tous les cas, MERCI à tous !

  7. #6
    Bigonoff

    Salut
    --------

    On peut savoir quoi ?

    Parce que moi, je n'ai pas vu d'erreur.
    Peut-être dois-je changer de lunettes?

    A+
    Bigonoff
    Vive l'Internet libre

  8. #7
    invite67d96d45

    Salut !

    Les erreurs, c'est le grand chef qui les as trouvé (ndlr: Aurélien !)...

    Sinon, c'est au niveau des déclarations je crois, mais maintenant ça marche à merveille !

    amitiés

  9. #8
    Bigonoff

    Salut
    -------

    Arf.

    J'ai regardé le code, je n'ai jamais pensé que tu t'étais trompé en écrivant les réservations mémoire. Je n'ai pas vérifié, j'aurais du.

    chrono: 0 ; compteur de boucles 1 où tu as mis 0 octet comme longueur de réservation au lieu de 1

    A+
    Bigonoff
    Vive l'Internet libre

Discussions similaires

  1. Programme en C pour PIC 16F877
    Par riquet dans le forum Électronique
    Réponses: 7
    Dernier message: 11/04/2012, 13h25
  2. Question programme pour PIC
    Par invitebf099494 dans le forum Électronique
    Réponses: 7
    Dernier message: 02/04/2008, 16h42
  3. Exécution de programme externe au pic
    Par invite99eb5770 dans le forum Électronique
    Réponses: 2
    Dernier message: 13/02/2007, 23h22
  4. Programme En Pic
    Par invite436dc8ee dans le forum Électronique
    Réponses: 6
    Dernier message: 13/05/2006, 12h01
  5. programme en C pour pic 16F84
    Par le fouineur dans le forum Électronique
    Réponses: 14
    Dernier message: 20/04/2006, 14h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.