Programmation ASM d'un PIC
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Programmation ASM d'un PIC



  1. #1
    invite67d96d45

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


    Merci à tous de l'attention que vous avez porté à mon programme, et grand merci à tous ceux qui m'aideront !
    Amitiés à tous !

    -----

  2. #2
    inviteeb160de1

    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..

    A+
    Aurélien.

  3. #3
    invite67d96d45

    Salut Aurélien !

    Voici des précisions:

    ;// 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


    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 !

  4. #4
    inviteeb160de1

    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.

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

    Remarque : les entrées non utilisées, mets les en entrées.

    Aurélien.

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

    Merci Aurélien pour tes infos !

    Si d'autres OM pouvait me donner leur avis, ce serait sympa, car je vais aller faire programmer le pic, samedi...

    amitiés, et merci à tous !!

Discussions similaires

  1. Programmation sous Flowcode d'un PIC 16F84
    Par invite923c5f28 dans le forum Électronique
    Réponses: 9
    Dernier message: 18/03/2009, 18h02
  2. problème programmation d'un pic 16F876A
    Par invite7304b6e0 dans le forum Électronique
    Réponses: 14
    Dernier message: 29/08/2007, 16h18
  3. Programmation d'un PIC 18F4580
    Par invitef3bd5ad5 dans le forum Électronique
    Réponses: 1
    Dernier message: 11/07/2006, 19h41
  4. [ Programmation PIC 16F84 (asm) ]
    Par invite49af6c4e dans le forum Électronique
    Réponses: 1
    Dernier message: 23/10/2003, 20h55
  5. Consommation d'un PIC en mode programmation...
    Par invite17e62166 dans le forum Électronique
    Réponses: 1
    Dernier message: 30/01/2003, 01h00
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...