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
GPIO sur PIC 12F675
Bonjour à chacun,
Le programme ci-dessous devrait armer puis faire basculer la broche GPIO5 (broche 2) d'un PIC 12F675. Or rien ne se passe, même dans le simulateur de MPLAB, l'instruction
où PTDI est défini par
est sans effet sur GPIO
Si quelqu'un peut me mettre sur la voie, merci d'avance
Le programme ci-dessous devrait armer puis faire basculer la broche GPIO5 (broche 2) d'un PIC 12F675. Or rien ne se passe, même dans le simulateur de MPLAB, l'instruction
Code : Tout sélectionner
bsf PTDI
où PTDI est défini par
Code : Tout sélectionner
#DEFINE PTDI GPIO,5 ; commande du point décimal
est sans effet sur GPIO
Si quelqu'un peut me mettre sur la voie, merci d'avance
Code : Tout sélectionner
;**********************************************************************
; PROGRAMME DE CLIGNOTEMENT DU POINT DECIMAL D'UN TDS03160 *
; COMMANDE PAR UN PIC16F84. *
; *
;**********************************************************************
; *
; NOM: Test1 *
; Date: 15/11/2017 *
; Version: 1.0 *
; Circuit: Platine d'essais *
; Auteur: JJE *
; *
;**********************************************************************
; *
; Fichier requis: p12F675.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=PIC12F675 ; Définition du processeur
#INCLUDE <p12F675.inc> ; Définitions des constantes
__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. 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 *
;*********************************************************************
OPTIONVAL EQU H'81' ; bit 7 = 1 :GPIO pull-ups disabled
; bit 6 = 0 : sans objet
; bit 5 = 0 : internal cycle clock
; bit 4 = 0 : sans objet
; bit 3 = 0 : prescaler is assiogned to
; TIMER0 module
; bit 2-0 = 001 : prescaler rate 1:4
; cf page 14 du DataSheet
ANSELVAL EQU H'00' ; ADCS<2:0> = 000 sans objet
; ANS3: ANS0 = 000 pas d'entrée analogique
; cf page 46 du DataSheet
INTCONVAL EQU H'80' ; bit 7 = 1 : Enables unlasked interrupts
; bit 6 = 0 : disables all peripheral interrupts
; bit 5 = 0 : disables TMR0 interrupt
; bit 4 = 0 : disables GPIO port change interrupt
; bit 3-0 = 0 sans objet
; cf page 15 du DataSheet
TIMER0VAL EQU .9 ; valeur initial de TIMER0 pour obtenir
; une IT toutes les 10ms avec un
; prescaler à 4 et une fréquence de 4MH
Nb_ITVAL EQU .10 ; pour simuler unr IT toutes les 10ms
cmpt50VAL EQU .50 ; pour simuler une IT toutes les 500ms
;*********************************************************************
; DEFINE *
;*********************************************************************
#DEFINE PTDI GPIO,5 ; commande du point décimal
#DEFINE T0ITE INTCON,T0IE ; @ bit T0IE Timer 0 IT Enable bit
;*********************************************************************
; MACRO *
;*********************************************************************
BANK1 macro
bsf STATUS,RP0
endm
BANK0 macro
bcf STATUS,RP0
endm
PTDION macro
bsf PTDI
endm
PTDIOFF macro
bcf PTDI
endm
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
CBLOCK 0x020 ; Début de la zone des variables
; sauvegardes pour l'IT
w_temp : 1 ; W
status_temp : 1 ; STATUS
Nb_IT : 1 ; compteur d'IT pour 10 ms
cmpt50 : 1 ; compteur pour 50 ms
ENDC ; Fin de la zone
;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************
;sauvegarder registres
;---------------------
ORG 0x004 ; adresse d'interruption
; interruption reçue toutes les 1ms
movwf w_temp ; 1 sauver registre W
swapf STATUS,w ; 2 swap status avec résultat dans w
movwf status_temp ; 3 sauver status swappé
BANK0
btfsc INTCON,T0IE ; 4/5 tester si interrupt timer autorisée
btfss INTCON,T0IF ; 5/6 oui, tester si interrupt timer en cours
goto int2 ; 7 non, c'est une autre interrupt
goto $+1 ; 9
bcf INTCON,T0IF ; 10 effacer flag interrupt timer
movlw TIMER0VAL ; 11
movwf TMR0 ; 12
; à ce moment, TIMER0 va compter 986 micro-cycles et reviendra au début de
; ce sous-programme de gestion des IT ce qui compte tenu des instructions
; qui précèdent et des deux non décomptées après l'initialisation de TMR0
; ammène bien à 1000 micro-cycles, soit 1000 microsecondes
call inttimer ; traiter interrupt timer
goto restorereg
int2 ; traitement éventuel des autres interruptions
nop
; restaurer registres
restorereg
swapf status_temp,w ; 2 swap ancien status, résultat dans w
movwf STATUS ; 3 restaurer status
swapf w_temp,f ; 4 Inversion L et H de l'ancien W
; sans modifier Z
swapf w_temp,w ; 5 Réinversion de L et H dans W
; W restauré sans modifier status
retfie ; 7 return from interrupt
;**********************************************************************
; INTERRUPTION TIMER 0
;**********************************************************************
; Cette routine est appelée toute le 1ms
inttimer
decfsz Nb_IT, f
return
; ici, on passe toutes les 10ms
; on réinitialise le compteur d'IT
movlw Nb_ITVAL
movwf Nb_IT
; on décrémente le compteur de passages
decfsz cmpt50, f
return
; ici on passe toutes les 500ms
; cette routine est appelée toutes les 500ms
; on réinitialise le compteur de passages
movlw cmpt50VAL
movwf cmpt50
; et on bascule l'état de GPIO5
movlw B'00100000'
xorwf GPIO,f
return ; 13
;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************
; Initialisations
; ---------------
init
clrf GPIO ; Sorties à 0
BANK1 ; sélectionner banque 1
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
clrf TRISIO ; GPIO tous les ports en sortie
movlw ANSELVAL
movwf ANSEL ; initialise ANSEL
BANK0
movlw INTCONVAL
movwf INTCON ; initialise INTCON
; Effacer RAM
; ------------
movlw 0x020 ; 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,5 ; tester si fin zone atteinte (>=50)
goto init1 ; non, boucler
; initialisations spécifiques
; ---------------------------
bsf PTDI ; Allume le point décimal
movlw Nb_ITVAL
movwf Nb_IT
movlw cmpt50VAL
movwf cmpt50
movlw TIMER0VAL
movwf TMR0
bsf INTCON,PEIE
bsf INTCON,T0IE ; autoriser l'IT Timer0
start
goto start ; boucle sans fin, le travail est fait sous IT
END ; directive fin de programme
GPIO sur PIC 12F675
GPIO sur PIC 12F675
Bonjour JJE, et et tous le forum,
Bonjour JJE,et bienvenue sur le forum de Fantas - Pic.
Je vois que tu es débutant, JMarc va être content de t'aider,
Utilises tu un Quartz ?
Personnellement, je trouve cette routine affreuse, c'est la seule façon de dégouter quelqu'un qui veux apprendre.
On peu faire beaucoup plus court.
A+
Bonjour JJE,et bienvenue sur le forum de Fantas - Pic.
Je vois que tu es débutant, JMarc va être content de t'aider,
Utilises tu un Quartz ?
Personnellement, je trouve cette routine affreuse, c'est la seule façon de dégouter quelqu'un qui veux apprendre.
On peu faire beaucoup plus court.
A+
Modifié en dernier par Temps-x le sam. 18 nov. 2017 09:24, modifié 2 fois.
GPIO sur PIC 12F675
à Jérémy, je ne désespère pas de me mettre au C que j'ai déjà pratiqué sur PC mais en assembleur, on est plus près du PIC
à Temps-x, j'espère faire la connaissance prochaine de JMarc. Comme 4MH me suffit, je n'ai pas prévu de Quartz externe. Je pense être perfectible et un exemple de "beau code" beaucoup plus court m'aurait bien satisfait. Tu dois en avoir plein dans tes archives.
merci à vous deux pour vos réponses rapides
à Temps-x, j'espère faire la connaissance prochaine de JMarc. Comme 4MH me suffit, je n'ai pas prévu de Quartz externe. Je pense être perfectible et un exemple de "beau code" beaucoup plus court m'aurait bien satisfait. Tu dois en avoir plein dans tes archives.
merci à vous deux pour vos réponses rapides
GPIO sur PIC 12F675
Bonjour JJE, Jérémy, et et tous le forum,
j’aurais dû deviner avec une utilisation de GP5
ça devrait fonctionner maintenant, quand on mets pas de de Quartz, on déclare comme ceci.
Précise exactement ce que tu veux faire, et on le feras avec tous le forum, hum ... en ASM on n'est pas beaucoup
Bon je vois cela ce soir, car la je suis pressé.
A+
Comme 4MH me suffit, je n'ai pas prévu de Quartz externe.
j’aurais dû deviner avec une utilisation de GP5
Code : Tout sélectionner
LIST p=12F675 ; Définition de processeur
#include <p12F675.inc> ; Définitions de variables
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
BANKSEL OSCCAL ; passer en bank 1
call 3FFh
movwf OSCCAL
ça devrait fonctionner maintenant, quand on mets pas de de Quartz, on déclare comme ceci.
Précise exactement ce que tu veux faire, et on le feras avec tous le forum, hum ... en ASM on n'est pas beaucoup
Bon je vois cela ce soir, car la je suis pressé.
A+
Modifié en dernier par Temps-x le dim. 19 nov. 2017 00:29, modifié 1 fois.
GPIO sur PIC 12F675
GPIO sur PIC 12F675
merci à vous deux pour ces réponses,
à Jérémy : effectivement ça marche mais je ne vois pas lequel de ces flags est utile
C'est vrai que j'ai oublié OSCAL
à satinas : PEIE n'est pas grisé dans la table des registres associés à TIMER0 (page 29 du DS), c'est pourquoi je l'ai armé.
à Jérémy : effectivement ça marche mais je ne vois pas lequel de ces flags est utile
C'est vrai que j'ai oublié OSCAL
à satinas : PEIE n'est pas grisé dans la table des registres associés à TIMER0 (page 29 du DS), c'est pourquoi je l'ai armé.
GPIO sur PIC 12F675
GPIO sur PIC 12F675
complément de réponse à stanislas : c'est dommage que les compilateurs ne signalent pas les erreurs dans les commentaires, ça nous mettrait à l'abris de commentaires foireux et trompeurs
C'est bien vrai mais alors la case PEIE de la page 29 devrait être grisée. Ces documentations sont pourtant vraiment bien faites.{funcName:"updateLocation","toolbarScreenTop":200}
C'est bien vrai mais alors la case PEIE de la page 29 devrait être grisée. Ces documentations sont pourtant vraiment bien faites.{funcName:"updateLocation","toolbarScreenTop":200}
GPIO sur PIC 12F675
Bonjour à tous
Bonjour à toi, c'est très volontiers mais il te faudra traverser toute la France car je suis à l'autre bout de la France, côté d'où il fait chaud, très chaud
Ma première question, pourquoi ce modèle de pic ?
Temps-x a fait un tuto sur le 16f88 qui fait ce que tu souhaites avoir.
J'ai fait un tuto sur la transmission avec le uart pour la transmission de données sur ce même pic et je vais pouvoir le terminer car j'ai reçu le 16f88 pour faire les essais.
Donc je te suggère, si tu souhaite que je t'aide, c'est soit tu prends un 16f84 ou bien un 16f88, un 16f877 ou un 18f4525. Je les ai en stock et pourrai faire les essais car je suis debutant
Attention au virus de l'assembleur
JJE a écrit :à Temps-x, j'espère faire la connaissance prochaine de JMarc.
Bonjour à toi, c'est très volontiers mais il te faudra traverser toute la France car je suis à l'autre bout de la France, côté d'où il fait chaud, très chaud
Ma première question, pourquoi ce modèle de pic ?
Temps-x a fait un tuto sur le 16f88 qui fait ce que tu souhaites avoir.
J'ai fait un tuto sur la transmission avec le uart pour la transmission de données sur ce même pic et je vais pouvoir le terminer car j'ai reçu le 16f88 pour faire les essais.
Donc je te suggère, si tu souhaite que je t'aide, c'est soit tu prends un 16f84 ou bien un 16f88, un 16f877 ou un 18f4525. Je les ai en stock et pourrai faire les essais car je suis debutant
Attention au virus de l'assembleur
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 109 invités