Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Désignations des I/O en ASM
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#1 Message par F6FCO » jeu. 14 déc. 2017 22:34

Dites-moi, d'après ce que j'ai lu il faut commencer par définir si les sorties seront en entrée ou en sortie en modifiant les registres TRISA et TRISB, bits à 1 pour entrée et 0 pour sortie. Les deux registres forcés à 1 au reset, mais dans le programme Led_cli de Bigonoff je ne vois pas cette opération sur TRISA pour passer la pin led en sortie et çà me turlupine.
Il y a bien une ligne dans les initialisations sur le PORTA mais c'est en bank0.

Code : Tout sélectionner

;**********************************************************************
;
   PROGRAMME DE CLIGNOTEMENT D'UNE LED CONNECTEE SUR LE PORTA.2      *
;   D'
UNE PIC16F84. PROGRAMME D'ENTRAINEMENT AU FONCTIONNEMENT        *
;   DES PICS.                                                         *  
;                                                                     *
;**********************************************************************
;                                                                     *
;    NOM:      LED-CLI                                                *
;    Date:     09/02/2001                                             *
;    Version:  1.0                                                    *
;    Circuit:  Platine d'
essais                                       *
;
    Auteur:   Bigonoff                                               *
;
                                                                     *
;**********************************************************************
;
                                                                     *
;
    Fichier requis: P16F84.inc                                       *
;
                                                                     *
;**********************************************************************
;
                                                                     *
;
    Notes: Ce petit programme permet de faire clignoter une LED      *
;
           sur le port A.2 à une fréquence de 1Hz                    *
;
           Ce programme fait partie de la leçon 6 des cours          *
;
                                                                     *
;**********************************************************************


    LIST      p=16F84            ; Définition de processeur
    
#include <p16F84.inc>        ; Définitions de variables

    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation du processeur. Les définitions sont dans le fichier include.
;
 Voici les valeurs et leurs définitions :
;
    _CP_ON        Code protection ON : impossible de relire
;    _CP_OFF        Code protection OFF
;    _PWRTE_ON    Timer reset sur power on en service
;    _PWRTE_OFF    Timer reset hors-service
;    _WDT_ON        Watch-dog en service
;    _WDT_OFF    Watch-dog hors service
;    _LP_OSC        Oscillateur quartz basse vitesse
;    _XT_OSC        Oscillateur quartz moyenne vitesse
;    _HS_OSC        Oscillateur quartz grande vitesse
;    _RC_OSC        Oscillateur à réseau RC

;*********************************************************************
;
                              ASSIGNATIONS                          *
;************************************
9+*********************************

OPTIONVAL    EQU    H'0008'            ; Valeur registre option
                                
; Résistance pull-up ON
                                
; Pas de préscaler

;*********************************************************************
;
                             DEFINE                                 *
;*********************************************************************

#DEFINE LED    PORTA,2            ; Led rouge
#DEFINE BOUTON    PORTB,2        ; bouton-poussoir


;*********************************************************************
;
                             MACRO                                  *
;*********************************************************************

LEDON macro    
        bsf    LED
    endm

LEDOFF macro
        bcf    LED
    endm

;*********************************************************************
;
                   DECLARATIONS DE VARIABLES                        *
;*********************************************************************

    CBLOCK 0x00C           ; début de la zone variables
        cmpt1 
:1;
        cmpt2 :1;
        cmpt3 :1;
        mavariable : 5;
        ENDC            ; Fin de la zone                        

;**********************************************************************
;
                      DEMARRAGE SUR RESET                            *
;**********************************************************************

    org 0x000             ; Adresse de départ après reset
      goto    init        
; Adresse 0: initialiser

;*********************************************************************
;
                       INITIALISATIONS                              *
;*********************************************************************

init
    clrf    PORTA        
; Sorties portA à 0
    clrf    PORTB        
; sorties portB à 0
    bsf        STATUS
,RP0    ; sélectionner banque 1
    clrf    EEADR        
; permet de diminuer la consommation
    movlw    OPTIONVAL    
; charger masque
    movwf    OPTION_REG    
; initialiser registre option

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

            ; initialisations spécifiques
            ; ---------------------------
    bcf    LED                ; LED en sortie (banque1)
    bcf    STATUS,RP0        ; repasser banque 0
    goto    start        ; sauter au programme principal

;*********************************************************************
;                      SOUS-ROUTINE DE TEMPORISATION                 *
;*********************************************************************
;---------------------------------------------------------------------
; Cette sous-routine introduit un retard de 500.000 µs.
; Elle ne reçoit aucun paramètre et n'
en retourne aucun
;---------------------------------------------------------------------
tempo
    movlw    2            
; pour 2 boucles
    movwf    cmpt3        
; initialiser compteur3
boucle3
    clrf    cmpt2        
; effacer compteur2
boucle2
    clrf    cmpt1        
; effacer compteur1
boucle1
    nop                    
; perdre 1 cycle
    decfsz    cmpt1 
, f    ; décrémenter compteur1
    goto    boucle1        
; si pas 0, boucler    
    decfsz    cmpt2 
, f    ; si 0, décrémenter compteur 2
    goto    boucle2        
; si cmpt2 pas 0, recommencer boucle1
    decfsz    cmpt3 
, f    ; si 0, décrémenter compteur 3
    goto    boucle3        
; si cmpt3 pas 0, recommencer boucle2
    return                
; retour de la sous-routine

;*********************************************************************
;
                      PROGRAMME PRINCIPAL                           *
;*********************************************************************

start
    bsf    LED        
; allumer la LED : on aurait pu écrire
                
; LEDON (voir les macros)
    ;call     tempo        ; appeler la tempo de 0.5s
    bcf    LED        
; éteindre LED (LEDOFF)
;
    call    tempo        ; appeler la tempor de 0.5s
    goto start        
; boucler


    END             
; directive fin de programme

Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Pickit3 et MPlab
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#2 Message par Gérard » jeu. 14 déc. 2017 23:14

Effectivement, je ne vois rien concernant TRISA et TRISB.
Est tu sûr que c'est ce programme que Bigo a publié?
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Pickit3 et MPlab
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#3 Message par F6FCO » jeu. 14 déc. 2017 23:36

Heuuuu ! à force de faire des exercices et maintenant que tu le fais remarquer je ne suis plus sur, je vérifie. Me serais-je auto-induit en erreur ?

EDIT: après vérif, oui c'est le fichier proposé par Bigonoff. Je vais tenter de faire les modifs, rien de tel pour apprendre et je reviens vers vous si çà ne marche pas.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Pickit3 et MPlab
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#4 Message par JMarc » jeu. 14 déc. 2017 23:56

Bonjour F6FCO et tout le monde

Bcf LED
C'est cela qui met en sorti le portA car il est exécuté quand la banque 1 est sélectionné donc = a tristA

Désignations des I/O en ASM
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#5 Message par Temps-x » ven. 15 déc. 2017 01:55

Bonjour JMarc, Gérard, F6FCO, Jérémy, et tous le frum,

:sifflotte: Heu..... ça serait bien de déplacer le sujet dans la section ASM


Fichier source + fichier compilé :
clig.zip

Code : Tout sélectionner


    Errorlevel
-302                        ; Supprime le message "Ensure that bank bits are correct" 

    LIST      p
=16F84                     ; Définition de processeur
    
#include <p16F84.inc>                 ; Définitions de variables

    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

;*********************************************************************
;
                         DEFINITION
;*********************************************************************

#DEFINE LED    PORTA,2                    ; Led de couleur de votre choix
#DEFINE BOUTON PORTB,2                    ; bouton-poussoir

;*********************************************************************
;
                   DECLARATIONS DE VARIABLES                        *
;*********************************************************************

    CBLOCK 0x00C                          ; début de la ram
        cmpt1 
:1                          ;
        cmpt2 :1                          ;
        cmpt3 :1                          ; variable de 1 octet
        mavariable 
: 5                    ; variable de 5 octets
    ENDC                   

;**********************************************************************
;
                      DEMARRAGE SUR RESET                            *
;**********************************************************************

    org 0x000                             ; Adresse de départ après reset
      goto    init                        
; Adresse 0: initialiser

;**********************************************************************
init 
 
    BANKSEL OPTION_REG                    
; directive de microchip pour passer en banque 1                                       ;  

;************************ configuration du registre OPTION_REG en bank 1 ********************** 

      movlw B
'00000000'                   ; résistances en service
      movwf OPTION_REG                    
; chaque patte du PORTB seras relié au + par une résistance de 10K   

;******************* configuration des registres TRISA & TRISB en bank 1 **********************

      movlw B'00110000'                   ; toutes les pattes en sorties, exception MCLR(RA5), et( RA4), en entrée
      movwf TRISA                         
; 17(RA0),18(RA1),1(RA2),2(RA3),4(RA5),15(RA6),16(RA7) 
                                          
;                         

       movlw B
'11111111'                  ; toutes les pattes dans TRISB seras configurer en entrée 
       movwf TRISB                        
; 6(RB0),7(RB1),8(RB2),9(RB3),10(RB4),11(RB5),12(RB6),13(RB7) 
                                          
;

       BANKSEL PORTA                      ; passer en banque 0 

       clrf INTCON                        
; interruption hors service 

;*********************************************************************
;
                      PROGRAMME PRINCIPAL                           *
;*********************************************************************

start
    bsf LED                               
; allumer la LED, qui se trouve sur RA2
    call tempo                            
; appeler la tempor de 0.5s
    bcf LED                               
; éteindre la LED, qui se trouve sur RA2
    call tempo                            
; appeler la tempor de 0.5s
    goto start                            
; boucler

;*********************************************************************
;
                      SOUS-ROUTINE DE TEMPORISATION                 *
;*********************************************************************
;---------------------------------------------------------------------
;
 Cette sous-routine introduit un retard de 500.000 µs.
;
 Elle ne reçoit aucun paramètre et n'en retourne aucun
;---------------------------------------------------------------------
tempo
    movlw D'
2'                         ; pour 2 boucles, le 'D' signifi Décimal
    movwf cmpt3                        ; initialiser compteur3
boucle3
    clrf cmpt2                         ; effacer compteur2
boucle2
    clrf cmpt1                         ; effacer compteur1
boucle1
    nop                                ; perdre 1 cycle
    decfsz cmpt1,F                     ; décrémenter compteur1
    goto boucle1                       ; si pas 0, boucler    
    decfsz cmpt2,F                     ; si 0, décrémenter compteur 2
    goto boucle2                       ; si cmpt2 pas 0, recommencer boucle1
    decfsz cmpt3,F                     ; si 0, décrémenter compteur 3
    goto boucle3                       ; si cmpt3 pas 0, recommencer boucle2

    return                             ; retour de la sous-routine

    END                                ; directive fin de programme


Les assignations sont utiles que dans certain cas, pour ce cas là, elles sont inutiles, et embrouille le débutants.

Effectivement les pattes n'ont pas été configuré avec TRISA et TRISB , mais il la peut être fait exprès, li la suite ... :wink:

TRISA ou TRISB pour ce PIC là, sert à configurer chaque patte de ton Pic, soit en entrée pour 1, soit en sortie pour 0.

Si je copie cette valeur binaire B'11111000' dans TRISB les pattes RB7, RB6, RB5, RB4, RB3, seras en entrée et RB2, RB1, RB0 seras en sortie.

Le code est assez court, ça allège sa compréhension, ta LED devrait clignoté, vu l'heure j'ai pas testé, mais ça devrait fonctionné.

J'ai vu que tu avais un chat, regarde Ici

Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le ven. 15 déc. 2017 13:16, modifié 1 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Pickit3 et MPlab
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » ven. 15 déc. 2017 07:32

 ! Message de modération :
Bonjour à tous,

Je divise le sujet de F6FCO afin de rendre le fil compréhensible. On va essayer de se tenir à un seul problème par sujet , histoire de garder le forum clair .
Merci à tous les participants.
Ne pas hésitez un ouvrir un autre Post, pour un autre problème. cela facilite également la recherche par le moteur de recherche .


Il me semble que en "C" c'est pareil. On peut affecter les broches en sortie ou en entrée ( moyen mnémotechnique 1 ressemble à la lettre "i" pour In . 0 ressemble à la lettre "O" pour Out .

Sans désigné les ports, si tu mets une broche à 1 elle passe en sortie il me semble mais je n'ai pas testé ! a proscrire pour éviter les problémes.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Désignations des I/O en ASM
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#7 Message par F6FCO » ven. 15 déc. 2017 14:59

Merci pour vos précisions, je retiens donc qu'avec le 16F84 on peut aussi bien jouer sur PORTA ou TRISA qui sont à la même adresse, c'est la banque sélectionnée qui importe. Si on travaille sur PORTA en bank1 c'est comme si on travaillait sur TRISA.
Mais moi petit débutant je vais être bien carré en utilisant les bon mots sinon je ne m'en sortirai pas :lol:
Si je comprends bien le fonctionnement de la directive BANKSEL, c'est apparemment une bascule ?

Désolé Jeremy, c'est vrai que j'avais tendance à poser beaucoup de questions dans le même sujet, je vais essayer d'être plus discipliné :wink:
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Désignations des I/O en ASM
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#8 Message par Temps-x » ven. 15 déc. 2017 15:17

Bonjour,

je retiens donc qu'avec le 16F84 on peut aussi bien jouer sur PORTA ou TRISA qui sont à la même adresse


Pas du tous ce sont pas les mêmes adresse, et chacun à une tache bien défini

PORTA se trouve en banque 0 à l'adresse H'05', et sert a envoyer et recevoir.
TRISA se trouve en banque 1 à l'adresse H'85', et sert à configurer les pattes de ton Pic comme entrée ou sortie, enfin ceux qui sont prévu pour ça.

Voici les registres avec leurs adresses, et la ram

PIC16F84.jpg


Je préfère intervenir tous de suite, pour pas que tu fasses fausse route. :wink:
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le ven. 15 déc. 2017 16:09, modifié 1 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Désignations des I/O en ASM
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#9 Message par F6FCO » ven. 15 déc. 2017 15:37

Merci de ton intervention, c'est sur qu'on a vite fait de se perdre au début. C'est le fait que PORTA et TRISA se trouvent cote à cote dans la représentation des bank qui m'a fait penser que c'était la même adresse, je n'avais pas vu les adresses sur le coté et j'avais pensé rapidement que c'était un mot de 16bits divisé en deux registres.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Désignations des I/O en ASM
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#10 Message par F6FCO » sam. 16 déc. 2017 19:32

Maintenant que je peux suivre en direct mes registres et variables je me suis amusé avec ton code et j'ai trouvé un truc qui me chipote.

movlw B'00110000'
movwf TRISA

je charge bien la valeur 00110000 dans WREG mais au pas suivant c'est la valeur 00010000 qui est chargée dans TRISA.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités