Aidez-moiiiiiiiiii pour mon programme du 16f84
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Aidez-moiiiiiiiiii pour mon programme du 16f84



  1. #1
    invite67d96d45

    bonjour,

    Me revoila à la charge avec mon programme en assembleur pour le 16F84. J'ai tenu compte des remarques que vous m'aviez formulé, et maintenant j'ai le programme ci-contre:






    ;// 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 (&gt;=40)
    goto init1 ; non, boucler
    btfss FSR,4 ; tester si fin zone atteinte (&gt;=50)
    goto init1 ; non, boucler





    ;PROGRAMME PRINCIPAL
    ;1.1 Paramétrage des ports

    bsf status,rp0
    movlw 0xFF
    movwf TRISA
    movlw B'00011001'
    movwf TRISB
    bcf status,rp0



    ;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 &lt;&gt; 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 &lt; &gt; 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


    :P Merci d'avoir lu mon programme jusqu'au bout !
    Si vous constatez des erreurs dites-le moi, car je vais compiler le programme pour le mettre dans le PIC.
    Merci de votre aide !


    -=#MODIFICATION#=-
    Bonjour,
    votre message sera prochainement fusionner
    à fusionner avec http://forums.futura-sciences.com/viewtopic.php?t=1770
    Merci de votre compréhension
    [RV]

    -----

  2. #2
    invite8ebda540

    Citation Envoyé par 14bds75_cb
    [
    ;PROGRAMME PRINCIPAL
    ;1.1 Paramétrage des ports

    bsf status,rp0
    movlw 0xFF
    movwf TRISA
    movlw B'00011001'
    movwf TRISB
    bcf status,rp0
    Bonjour

    avant le
    bsf status,rp0
    il vaut mieux rajouter
    bcf status,rp1
    et meme aussi au début du programme
    bcf status,rp0
    bcf status,rp1
    pour etre sur de partir de la bank 0

  3. #3
    invite67d96d45

    Salut PAT !

    Merci de ta remarque, je vais en tenir compte, mais sinon, le reste du programme tu en pense quoi ??

    amitiés et merci !

  4. #4
    invited8700cbd

    Bonjour 14bds75_cb
    1)
    Pour compiler ton prog tu as besoin de ce fichier a mettre apres
    LIST p=16f84
    include "p16F84.inc"
    Ce fichier contient la definition et les adresses du libelle utlise
    ex: PORTB,PORTA etc.........
    2)le point 1.3 Effacement de la ram
    Pourquoi faire un effacement de la ram au demarrage de ton pic
    Je ne vois pas l' utilite de cette partie
    3)Presentation d'un debut de programme
    LIST p=16f84
    include "p16F84.inc"
    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

    ;Declaration des variables

    org 00H ;reset vector.
    goto Init ;Cette ligne n' est necessaire mais pour la lisibillite
    Init
    ;Initialise les differents registre du pic
    Main
    ;Debut de ton programme
    End
    Salut
    A+

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

    Bonjour 14bds75_cb
    si tu veux que tout ton programme soit execute je te conseille de mettre
    ton "END" à la fin de celui ci et non pas avant ta routine de temporisation
    Salut
    A+

  7. #6
    invited8700cbd

    Bonjour 14bds75_cb
    Apres correction du "End" et quelques erreus de syntaxe
    Compilation OK
    Mais "compile ok " ne veut pas dire que ton prog fonctionne comme tu le pense, il reste à le tester
    Exemple erreur syntaxe
    Goto Tempo ;
    tempo
    ;execution
    Une erreur se produit car Tempo et tempo n' est pas identique dans la syntaxe
    Salut
    A+

  8. #7
    invite67d96d45

    Grand merci à tous de vos infos !

    C'est trés sympa d'avoir pris de votre temps pour vous occuper de mon problème !

    Je vais tester cela dans les plus brefs délais !

    Encore merci !

Discussions similaires

  1. programme pour pic 16f84 aider moi SVP
    Par invite3f18478d dans le forum Électronique
    Réponses: 37
    Dernier message: 28/05/2009, 20h46
  2. programme en C pour pic 16F84
    Par le fouineur dans le forum Électronique
    Réponses: 14
    Dernier message: 20/04/2006, 14h36
  3. aidez moi pour mon exam DIGIPLAY
    Par invitee3d2b39d dans le forum Électronique
    Réponses: 1
    Dernier message: 11/12/2004, 19h25
  4. A l'aide pour mon programme du 16F628
    Par invitee5e63da7 dans le forum Électronique
    Réponses: 5
    Dernier message: 18/06/2003, 23h47
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...