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

GPIO sur PIC 12F675
JJE
Amateur
Amateur
Messages : 143
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#11 Message par JJE » dim. 19 nov. 2017 16:09 lien vers la Data-Sheet : Cliquez ici

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 :-)
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

GPIO sur PIC 12F675
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 951
Enregistré en : juillet 2016
Localisation : Terre

#12 Message par Temps-x » dim. 19 nov. 2017 17:54 lien vers la Data-Sheet : Cliquez ici

Bonjour JJE, Jérémy, JMarc, et et tous le forum,

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

:bravo: Très bon choix.

Je te joint toutes une liste de fichier de départ pour ASM, qui commence du PIC10F200 à PIC18F8723

Fichier joint :
FichierDépart.zip


A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

GPIO sur PIC 12F675
JMarc
Confirmé
Confirmé
Messages : 516
Enregistré en : août 2016
Localisation : Dans le Sud...

#13 Message par JMarc » dim. 19 nov. 2017 18:02 lien vers la Data-Sheet : Cliquez ici

Bonjour JJE et tous le monde

Ok pour Marseille, nous irons manger une bouillabaisse. :wink:

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
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#14 Message par Jérémy » dim. 19 nov. 2017 18:57 lien vers la Data-Sheet : Cliquez ici

HS : LE forum Fantas-PIC donne plein d'élan aux personnes ayant arrêtés de programmer et je m'en réjouis

Éclatez vous les gars !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

GPIO sur PIC 12F675
JMarc
Confirmé
Confirmé
Messages : 516
Enregistré en : août 2016
Localisation : Dans le Sud...

#15 Message par JMarc » mar. 21 nov. 2017 10:14 lien vers la Data-Sheet : Cliquez ici

Bonjour JJE

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 :cry: 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
Débutant
Messages : 59
Âge : 54
Enregistré en : août 2017
Localisation : Sart Saint Laurent (BE)

#16 Message par adede5000 » mar. 21 nov. 2017 15:01 lien vers la Data-Sheet : Cliquez ici

Bonjour,

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
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#17 Message par Jérémy » mar. 21 nov. 2017 15:18 lien vers la Data-Sheet : Cliquez ici

 ! Message de modération :
Bonjour adede5000,
Il faudrait que tu places ton code dans les balises code prévues à cet effet , ainsi celui ci plus clair .
Lien vers la procédure

Merci à toi :wink:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

GPIO sur PIC 12F675
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 951
Enregistré en : juillet 2016
Localisation : Terre

#18 Message par Temps-x » mar. 21 nov. 2017 16:18 lien vers la Data-Sheet : Cliquez ici

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

Merci ! pour l'aide que tu apportes adede5000

A+
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

GPIO sur PIC 12F675
adede5000
Débutant
Débutant
Messages : 59
Âge : 54
Enregistré en : août 2017
Localisation : Sart Saint Laurent (BE)

#19 Message par adede5000 » mar. 21 nov. 2017 16:53 lien vers la Data-Sheet : Cliquez ici

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 :roll: Bien à toi

GPIO sur PIC 12F675
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 951
Enregistré en : juillet 2016
Localisation : Terre

#20 Message par Temps-x » mar. 21 nov. 2017 21:25 lien vers la Data-Sheet : Cliquez ici

Bonsoir adede5000,

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 :wink:

A+
Modifié en dernier par Temps-x le mer. 22 nov. 2017 00:22, modifié 3 fois.
Quand la souris nargue le chat, c'est que son trou n'est pas loin.


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité