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
Salut JMarc, quand je parlais de faire connaissance, ce peut n'être que par écrit mais j'ai de la famille à Marseille ce qui m'y amène de temps en temps.
Concernant le choix du PIC (12F675), c'est simplement que j'en ai en stock. En fait, j'ai fait un peu de développement sur ces Pics il y a quelques années et j'avais un peu abandonné. Je m'y remets et j'étais bien ennuyé de me planter sur un premier essai aussi simple. Heureusement que Temps-x m'a apporté une solution que je n'ai pas comprise cependant.
Une autre raison du choix du 12F675 est peut être une histoire de challenge, je n'ai besoin que de 4 pattes en sortie digitale et une en analogique, j'en aurai encore une de trop
Concernant le choix du PIC (12F675), c'est simplement que j'en ai en stock. En fait, j'ai fait un peu de développement sur ces Pics il y a quelques années et j'avais un peu abandonné. Je m'y remets et j'étais bien ennuyé de me planter sur un premier essai aussi simple. Heureusement que Temps-x m'a apporté une solution que je n'ai pas comprise cependant.
Une autre raison du choix du 12F675 est peut être une histoire de challenge, je n'ai besoin que de 4 pattes en sortie digitale et une en analogique, j'en aurai encore une de trop
GPIO sur PIC 12F675
Bonjour JJE, Jérémy, JMarc, et et tous le forum,
Rien à comprendre, c'est comme ça, il faut le savoir, après si tu es curieux, tu peux éditer le fichier P12F675.inc, ou tous est
marqué, mais pas y touché.
Il existe des fichier de départ en ASM, quand tu installes l'éditeur MPLAB de Microchip, voir le tutoriel
que j'ai fais ici : viewtopic.php?p=6621#p6621
J'aime bien ce pic là, car petit, mais très puisant, on peu faire plein de chose avec, comme : viewtopic.php?p=4382#p4382
Très bon choix.
Je te joint toutes une liste de fichier de départ pour ASM, qui commence du PIC10F200 à PIC18F8723
Fichier joint :
A+
une solution que je n'ai pas comprise cependant.
Rien à comprendre, c'est comme ça, il faut le savoir, après si tu es curieux, tu peux éditer le fichier P12F675.inc, ou tous est
marqué, mais pas y touché.
Il existe des fichier de départ en ASM, quand tu installes l'éditeur MPLAB de Microchip, voir le tutoriel
que j'ai fais ici : viewtopic.php?p=6621#p6621
J'aime bien ce pic là, car petit, mais très puisant, on peu faire plein de chose avec, comme : viewtopic.php?p=4382#p4382
Très bon choix.
Je te joint toutes une liste de fichier de départ pour ASM, qui commence du PIC10F200 à PIC18F8723
Fichier joint :
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
GPIO sur PIC 12F675
Bonjour JJE et tous le monde
Ok pour Marseille, nous irons manger une bouillabaisse.
J'aime bien l'idée du défi, je suis dans le même cas, j'avais commencer il y a longtemps et ça ete un échec. Maintenant avec le forum et les forumeurs qui m'ont super bien aidé, je me régale.
Tu n'as rien d'autre en stock style 16f84 ?
Ok pour Marseille, nous irons manger une bouillabaisse.
J'aime bien l'idée du défi, je suis dans le même cas, j'avais commencer il y a longtemps et ça ete un échec. Maintenant avec le forum et les forumeurs qui m'ont super bien aidé, je me régale.
Tu n'as rien d'autre en stock style 16f84 ?
GPIO sur PIC 12F675
GPIO sur PIC 12F675
Bonjour JJE
Tu écrit dans l'interruption
Goto $+1, du coup tu sautes bcf TOIF donc ton timer0 ne te sert as rien puisque dès que tu sort de l'interruption tu y rerentre direct car le flag n'est pas effacé
De plus dans l'interruption tu appelles la routine inttimer je n'aime pas du tout. Met tout cela dans ta boucle principale qui teste si timer0 a été declanché. Si tu ne comprends pas, nous le ferons ensemble
Tu écrit dans l'interruption
Code : Tout sélectionner
'est une autre interrupt
goto $+1 ; 9
bcf INTCON,T0IF ; 10 effacer flag interrupt timer
movlw TIMER0VAL ; 11
movwf TMR0 ; 12
Goto $+1, du coup tu sautes bcf TOIF donc ton timer0 ne te sert as rien puisque dès que tu sort de l'interruption tu y rerentre direct car le flag n'est pas effacé
De plus dans l'interruption tu appelles la routine inttimer je n'aime pas du tout. Met tout cela dans ta boucle principale qui teste si timer0 a été declanché. Si tu ne comprends pas, nous le ferons ensemble
GPIO sur PIC 12F675
-
adede5000
Débutant- Messages : 62
- Âge : 60
- Enregistré en : août 2017
- Localisation : Sart Saint Laurent (BE)
Bonjour,
J'utilise une routine d'interruption TMR0 que j'ai concoctée pour le 12F675.
Oscillateur interne utilisé.
Prédiviseur du TMR0 à 128
J'utilise une routine d'interruption TMR0 que j'ai concoctée pour le 12F675.
Oscillateur interne utilisé.
Prédiviseur du TMR0 à 128
Code : Tout sélectionner
LIST p=12F675 ; Définition de processeur
#include <p12f675.inc> ; Définitions des constantes
ERRORLEVEL -302 ; suppression du message bank select
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
;*****************************************************************************
; ASSIGNATIONS SYSTEME *
;*****************************************************************************
; REGISTRE OPTION_REG (configuration)
; -----------------------------------
OPTIONVAL EQU B'10000111'
; REGISTRE INTCON (contrôle interruptions standard)
; -------------------------------------------------
INTERRUPT_TMR0 EQU B'10100000' ; interruption TMR0 activée
; REGISTRE ANSEL (sélection analogique/numérique)
; ------------------------------------------------------------------------------
ANSELVAL EQU B'00000000'
; REGISTRE ADCON0 (controle l'ADC)
; --------------------------------------------------------
ADCON0VAL EQU B'00000000'
; DIRECTION DU PORT I/O
; ----------------------------------------
DIRGP EQU B'00000000'
;*****************************************************************************
; ASSIGNATIONS PROGRAMME *
;*****************************************************************************
; REGISTRE OSCCAL (calibration oscillateur)
; ------------------------------------------------------------------
OSCCALVAL EQU B'10000000' ; Calibration de l'oscillateur interne
; REGISTRE INTCON (contrôle interruptions standard)
; -------------------------------------------------
INTERRUPT_TMR0 EQU B'10100000' ; interruption TMR0 activée
;****************************************************
; MACROS *
;****************************************************
BANK0 macro ; passer en banque0
bcf STATUS,RP0
endm
BANK1 macro ; passer en banque1
bsf STATUS,RP0
endm
;*****************************************************************************
; VARIABLES ZONE COMMUNE *
;*****************************************************************************
; Zone de 64 bytes
; ----------------
CBLOCK 0x020 ; Début de la zone variables
w_temp :1
status_temp :1
time_1_sec :1
ENDC
;*****************************************************************************
; DEMARRAGE SUR RESET *
;*****************************************************************************
org 0x000 ; Adresse de départ après reset
goto init ; Initialiser
;**********************************************************************
; ROUTINE D'INTERRUPTION TMR0 *
;**********************************************************************
;sauvegarder registres
;---------------------
org 0x004 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
; interruption TMR0
;------------------
decfsz time_1_sec,f
goto restorereg
movlw D'16'
movwf time_1_sec
movlw B'00100000'
xorwf GPIO,f
;restaurer registres
;-------------------
restorereg
swapf status_temp,w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_temp,f ; inversion L et H de l'ancien W
; sans modifier Z
swapf w_temp,w ; réinversion de L et H dans W
; W restauré sans modifier status
bcf INTCON,T0IF ; effacer flag TMR0
retfie ; retour d'interruption
;*****************************************************************************
; INITIALISATIONS *
;*****************************************************************************
init
; initialisation PORTS (banque 0 et 1)
; ----------------------------------------------------
BANK0 ; sélectionner banque0
clrf GPIO ; Sorties PORT à 0
BANK1 ; Passer en banque1
movlw DIRGP ; Direction du port GPIO
movwf TRISIO ; Ecriture dans registre direction
; Registre d'options (banque 1)
; -----------------------------
movlw OPTIONVAL ; Charger masque
movwf OPTION_REG ; Initialiser registre option
; Registre ANSEL (banque 1)
; -------------------------
movlw ANSELVAL ; Charger masque
movwf ANSEL ; Initialiser registre ANSEL
; Registre OSCCAL (banque 1)
; --------------------------
movlw OSCCALVAL ; charger la valeur
movwf OSCCAL ; pour calibrer l'oscillateur interne
; Registre ADCON0 (banque 0)
; --------------------------
BANK0 ; sélectionner banque 0
movlw ADCON0VAL ; charger masque
movwf ADCON0 ; initialiser registre ADCON0
; Registre INTCON (banque 0)
;---------------------------
movlw INTERRUPT_TMR0
movwf INTCON
; Effacer RAM banque 0
; ---------------------
movlw 0x20 ; initialisation pointeur
movwf FSR ; d'adressage indirect
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,7 ; tester si fin zone atteinte
goto init1 ; si non, boucler
;*****************************************************************
; PROGRAMME PRINCIPAL *
;*****************************************************************
movlw D'16'
movwf time_1_sec
loop
goto loop
END ; directive fin de programme
Modifié en dernier par adede5000 le mar. 21 nov. 2017 16:04, modifié 1 fois.
GPIO sur PIC 12F675
GPIO sur PIC 12F675
Bonjour JJE, Jérémy, JMarc, adede5000, et tous le forum,
Bonjour adede5000, as tu testé son fonctionnement ?
Personnellement j'évite de me servir des assignations que je trouve utile que dans certains cas, car surchargé un programme
ASM, c'est pas recommandé.
Pour les explication des registre on peu très bien avoir un fichier ou tous est noté dedans, et de ne pas le mettre dans le
programme principal, car ça encombre le programme, qui devient vite illisible.
Faire des commentaires entre chaque instruction, c'est très bien, et ne peu que félicité ce qui le font.
pour l'aide que tu apportes adede5000
A+
Bonjour adede5000, as tu testé son fonctionnement ?
Personnellement j'évite de me servir des assignations que je trouve utile que dans certains cas, car surchargé un programme
ASM, c'est pas recommandé.
Pour les explication des registre on peu très bien avoir un fichier ou tous est noté dedans, et de ne pas le mettre dans le
programme principal, car ça encombre le programme, qui devient vite illisible.
Faire des commentaires entre chaque instruction, c'est très bien, et ne peu que félicité ce qui le font.
pour l'aide que tu apportes adede5000
A+
GPIO sur PIC 12F675
-
adede5000
Débutant- Messages : 62
- Âge : 60
- Enregistré en : août 2017
- Localisation : Sart Saint Laurent (BE)
Bjr Tempx et merci pour les remarques.
Le routine fonctionne parfaitement car elle est utilisée dans une de mes réalisations;le programme ci-présent à été réduit pour ne prendre en compte que la temporisation de 1 seconde.En ce qui concerne les assignations,j'ai pris exemple sur Bigonoff et j'ai gardé cette habitude mais ta remarque est pertinente.Enfin pour les infos des registres,elles m'aident lorsque ma memoire me fait défaut Bien à toi
Le routine fonctionne parfaitement car elle est utilisée dans une de mes réalisations;le programme ci-présent à été réduit pour ne prendre en compte que la temporisation de 1 seconde.En ce qui concerne les assignations,j'ai pris exemple sur Bigonoff et j'ai gardé cette habitude mais ta remarque est pertinente.Enfin pour les infos des registres,elles m'aident lorsque ma memoire me fait défaut Bien à toi
GPIO sur PIC 12F675
Bonsoir adede5000,
J'ai moi aussi apprit par Monsieur Bigonoff, j'ai un grand respect envers lui, c'est vrai qu'il préconise les assignations.
Personnellement depuis que j'écris des programmes j'ai jamais utilisé.
Autant le faire directement dans le registre pour un paramétrage, c'est plus explicite.
Par exemple dans ton code :
ça te fait double travail, ça serait plus simple de faire :
Enfin c'est qu'un point de vue, à toi de voir par la suite
A+
En ce qui concerne les assignations,j'ai pris exemple sur Bigonoff et j'ai gardé cette habitude
J'ai moi aussi apprit par Monsieur Bigonoff, j'ai un grand respect envers lui, c'est vrai qu'il préconise les assignations.
Personnellement depuis que j'écris des programmes j'ai jamais utilisé.
Autant le faire directement dans le registre pour un paramétrage, c'est plus explicite.
Par exemple dans ton code :
Code : Tout sélectionner
OPTIONVAL EQU B'10000111'
movlw OPTIONVAL ; Charger masque
movwf OPTION_REG ; Initialiser registre option
ça te fait double travail, ça serait plus simple de faire :
Code : Tout sélectionner
movlw B'10000111' ; résistance hors service, prédiviseur sur 256
movwf OPTION_REG ; copier W dans le registre OPTION_REG
Enfin c'est qu'un point de vue, à toi de voir par la suite
A+
Modifié en dernier par Temps-x le mer. 22 nov. 2017 00:22, modifié 3 fois.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 120 invités