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 ---
- 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 ---
Modérateur : mazertoc
Désignations des I/O en ASM
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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.
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
Pickit3 et MPlab
Pickit3 et MPlab
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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.
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.
Pickit3 et MPlab
Désignations des I/O en ASM
Bonjour JMarc, Gérard, F6FCO, Jérémy, et tous le frum,
Heu..... ça serait bien de déplacer le sujet dans la section ASM
Fichier source + fichier compilé :
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 ...
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
A°
Heu..... ça serait bien de déplacer le sujet dans la section ASM
Fichier source + fichier compilé :
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 ...
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
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 13:16, modifié 1 fois.
Pickit3 et MPlab
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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.
Désignations des I/O en ASM
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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
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é
Mais moi petit débutant je vais être bien carré en utilisant les bon mots sinon je ne m'en sortirai pas
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é
Désignations des I/O en ASM
Bonjour,
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
Je préfère intervenir tous de suite, pour pas que tu fasses fausse route.
A+
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
Je préfère intervenir tous de suite, pour pas que tu fasses fausse route.
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.
Désignations des I/O en ASM
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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.
Désignations des I/O en ASM
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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.
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.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités