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

debut avec le debuguer
JMarc
Passioné
Passioné
Messages : 493
Enregistré en : août 2016
Localisation : Dans le Sud...

#41 Message par JMarc » mar. 13 sept. 2016 18:06

Bonjour les copains


Je n'ai pas encore abandoné :sifflotte: je cherche toujours :shock:

Lors de la compilation, si je clique dans les lignes d'erreur, le code ci-dessous apparaît mais quel est sont langage ?

Code : Tout sélectionner

# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build
FIXDEPS=fixDeps

.build-conf:  ${BUILD_SUBPROJECTS}
ifneq ($(INFORMATION_MESSAGE), )
    @echo $(
INFORMATION_MESSAGE)
endif
    ${
MAKE}  -f nbproject/Makefile-default.mk dist/${CND_CONF}/${IMAGE_TYPE}/led_tmr0.pjt.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}

MP_PROCESSOR_OPTION=16f877
MP_LINKER_DEBUG_OPTION

# ------------------------------------------------------------------------------------
# Rules for buildStep: assemble
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
${
OBJECTDIR}/_ext/1472/led_tmr0.o: ../led_tmr0.asm  nbproject/Makefile-${CND_CONF}.mk
    
@${MKDIR"${OBJECTDIR}/_ext/1472" 
    
@${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.o.
    
@${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.
    
@${FIXDEPSdummy.-"${OBJECTDIR}/_ext/1472/led_tmr0.err" $(SILENT) -${MP_AS} $(MP_EXTRA_AS_PRE) -d__DEBUG -d__MPLAB_DEBUGGER_SIMULATOR=--p$(MP_PROCESSOR_OPTION)  -l\"${OBJECTDIR}/_ext/1472/led_tmr0.lst\" -e\"${OBJECTDIR}/_ext/1472/led_tmr0.err\" $(ASM_OPTIONS)    -o\"${OBJECTDIR}/_ext/1472/led_tmr0.o\" \"../led_tmr0.asm\" 
    @
${DEP_GEN} -d "${OBJECTDIR}/_ext/1472/led_tmr0.o"
    @
${FIXDEPS} "${OBJECTDIR}/_ext/1472/led_tmr0.o.d" $(SILENT) -rsi ${MP_AS_DIR} -c18 
    
else
${OBJECTDIR}/_ext/1472/led_tmr0.o: ../led_tmr0.asm  nbproject/Makefile-${CND_CONF}.mk
    @
${MKDIR} "${OBJECTDIR}/_ext/1472
    @
${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.o.d 
    @
${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.o 
    @
${FIXDEPS} dummy.d -e "${OBJECTDIR}/_ext/1472/led_tmr0.err" $(SILENT) -c ${MP_AS} $(MP_EXTRA_AS_PRE) -q -p$(MP_PROCESSOR_OPTION)  -l\"${OBJECTDIR}/_ext/1472/led_tmr0.lst\" -e\"${OBJECTDIR}/_ext/1472/led_tmr0.err\" $(ASM_OPTIONS)    -o\"${OBJECTDIR}/_ext/1472/led_tmr0.o\" \"../led_tmr0.asm\" 
    @
${DEP_GEN} -d "${OBJECTDIR}/_ext/1472/led_tmr0.o"
    @
${FIXDEPS} "${OBJECTDIR}/_ext/1472/led_tmr0.o.d" $(SILENT) -rsi ${MP_AS_DIR} -c18 
    
endif

debut avec le debuguer
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#42 Message par Guest » mar. 13 sept. 2016 19:06

bonsoir JMarc

C'est des fichiers, qui servent a la compilation .Le fichier makefile en autre qui fait la 1er passe de la compilation .Donc le fameux fichier objet .
il serait bien que tu nous donnes le resultat de la construction, le BUILD LOAD. Pour que l'on puisse t'aider, a moins que tu préfères chercher tout seul, ce qui est bien aussi

A+

PS dans la rubrique réalisation. J'ai posté la finalité de cette réalisation .Tu peux jeter un œil sur le code :wink:

debut avec le debuguer
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#43 Message par Guest » ven. 16 sept. 2016 20:07

bonsoir JMarc

tu en es ou avec cette LED et ton timer0? Et oui je sais :sifflotte:

debut avec le debuguer
JMarc
Passioné
Passioné
Messages : 493
Enregistré en : août 2016
Localisation : Dans le Sud...

#44 Message par JMarc » sam. 17 sept. 2016 07:30

Bonjour Maï

Les source au j'utilise sont foireuses. :sifflotte: En plus j'ai voulu les transformer d'un 16f84 vers un 16f877 comme expliqué par bigonoof et je me suis perdu :mur:

Mais tous cela est très bénéfique car j'essai de comprendre l'asm et le debuger.

Jean-Marc,

debut avec le debuguer
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#45 Message par Guest » sam. 17 sept. 2016 12:16

bonjour Jmarc

JMarc a écrit :Bonjour Maï

Les source au j'utilise sont foireuses. :sifflotte: En plus j'ai voulu les transformer d'un 16f84 vers un 16f877 comme expliqué par bigonoof et je me suis perdu :mur:

Mais tous cela est très bénéfique car j'essai de comprendre l'asm et le debuger.

Jean-Marc,


Pas Bon de faire du copier coller, le mieux, c'est de prendre modèle ,prendre la logique et de retaper suivant le pic, suivant son projet, avec l'aide de ls DS son propre style

Tiens a mes tout début sur Fantas-pic,j'avais proposé cela viewtopic.php?f=16&t=87 tu peux tirer le masque et le remplir suivant TES besoins

Bien sur le plaisir de te lire

et A+

debut avec le debuguer
JMarc
Passioné
Passioné
Messages : 493
Enregistré en : août 2016
Localisation : Dans le Sud...

#46 Message par JMarc » mar. 20 sept. 2016 08:33

Bonjour Maï

Merci pour tes reponses rapides.

Pour le fichier de base (modele) c'est celui du part2 de bigonoff
Ensuite je fais des copiers collé en essayant de coller au bon endroit mais malgré cela j'ai toujours un code erreur a la compil et quand j'ai plus d'erreur, je me suis tellement perdu dans les modifs :cry:

voici ci joint le nouveau fichier d'où je repars de 0. c'est un compteur pour afficheur 7 segments

Code : Tout sélectionner

;*****************************************************************************
;
   Ce fichier est la base de départ pour une programmation avec             *
;
   le PIC 16F877. Il contient  les informations de  base pour               *
;
   démarrer.                                                                *  
;                                                                            *
;*****************************************************************************
;
                                                                            *
;
    NOM:     JMarc                                                               *
;
    Date:    20/9/2016                                                               *
;
    Version: 1                                                               *
;
    Circuit:                                                                *
;
    Auteur:   Bigonoff pour la base                                                              *
;
              tavernier pour le prog modifié par JMarc                                                              *
;*****************************************************************************
;
                                                                            *
;
    Fichier requis: P16F877.inc                                             *
;
                                                                            *
;
                                                                            *
;
                                                                            *
;*****************************************************************************
;
                                                                            *
;
    Notes:    essai de programmation pour afficheur 7 segments                                                              *
;
                                                                            *
;
                                                                            *
;
                                                                            *
;
                                                                            *
;*****************************************************************************


    LIST      p=16F877            ; Définition de processeur
    
#include <p16F877.inc>        ; fichier include
    radix dec                      ; on travaille en décimal par défaut

    __CONFIG   _CP_OFF 
& _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _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.
;
 Choisir une valeur par groupe.
;
 Voici les valeurs et leurs définitions :

;
 Protection du programme
; -----------------------
;
_CP_ALL        protection totale
;_CP_HALF        protection de 1000 à 1FFF
;_CP_UPPER_256        protection de 1F00 à 1FFF
;_CP_OFF        Pas de protection

; Debuggage
; ---------
;
_DEBUG_ON        RB6 et RB7 utilisées pour debugger
;_DEBUG_OFF        RB6 et RB7 en utilisation normale

; Accès à la flash programme
; --------------------------

;
_WRT_ENABLE_ON        Le programme peut écrire dans la flash
;_WRT_ENABLE_OFF    Le programme ne peut pas écrire dans la flash

; Protection de la EEprom
; -----------------------

;
_CPD_ON        Mémoire EEprom protégée
;_CPD_OFF               Mémoire EEprom déprotégée

; Programmation sur circuit
; -------------------------

;
_LVP_ON        RB3 permet la programmation série de la PIC
;_LVP_OFF        RB3 en utilisation normale

; Reset de la PIC si tension <4V
; ------------------------------
;
 _BODEN_ON        Reset tension en service
;            Valide PWRTE_ON automatiquement
; _BODEN_OFF        Reset tension hors service

; Retard à la mise sous tension
; -----------------------------

;
_PWRTE_OFF        Démarrage rapide
;_PWRTE_ON        Démarrage temporisé

; Watchdog
; --------

;
_WDT_ON        Watchdog en service
;_WDT_OFF        Watchdog hors service

; Oscillateur
; -----------
;
_LP_OSC        Oscillateur basse vitesse (32<F<200Khz)
;
_XT_OSC        Oscilateur moyenne vitesse (200Khz<F<4Mhz)
;
_HS_OSC        Oscillateur haute vitesse (4Mhz<F<20Mhz)
;
_RC_OSC        Oscillateur à réseau RC

;*****************************************************************************
;
                               ASSIGNATIONS SYSTEME                         *
;*****************************************************************************

;
 REGISTRE OPTION_REG (configuration)
;
 -----------------------------------
OPTIONVAL    EQU    B'10000111'
            ; RBPU     b7 : 1= Résistance rappel +5V hors service
            
; INTEDG   b6 : 1= Interrupt sur flanc montant de RB0
            
;               0= Interrupt sur flanc descend. de RB0
            
; TOCS      b5 : 1= source clock = transition sur RA4
            
;                0= horloge interne
            
; TOSE      b4 : 1= Sélection flanc montant RA4(si B5=1)
            ;                0= Sélection flanc descendant RA4
            
; PSA       b3 : 1= Assignation prédiviseur sur Watchdog
            
;                0= Assignation prédiviseur sur Tmr0
            
; PS2/PS0   b2/b0 valeur du prédiviseur
                        
;           000 =  1/(watchdog) ou 1/(tmr0)
            ;           001 =  1/2               1/4
            
;           010 =  1/4             1/8
            
;           011 =  1/8             1/16
            
;           100 =  1/16             1/32
            
;           101 =  1/32             1/64
            
;           110 =  1/64             1/128
            
;           111 =  1/128         1/256


; REGISTRE INTCON (contrôle interruptions standard)
;
 -------------------------------------------------
INTCONVAL    EQU    B'00100000'
            ; GIE       b7 : masque autorisation générale interrupt
                        
;                ne pas mettre ce bit à 1 ici
                        
;                sera mis en temps utile
            
; PEIE      b6 : masque autorisation générale périphériques
            
; T0IE      b5 : masque interruption tmr0
            
; INTE      b4 : masque interuption RB0/Int
            
; RBIE      b3 : masque interruption RB4/RB7
            
; T0IF      b2 : flag tmr0
            
; INTF      b1 : flag RB0/Int
            
; RBIF      b0 : flag interruption RB4/RB7

; REGISTRE PIE1 (contrôle interruptions périphériques)
;
 ----------------------------------------------------
PIE1VAL        EQU    B'00000000'
            ; PSPIE     b7 : Toujours 0 sur PIC 16F786
            
; ADIE      b6 : masque interrupt convertisseur A/D
            
; RCIE      b5 : masque interrupt réception USART
            
; TXIE      b4 : masque interrupt transmission USART
            
; SSPIE     b3 : masque interrupt port série synchrone
            
; CCP1IE    b2 : masque interrupt CCP1
            
; TMR2IE    b1 : masque interrupt TMR2 = PR2
            
; TMR1IE    b0 : masque interrupt débordement tmr1

; REGISTRE PIE2 (contrôle interruptions particulières)
;
 ----------------------------------------------------
PIE2VAL        EQU    B'00000000'
            ; UNUSED    b7 : inutilisé, laisser à 0
            
; RESERVED  b6 : réservé, laisser à 0
            
; UNUSED    b5 : inutilisé, laisser à 0
            
; EEIE      b4 : masque interrupt écriture EEPROM
            
; BCLIE     b3 : masque interrupt collision bus
            
; UNUSED    b2 : inutilisé, laisser à 0
            
; UNUSED    b1 : inutilisé, laisser à 0
            
; CCP2IE    b0 : masque interrupt CCP2

; REGISTRE ADCON1 (ANALOGIQUE/DIGITAL)
;
 ------------------------------------
ADCON1VAL    EQU    B'00000110' ; PORTA en mode digital

; DIRECTION DES PORTS I/O
; -----------------------

DIRPORTA    EQU    B'00000000'    ; Direction PORTA (1=entrée)
DIRPORTB    EQU    B'00000000'    ; Direction PORTB
DIRPORTC    EQU    B
'11111111'    ; Direction PORTC
DIRPORTD    EQU    B
'11111111'    ; Direction PORTD
DIRPORTE    EQU    B
'00000111'    ; Direction PORTE


;*****************************************************************************
;
                           ASSIGNATIONS PROGRAMME                           *
;*****************************************************************************

;
 exemple
; -------
MASQUE        EQU    H'00FF'


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

;
 exemple
; -------
#DEFINE LED1    PORTB,1        ; LED de sortie 1

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

BANK0    macro                ; passer en banque0
        bcf    STATUS
,RP0
        bcf    STATUS
,RP1
    endm

BANK1    macro                
; passer en banque1
        bsf    STATUS
,RP0
        bcf    STATUS
,RP1
    endm

BANK2    macro                
; passer en banque2
        bcf    STATUS
,RP0
        bsf    STATUS
,RP1
    endm

BANK3    macro                
; passer en banque3
        bsf    STATUS
,RP0
        bsf    STATUS
,RP1
    endm


            
; Sauts inter-pages
            
; -----------------

GOTOX    macro    ADRESSE            ; saut inter-page
    local BIT4 
= (ADRESSE & 0x1000)    ; voir bit 12
    local BIT3 
= (ADRESSE & 0x0800) ; voir bit 11
    local    ICI            
; adresse courante
ICI
    local PICI 
= (ICI+& 0x1800)    ; page du saut
    IF BIT3                
; si page 1 ou 3
    bsf    PCLATH 
, 3        ; b3 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 3        ; b3 de PCLATH = 0
    ENDIF
    IF BIT4                
; si page 2 ou 3
    bsf    PCLATH 
, 4        ; b4 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 4        ; b4 de PCLATH = 0
    ENDIF
    goto 
(ADRESSE & 0x7FF | PICI)    ; adresse simulée
    endm


PCLAX    macro    ADRESSE            
; positionne PCLATH pour
                    
; les sauts sans le saut
    local BIT4 
= (ADRESSE & 0x1000)    ; voir bit 12
    local BIT3 
= (ADRESSE & 0x0800) ; voir bit 11

    IF BIT3                
; si page 1 ou 3
    bsf    PCLATH 
, 3        ; b3 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 3        ; b3 de PCLATH = 0
    ENDIF
    IF BIT4                
; si page 2 ou 3
    bsf    PCLATH 
, 4        ; b4 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 4        ; b4 de PCLATH = 0
    ENDIF
    endm

GOTSX    macro    ADRESSE            
; saut inter-page sans
                    
; sélection de PCLATH
    local    ICI            
; adresse courante
    local PICI 
= (ICI & 0x1800)    ; page du saut
ICI
    goto 
(ADRESSE & 0x7FF | PICI)    ; adresse simulée
    endm

            
; Sous-routines inter-pages
            
; -------------------------

CALLX    macro    ADRESSE            ; call inter-page
    local BIT4 
= (ADRESSE & 0x1000)    ; voir bit 12
    local BIT3 
= (ADRESSE & 0x0800) ; voir bit 11
    local    ICI            
; adresse courante
ICI
    local PICI 
= (ICI+& 0x1800)    ; page du saut
    IF BIT3                
; si page 1 ou 3
    bsf    PCLATH 
, 3        ; b3 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 3        ; b3 de PCLATH = 0
    ENDIF
    IF BIT4                
; si page 2 ou 3
    bsf    PCLATH 
, 4        ; b4 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 4        ; b4 de PCLATH = 0
    ENDIF
    call 
(ADRESSE & 0x7FF | PICI)    ; adresse simulée
    local BIT4 
= ((ICI+5) & 0x1000)    ; voir bit 12
    local BIT3 
= ((ICI+5) & 0x0800)    ; voir bit 11
    IF BIT3                
; si page 1 ou 3
    bsf    PCLATH 
, 3        ; b3 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 3        ; b3 de PCLATH = 0
    ENDIF
    IF BIT4                
; si page 2 ou 3
    bsf    PCLATH 
, 4        ; b4 de PCLATH = 1
    ELSE                
; sinon
    bcf    PCLATH 
, 4        ; b4 de PCLATH = 0
    ENDIF
    endm


CALLSX    macro    ADRESSE            
; sous-routine inter-page sans
                    
; sélection de PCLATH
    local    ICI            
; adresse courante
    local PICI 
= (ICI & 0x1800)    ; page du saut
ICI
    call 
(ADRESSE & 0x7FF | PICI)    ; adresse simulée
    endm

            
; Sous-routines eeprom
            
; --------------------
REEPROM macro                ; lire eeprom(adresse & résultat en w)
        clrwdt            ; reset watchdog
        bcf    STATUS
,RP0    ; passer en banque2
        bsf    STATUS
,RP1
        movwf    EEADR        
; pointer sur adresse eeprom
        bsf    STATUS
,RP0    ; passer en banque3
        bcf    EECON1
,EEPGD    ; pointer sur eeprom
        bsf    EECON1
,RD    ; ordre de lecture
        bcf    STATUS
,RP0    ; passer en banque2
        movf    EEDATA
,w    ; charger valeur lue
        bcf    STATUS
,RP1    ; passer en banque0
    endm

WEEPROM    macro    addwrite    
; la donnée se trouve dans W
    LOCAL    loop
    bcf    STATUS
,RP0    ; passer en banque2
    bsf    STATUS
,RP1
    movwf    EEDATA        
; placer data dans registre
    movlw    addwrite    
; charger adresse d'écriture
    movwf    EEADR        ; placer dans registre
    bsf    STATUS,RP0    ; passer en banque3
    bcf    EECON1 , EEPGD    ; pointer sur mémoire data
    bsf    EECON1 , WREN    ; autoriser accès écriture
    bcf    INTCON , GIE    ; interdire interruptions
    movlw    0x55        ; charger 0x55
    movwf    EECON2        ; envoyer commande
    movlw    0xAA        ; charger 0xAA
    movwf    EECON2        ; envoyer commande
    bsf    EECON1 , WR    ; lancer cycle d'
écriture
    bsf    INTCON 
, GIE    ; réautoriser interruptions
loop
    clrwdt                
; effacer watchdog
    btfsc    EECON1 
, WR    ; tester si écriture terminée
    goto    loop        
; non, attendre
    bcf    EECON1 
, WREN    ; verrouiller prochaine écriture
    bcf    STATUS 
, RP0    ; passer en banque0
    bcf    STATUS 
, RP1
    endm

;*****************************************************************************
;
                        VARIABLES BANQUE 0                                  *
;*****************************************************************************

;
 Zone de 80 bytes
; ----------------

    CBLOCK    0x20        ; Début de la zone (0x20 à 0x6F)
        TempC   : 1        ;equ     0x0c            ; Registres temporaires … usage g‚n‚ral
        Count   
: 1        ;equ     0x0f            ; Compteur
        MsdTime 
: 1        ;equ     0x10            ; MSD du timer
        LsdTime 
: 1        ;equ     0x11            ; LSD du timer
        OptionReg 
: 1   ;   1
        PCL1     
: 1     ;equ     2
        BcdMsd  
: 1        ;equ     26
        Bcd   
: 1        ;  equ     27 
;Exemples
;--------
    test :1            ; Zone de 1 byte
    table 
: 10        ; zone de 10 bytes

        ENDC            
; Fin de la zone                        

var1     EQU H
'006E'        ; adresse imposée

;*****************************************************************************
;
                      VARIABLES ZONE COMMUNE                                *
;*****************************************************************************

;
 Zone de 16 bytes
; ----------------

    CBLOCK 0x70        ; Début de la zone (0x70 à 0x7F)
    w_temp : 1        ; Sauvegarde registre W
    status_temp 
: 1        ; sauvegarde registre STATUS
    FSR_temp 
: 1        ; sauvegarde FSR (si indirect en interrupt)
    PCLATH_temp : 1        ; sauvegarde PCLATH (si prog>2K)

    ENDC

;*****************************************************************************
;
                        VARIABLES BANQUE 1                                  *
;*****************************************************************************

;
 Zone de 80 bytes
; ----------------

    CBLOCK    0xA0        ; Début de la zone (0xA0 à 0xEF)

    ENDC            ; Fin de la zone                        

;*****************************************************************************
;
                        VARIABLES BANQUE 2                                  *
;*****************************************************************************

;
 Zone de 96 bytes
; ----------------

    CBLOCK    0x110        ; Début de la zone (0x110 à 0x16F)

    ENDC            ; Fin de la zone                        

;*****************************************************************************
;
                        VARIABLES BANQUE 3                                  *
;*****************************************************************************

;
 Zone de 96 bytes
; ----------------

    CBLOCK    0x190        ; Début de la zone (0x190 à 0x1EF)

    ENDC            ; Fin de la zone                        

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

    org 0x000         ; Adresse de départ après reset
    clrf    PCLATH          
; Effacer sélecteur de pages
      goto    init        
; Initialiser

; ////////////////////////////////////////////////////////////////////////////

;                         I N T E R R U P T I O N S

; ////////////////////////////////////////////////////////////////////////////

;*****************************************************************************
;
                     ROUTINE INTERRUPTION                                   *
;*****************************************************************************
;-----------------------------------------------------------------------------
;
 Si on n'utilise pas l'adressage indirect dans les interrupts, on se passera
; de sauvegarder FSR
; Si le programme ne fait pas plus de 2K, on se passera de la gestion de 
; PCLATH
;-----------------------------------------------------------------------------
            ;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é
    movf    FSR , w        ; charger FSR
    movwf    FSR_temp    ; sauvegarder FSR
    movf    PCLATH , w    ; charger PCLATH
    movwf    PCLATH_temp    ; le sauver
    clrf    PCLATH        ; on est en page 0
    BANK0            ; passer en banque0

            ; switch vers différentes interrupts
            ; inverser ordre pour modifier priorités
            ; mais attention alors au test PEIE
            ; effacer les inutiles
            ;----------------------------------------
    
            ; Interruption TMR0
            ; -----------------

    btfsc    INTCON,T0IE    ; tester si interrupt timer autorisée
    btfss    INTCON,T0IF    ; oui, tester si interrupt timer en cours
    goto     intsw1        ; non test suivant
    call    inttmr0        ; oui, traiter interrupt tmr0
    bcf    INTCON,T0IF    ; effacer flag interrupt tmr0
    goto    restorereg    ; et fin d'
interruption
                
; SUPPRIMER CETTE LIGNE POUR
                
; TRAITER PLUSIEURS INTERRUPT
                
; EN 1 SEULE FOIS

            
; Interruption RB0/INT
            
; --------------------
intsw1
    btfsc    INTCON
,INTE    ; tester si interrupt RB0 autorisée
    btfss    INTCON
,INTF    ; oui, tester si interrupt RB0 en cours
    goto     intsw2        
; non sauter au test suivant
    call    intrb0        
; oui, traiter interrupt RB0
    bcf    INTCON
,INTF    ; effacer flag interupt RB0
    goto    restorereg    
; et fin d'interruption
                ; SUPPRIMER CETTE LIGNE POUR
                ; TRAITER PLUSIEURS INTERRUPT
                ; EN 1 SEULE FOIS

            ; interruption RB4/RB7
            ; --------------------
intsw2
    btfsc    INTCON,RBIE    ; tester si interrupt RB4/7 autorisée
    btfss    INTCON,RBIF    ; oui, tester si interrupt RB4/7 en cours
    goto     intsw3        ; non sauter
    call    intrb4        ; oui, traiter interrupt RB4/7
    bcf    INTCON,RBIF    ; effacer flag interupt RB4/7
    goto    restorereg    ; et fin d'
interrupt

            
; détection interruptions périphériques
            
; le test peut être supprimé si une seule
            
; interrupt est traitée à la fois
            
; --------------------------------------
intsw3
    btfss    INTCON
,PEIE    ; tester interruption périphérique autorisée
    goto    restorereg    
; non, fin d'interruption

            ; Interruption convertisseur A/D
            ; ------------------------------

    bsf    STATUS,RP0    ; sélectionner banque1
    btfss    PIE1,ADIE    ; tester si interrupt autorisée
    goto     intsw4        ; non sauter
    bcf    STATUS,RP0    ; oui, sélectionner banque0
    btfss    PIR1,ADIF    ; tester si interrupt en cours
    goto     intsw4        ; non sauter
    call    intad        ; oui, traiter interrupt
    bcf    PIR1,ADIF    ; effacer flag interupt 
    goto    restorereg    ; et fin d'
interrupt

            
; Interruption réception USART
            
; ----------------------------
intsw4
    bsf    STATUS
,RP0    ; sélectionner banque1
    btfss    PIE1
,RCIE    ; tester si interrupt autorisée
    goto     intsw5        
; non sauter
    bcf    STATUS
,RP0    ; oui, sélectionner banque0
    btfss    PIR1
,RCIF    ; oui, tester si interrupt en cours
    goto     intsw5        
; non sauter
    call    intrc        
; oui, traiter interrupt
                
; LE FLAG NE DOIT PAS ETRE REMIS A 0
                
; C'EST LA LECTURE DE RCREG QUI LE PROVOQUE
    goto    restorereg    ; et fin d'
interrupt

            
; Interruption transmission USART
            
; -------------------------------
intsw5
    bsf    STATUS
,RP0    ; sélectionner banque1
    btfss    PIE1
,TXIE    ; tester si interrupt autorisée
    goto     intsw6        
; non sauter
    bcf    STATUS
,RP0    ; oui, sélectionner banque0
    btfss    PIR1
,TXIF    ; oui, tester si interrupt en cours
    goto     intsw6        
; non sauter
    call    inttx        
; oui, traiter interrupt
                
; LE FLAG NE DOIT PAS ETRE REMIS A 0
                
; C'EST L'ECRITURE DE TXREG QUI LE PROVOQUE
    goto    restorereg    
; et fin d'interrupt

            ; Interruption SSP
            ; ----------------
intsw6
    bsf    STATUS,RP0    ; sélectionner banque1
    btfss    PIE1,SSPIE    ; tester si interrupt autorisée
    goto     intsw7        ; non sauter
    bcf    STATUS,RP0    ; oui, sélectionner banque0
    btfss    PIR1,SSPIF    ; oui, tester si interrupt en cours
    goto     intsw7        ; non sauter
    call    intssp        ; oui, traiter interrupt
    bcf    PIR1,SSPIF    ; effacer flag interupt 
    goto    restorereg    ; et fin d'
interrupt

            
; Interruption CCP1
            
; -----------------
intsw7
    bsf    STATUS
,RP0    ; sélectionner banque1
    btfss    PIE1
,CCP1IE    ; tester si interrupt autorisée
    goto     intsw8        
; non sauter
    bcf    STATUS
,RP0    ; oui, sélectionner banque0
    btfss    PIR1
,CCP1IF    ; oui, tester si interrupt en cours
    goto     intsw8        
; non sauter
    call    intccp1        
; oui, traiter interrupt
    bcf    PIR1
,CCP1IF    ; effacer flag interupt 
    goto    restorereg    
; et fin d'interrupt


            ; Interruption TMR2
            ; -----------------
intsw8
    bsf    STATUS,RP0    ; sélectionner banque1
    btfss    PIE1,TMR2IE    ; tester si interrupt autorisée
    goto     intsw9        ; non sauter
    bcf    STATUS,RP0    ; oui, sélectionner banque0
    btfss    PIR1,TMR2IF    ; oui, tester si interrupt en cours
    goto     intsw9        ; non sauter
    call    inttmr2        ; oui, traiter interrupt
    bcf    PIR1,TMR2IF    ; effacer flag interupt 
    goto    restorereg    ; et fin d'
interrupt

            
; Interruption TMR1
            
; -----------------
intsw9
    bsf    STATUS
,RP0    ; sélectionner banque1
    btfss    PIE1
,TMR1IE    ; tester si interrupt autorisée
    goto     intswA        
; non sauter
    bcf    STATUS
,RP0    ; oui, sélectionner banque0
    btfss    PIR1
,TMR1IF    ; oui, tester si interrupt en cours
    goto     intswA        
; non sauter
    call    inttmr1        
; oui, traiter interrupt
    bcf    PIR1
,TMR1IF    ; effacer flag interupt 
    goto    restorereg    
; et fin d'interrupt

            ; Interruption EEPROM
            ; -------------------
intswA
    bsf    STATUS,RP0    ; sélectionner banque1
    btfss    PIE2,EEIE    ; tester si interrupt autorisée
    goto     intswB        ; non sauter
    bcf    STATUS,RP0    ; oui, sélectionner banque0
    btfss    PIR2,EEIF    ; oui, tester si interrupt en cours
    goto     intswB        ; non sauter
    call    inteprom    ; oui, traiter interrupt
    bcf    PIR2,EEIF    ; effacer flag interupt 
    goto    restorereg    ; et fin d'
interrupt

            
; Interruption COLLISION
            
; ----------------------
intswB
    bsf    STATUS
,RP0    ; sélectionner banque1
    btfss    PIE2
,BCLIE    ; tester si interrupt autorisée
    goto     intswC        
; non sauter
    bcf    STATUS
,RP0    ; oui, sélectionner banque0
    btfss    PIR2
,BCLIF    ; oui, tester si interrupt en cours
    goto     intswC        
; non sauter
    call    intbc        
; oui, traiter interrupt
    bcf    PIR2
,BCLIF    ; effacer flag interupt 
    goto    restorereg    
; et fin d'interrupt

            ; interruption CCP2
            ; -----------------
intswC
    bsf    STATUS,RP0    ; sélectionner banque1
    btfss    PIE2,CCP2IE    ; tester si interrupt autorisée
    goto     intswD        ; non sauter
    bcf    STATUS,RP0    ; oui, sélectionner banque0
    btfss    PIR2,CCP2IF    ; oui, tester si interrupt en cours
    goto     intswD        ; non sauter
    call    intccp2        ; oui, traiter interrupt
    bcf    PIR2,CCP2IF    ; effacer flag interupt 
    goto    restorereg    ; et fin d'
interrupt

            
; interruption PSP
            
; ----------------
intswD
    bcf    STATUS
,RP0    ; oui, sélectionner banque0
    call    intpsp        
; traiter interrupt
    bcf    PIR1
,PSPIF    ; effacer flag interupt 

            
;restaurer registres
            
;-------------------
restorereg
    movf    PCLATH_temp 
, w    ; recharger ancien PCLATH
    movwf    PCLATH        
; le restaurer
    movf    FSR_temp 
, w    ; charger FSR sauvé
    movwf    FSR        
; restaurer FSR
    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
    retfie          ; return from interrupt

;*****************************************************************************
;                        INTERRUPTION TIMER 0                                *
;*****************************************************************************
inttmr0
    
    
    goto ServiceRTCC
    
    
    
    return            ; fin d'
interruption timer
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                        INTERRUPTION RB0/INT                                *
;*****************************************************************************
intrb0
    return            ; fin d'
interruption RB0/INT
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                         INTERRUPTION RB4/RB7                               *
;*****************************************************************************
intrb4
    movf PORTB,w        ; indispensable pour pouvoir resetter RBIF
    return            ; fin d'
interruption RB4/RB7
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                     INTERRUPTION CONVERTISSEUR A/D                         *
;*****************************************************************************
intad
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                     INTERRUPTION RECEPTION USART                           *
;*****************************************************************************
intrc
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                     INTERRUPTION TRANSMISSION USART                        *
;*****************************************************************************
inttx
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                       INTERRUPTION SSP                                     *
;*****************************************************************************
intssp
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                       INTERRUPTION CCP1                                    *
;*****************************************************************************
intccp1
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                     INTERRUPTION TIMER 2                                   *
;*****************************************************************************
inttmr2
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                     INTERRUPTION TIMER 1                                   *
;*****************************************************************************
inttmr1
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                     INTERRUPTION EEPROM                                    *
;*****************************************************************************
inteprom
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                     INTERRUPTION COLLISION                                 *
;*****************************************************************************
intbc
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur

;*****************************************************************************
;                        INTERRUPTION CCP2                                   *
;*****************************************************************************
intccp2
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur


;*****************************************************************************
;                        INTERRUPTION PSP                                    *
;*****************************************************************************
intpsp
    return            ; fin d'
interruption
                
; peut être remplacé par 
                
; retlw pour retour code d'erreur


; ////////////////////////////////////////////////////////////////////////////

;                           P R O G R A M M E

; ////////////////////////////////////////////////////////////////////////////

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

init

            ; initialisation PORTS (banque 0 et 1)
            ; ------------------------------------
    BANK0            ; sélectionner banque0
    clrf    PORTA        ; Sorties PORTA à 0
    clrf    PORTB        ; sorties PORTB à 0
    clrf    PORTC        ; sorties PORTC à 0
    clrf    PORTD        ; sorties PORTD à 0
    clrf    PORTE        ; sorties PORTE à 0
    bsf    STATUS,RP0    ; passer en banque1
    movlw    ADCON1VAL    ; PORTA en mode digital/analogique
    movwf    ADCON1        ; écriture dans contrôle A/D
    movlw    DIRPORTA    ; Direction PORTA
    movwf    TRISA        ; écriture dans registre direction
    movlw    DIRPORTB    ; Direction PORTB
    movwf    TRISB        ; écriture dans registre direction
    movlw    DIRPORTC    ; Direction PORTC
    movwf    TRISC        ; écriture dans registre direction
    movlw    DIRPORTD    ; Direction PORTD
    movwf    TRISD        ; écriture dans registre direction
    movlw    DIRPORTE    ; Direction PORTE
    movwf    TRISE        ; écriture dans registre direction

            ; Registre d'
options (banque 1)
            ; -----------------------------
    movlw    OPTIONVAL    ; charger masque
    movwf    OPTION_REG    
; initialiser registre option

            
; registres interruptions (banque 1)
            ; ----------------------------------
    movlw    INTCONVAL    ; charger valeur registre interruption
    movwf    INTCON        
; initialiser interruptions
    movlw    PIE1VAL        
; Initialiser registre 
    movwf    PIE1        
; interruptions périphériques 1
    movlw    PIE2VAL        
; initialiser registre
    movwf    PIE2        
; interruptions périphériques 2

            
; Effacer RAM banque 0
            
; ---------------------
    bcf    STATUS,RP0    ; sélectionner 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 (>7F)
    goto    init1        ; non, boucler

            ; autoriser interruptions (banque 0)
            ; ----------------------------------
    clrf    PIR1        ; effacer flags 1
    clrf    PIR2        ; effacer flags 2
    bsf    INTCON,GIE    ; valider interruptions

    clrf    MsdTime                 ; raz timers           J'
ai modifié ici
    clrf    LsdTime                 
;       /
    movlw   .96                     ; pr‚chargement RTCC        
    movwf   TMR0 
;RTCC                    ; d‚part comptage
    
    
    
    
    goto    start        
; programme principal


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

    
    
    
ServiceRTCC
    movlw   .96                     
; initialisation RTCC
    movwf   TMR0
    bcf     INTCON
,T0IF             ; raz drapeau d'it          Bit2
    call    IncTimer                ; incr‚mentation timer
    call    UpdateDisplay           ; mise … jour affichage
    retfie
;
;L'
affichage est augment‚ de un toutes les 200 x 5 ms
;
IncTimer
    incf    Count
,w                 ; incr‚mentation de count
    xorlw   .200                    
; = 200?
    btfsc   STATUS,Z                ; non, alors saut 
    goto    DoIncTime               
; oui, incr‚mentation de time
    incf    Count
    return
DoIncTime
    clrf    Count                   
; raz de count
    incf    LsdTime
,w               ; lecture Lsd
    andlw   0x0F                    
; masque quartet haut
    xorlw   0x0a                    
; = 10?
    btfsc   STATUS,Z                ; non alors saut
    goto    IncSecondLsd            
; incr‚mentation Lsd suivant
    incf    LsdTime                 
; incr‚mentation timer
    return
IncSecondLsd
    swapf   LsdTime
,w
    andlw   0x0F                    
; masque quartet haut
    addlw   1                       
; incr‚mentation
    movwf   LsdTime
    swapf   LsdTime
    xorlw   0x0a                    
; = 10?
    btfsc   STATUS,Z                ; non alors saut
    goto    IncThirdLsd             
; incr‚mentation Lsd suivant
    return                          
IncThirdLsd
    clrf    LsdTime
    incf    MsdTime
,w               ; lecture 3Šme Lsd
    andlw   0x0F                    
; masque quartet haut
    xorlw   0x0a                    
; = 10?
    btfsc   STATUS,Z                ; non alors saut
    goto    IncMsd                  
; oui alors Msd
    incf    MsdTime                 
; incr‚mentation timer
    return
IncMsd
    swapf   MsdTime
,w
    andlw   0x0F                    
; masque quartet haut
    addlw   1                       
; incr‚mentation timer
    movwf   MsdTime
    swapf   MsdTime
    xorlw   0x0a                    
; = 10?
    btfsc   STATUS,Z                ; non alors saut
    clrf    MsdTime                 
; raz Msd
    return
;
;
UpdateDisplay
    movf    PORTA
,w
    clrf    PORTA                  
; Invalidation tous chiffres
    andlw   0x0f                    
    movwf   TempC                   
; Sauvegarde nø de chiffre ds tempC
    bsf     TempC
,4                 ; Pr‚paration validation Lsd
    rrf     TempC                   
; Determine chiffre suivant
    btfss   STATUS
,C           ; c=1? 
    bcf     TempC
,3                 ; non alors raz Lsd
    btfsc   TempC
,0                  
    goto    UpdateMsd 
    btfsc   TempC
,1
    goto    Update3rdLsd
    btfsc   TempC
,2
    goto    Update2ndLsd
UpdateLsd
    movf    LsdTime
,w               ; Lecture Lsd dans W
    andlw   0x0f                    
;       /
    goto    DisplayOut              ; Validation affichage
Update2ndLsd        
    call    Chk2LsdZero             
; Msd = 0 & 2 Lsd 0?
    btfss   STATUS,Z                ; oui alors saut
    swapf   LsdTime
,w               ; lecture 2ø Lsd dans W
    andlw   0x0f                    
; masque quartet bas
    goto    DisplayOut              
; validation affichage
Update3rdLsd
    call    ChkMsdZero              
; Msd = 0?
    btfss   STATUS,Z                ; oui alors saut
    movf    MsdTime
,w               ; lecture 3ø Lsd dans W
    andlw   0x0f                    
; masque quartet bas
    goto    DisplayOut              
; validation affichage
UpdateMsd
    swapf   MsdTime
,w               ; lecture Msd dans W
    andlw   0x0f                    
; masque quartet bas
    btfsc   STATUS
,Z                ; Msd != 0 puis saut
    movlw   0x0a
DisplayOut
    call    LedTable                
; lecture chiffres
    movwf   PORTB                  
; commande des LED
    movf    TempC
,w
    movwf   PORTA
    return
;
;
LedTable
    addwf   pcl1                     
; ajout au PC
    retlw   B
'00111111'             ; LED allum‚es pour afficher 0
    retlw   B
'00000110'             ; LED allum‚es pour afficher 1
    retlw   B
'01011011'             ; LED allum‚es pour afficher 2
    retlw   B
'01001111'             ; LED allum‚es pour afficher 3
    retlw   B
'01100110'             ; LED allum‚es pour afficher 4
    retlw   B
'01101101'             ; LED allum‚es pour afficher 5
    retlw   B
'01111101'             ; LED allum‚es pour afficher 6
    retlw   B
'00000111'             ; LED allum‚es pour afficher 7
    retlw   B
'01111111'             ; LED allum‚es pour afficher 8
    retlw   B
'01100111'             ; LED allum‚es pour afficher 9
    retlw   B
'00000000'             ; Effacement toutes LED
;
;
Chk2LsdZero
    call    ChkMsdZero              
; Msd = 0?
    btfss   STATUS,Z                ; oui alors saut
    return                          
; sinon retour
    swapf   LsdTime
,w               ; lecture 2ø Lsd
    andlw   0x0f                    
; masque quartet bas
    btfss   STATUS
,Z                ; 0? alors saut
    return
    retlw   .10                     
; sinon retour avec 10
;
ChkMsdZero
    movf    MsdTime
,w               ; lecture Msd dans W
    btfss   STATUS
,Z                ; = 0? alors saut
    return                          
; sinon retour
    retlw   .10                     
; retour avec 10
;

start

    clrwdt            
; effacer watch dog
    goto start        
; boucler




    END             
; directive fin de programme


debut avec le debuguer
JMarc
Passioné
Passioné
Messages : 493
Enregistré en : août 2016
Localisation : Dans le Sud...

#47 Message par JMarc » mar. 20 sept. 2016 15:51

Voila, encore une journée a passer a essayer et cela ne fonctionne toujours pas mais que du positif

J'ai un probleme avec TMR0, cela ne semble pas fonctionner mais du coup puisque je fais du pas a pas j'ai placer ceci dans la boucle principale

Code : Tout sélectionner

start
    nop
    call    IncTimer                
; incr‚mentation timer
    call    UpdateDisplay           
; mise … jour affichage

    goto start        
; boucler


ça fonctionne bien pour le porta qui sert a commander les afficheurs a tour de role mais mon portb reste toujours avec la meme valeur :mur:
cela doit venir d'ici je pense; ou ma variable PCL1 ou c'est w qui arrive avec une valeur erroné

Code : Tout sélectionner

LedTable
    addwf   PCL1                
; ajout au PC
    retlw   B
'00111111'             ; LED allum‚es pour afficher 0
    retlw   B
'00000110'             ; LED allum‚es pour afficher 1
    retlw   B
'01011011'             ; LED allum‚es pour afficher 2
    retlw   B
'01001111'             ; LED allum‚es pour afficher 3
    retlw   B
'01100110'             ; LED allum‚es pour afficher 4
    retlw   B
'01101101'             ; LED allum‚es pour afficher 5
    retlw   B
'01111101'             ; LED allum‚es pour afficher 6
    retlw   B
'00000111'             ; LED allum‚es pour afficher 7
    retlw   B
'01111111'             ; LED allum‚es pour afficher 8
    retlw   B
'01100111'             ; LED allum‚es pour afficher 9
    retlw   B
'00000000'             ; Effacement toutes LED

debut avec le debuguer
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#48 Message par Guest » mar. 20 sept. 2016 17:48

Bonjour

Pas simple ton code voir, illisible, que viens faire par exemple la gestion de l'EPROM avec un timer tu as besoin de l'EPROM ????? non donc a virer et puis cela :

Code : Tout sélectionner

   LIST      p=16F877            ; Définition de processeur
    #include <p16F877.inc>        ; fichier include

C'est des petits f
Pourquoi reprendre toute les registre alors que le fichier include et la pour cela

Tient cela tu peux le virer et le reste des registres c'est pas un tuto c'est un programme

Code : Tout sélectionner

INTCONVAL    EQU    B'00100000'
            ; GIE       b7 : masque autorisation générale interrupt
                        ;                ne pas mettre ce bit à 1 ici
                        ;                sera mis en temps utile
            ; PEIE      b6 : masque autorisation générale périphériques
            ; T0IE      b5 : masque interruption tmr0
            ; INTE      b4 : masque interuption RB0/Int
            ; RBIE      b3 : masque interruption RB4/RB7
            ; T0IF      b2 : flag tmr0
            ; INTF      b1 : flag RB0/Int
            ; RBIF      b0 : flag interruption RB4/RB7

; REGISTRE PIE1 (contrôle interruptions périphériques)


PREND CA

Code : Tout sélectionner

;*******************************************************************
;description
;********************************************************************
;
;   Auteur   
;   Version   
;   Date   :0 
;
;********************************************************************
;            Note:PIC 16F877_04            
;********************************************************************
   ERRORLEVEL-302

   list       p=16f877         ;liste directive du 16F877
   #include    "p16f877.inc"

; CONFIG
 __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
   
;*********************** Déclarations des définitions ****************
 
 ;*********************** Assignations *******************************

;*********************** Définitions variables en RAM PAGE0 *********
   CBLOCK   0x20
   
ICI TU POSES tes variables   
   ENDC
   
;*********************** Macro **************************************

Banque0   MACRO
   BCF   STATUS,RP0      ;Acces bank0
   BCF   STATUS,RP1
   ENDM

Banque1   MACRO
   BSF   STATUS,RP0      ;Acces bank1
   BCF   STATUS,RP1
   ENDM

Banque2   MACRO
   BCF   STATUS,RP0      ;acces bank2
   BSF      STATUS,RP1
   ENDM

Banque3   MACRO
   BSF   STATUS,RP0      ;Acces bank4
   BSF   STATUS,RP1
   ENDM
         
;********************************************************************

   ORG 0x00

    GOTO    Principale

;****************** Gestion des interruptions ***********************
   ORG 0x4
   
   RETFIE            ; retour int
   
;*******************************************************************
;               Début du Programme
;*******************************************************************

Principale

;*********************** Mise a zéro de la mémoire RAM banque0 ******

     MOVLW    0x20
     MOVWF   FSR
Effa   CLRF    INDF
     INCF    FSR,F         ;RAZ RAM
     BTFSS    FSR,7
     GOTO    Effa

;*********************** Initialisation des ports *******************
   Banque1                  ;accés bank1
REMPLI ICI
;******************* Initialisation des timers/compteurs *************      
REMPLI ICI
   
;*********************************************************************

SUITE REMPLI ICI


allez courage et A+
Modifié en dernier par Anonymous le mar. 20 sept. 2016 17:58, modifié 1 fois.

debut avec le debuguer
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#49 Message par Guest » mar. 20 sept. 2016 17:52

Que tu t'inspires de bigonoff oui, que tu recopies l'exemple d'un programme NON. Dans mon masque, tu n'est pas obligé de remplir les paragraphes vides. Si tu n'as pas besoin de l'int tu laisses, pas d'assignations tu laisses vides etc...

Pour Tes variables , pour des besoins simples, tu mets cela dans 0x20 car la banque 0 est la plus usitée
Pour les int que celle du timer le reste tu vires
A+

debut avec le debuguer
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#50 Message par Guest » mar. 20 sept. 2016 19:26

je te secoue un peu :wink: , mais la, il faut faire le ménage .Tiens encore,la notion de page, oui pour un gros programme ok, mais pour ton application tu vas pas en avoir besoin et de plus complique la visibilité

Allez plaisir de te lire

A+

PS: tu peux me donner tes besoins pour cette application, je vais la faire avec toi .si tu veux bien étape par étape

voila deja la trame

Code : Tout sélectionner

;*******************************************************************
;
;********************************************************************
;
;   Auteur   :maï/JMarc
;   Version   :1.0
;   Date   :09/2016   
;
;********************************************************************
;            Note:PIC 16F876A_04            
;********************************************************************
   ERRORLEVEL-302

   list       p=16f877         ;liste directive du 16F876a
   #include    "p16f877.inc"

; CONFIG
 __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
   
;*********************** Déclarations des définitions ***************
;*********************** Assignations *******************************

DRAM   EQU 0x20         ;début Mémoire Ram banque0
FRAM    EQU 0X7F         ;fin Mémoire Ram banque0
QUARTZ   EQU .20            ;Valeur du quartz en MHz
      
DIVISEUR1   equ   .8         ;ici 8 du TMR
TEMPS   EQU .100000         ;Valeur en µs
TIMER1   EQU .65535-((QUARTZ*TEMPS)/(.4*DIVISEUR1)-2);les-2 pour temps chargement timer1
      
TIMER1L   EQU LOW TIMER1         ;valeur
TIMER1H   EQU HIGH TIMER1         ;pour 100 ms qu'il faudra incorporer dans le timer 1

;*********************** Définitions variables en RAM PAGE0 *********
   CBLOCK   0x20
   Sauv,Sauv1,Temp
   ENDC
   
;*********************** Macro **************************************

Banque0   MACRO
   BCF   STATUS,RP0      ;Acces bank0
   BCF   STATUS,RP1
   ENDM

Banque1   MACRO
   BSF   STATUS,RP0      ;Acces bank1
   BCF   STATUS,RP1
   ENDM

Banque2   MACRO
   BCF   STATUS,RP0      ;acces bank2
   BSF      STATUS,RP1
   ENDM

Banque3   MACRO
   BSF   STATUS,RP0      ;Acces bank4
   BSF   STATUS,RP1
   ENDM
         
;********************************************************************

   ORG 0x00

    GOTO    Principale

;****************** Gestion des interruptions ***********************
   ORG 0x4
   MOVWF   Sauv         ;sauve W
   SWAPF   STATUS, 0      ;
   MOVWF   Sauv1         ;sauve status
   
   MOVLW   TIMER1L         ;oui
   MOVWF   TMR1L
   MOVLW   TIMER1H         ;on recharge le timer1
   MOVWF   TMR1H
      
   BCF   PIR1,TMR1IF      ;RAZ du drapeau de TMR1
      
   INCF   Temp,F         ; à 10 cela fera 1s

   SWAPF   Sauv1,0
   MOVWF   STATUS         ;restaure status
   SWAPF   Sauv, 1
   SWAPF   Sauv, 0         ;restaure W
   
   RETFIE            ; retour int
   
;*******************************************************************
;               Début du Programme
;*******************************************************************

Principale

;*********************** Mise a zéro de la mémoire RAM banque0 ******

     MOVLW    DRAM
     MOVWF   FSR
Effa   CLRF    INDF
     INCF    FSR,F         ;RAZ RAM
     BTFSS    FSR,7
     GOTO    Effa

;*********************** Initialisation des ports *******************
   Banque1                  ;accés bank1

   CLRF   TRISB         ;Broches RB0 à RB7 en sortie

   MOVLW   B'00000001'      ;Broches RA0 en entrée
   MOVWF   TRISA
   
   MOVLW   B'11000000'
   MOVWF   TRISC         ; le port serie
   
   MOVLW   B'00001110'      ;RA0 en analogique
   MOVWF   ADCON1         ;justification a gauche
   
;******************* Initialisation des timers/compteurs *************      
;                   ici on va travailler avec le TIMER1
;*********************************************************************
   MOVLW   (0)|(0)|(1<<T1CKPS1)|(1<<T1CKPS0)|(0<<T1OSCEN)|(0<<T1SYNC)|(0<<TMR1CS)|(0<<TMR1ON)
   MOVWF   T1CON
      
   MOVLW   TIMER1H         ;on charge le TIMER1
        MOVWF   TMR1H
        MOVLW   TIMER1L         ;voir son calcul dans
        MOVWF   TMR1L         ;assignation

;*********************** validation des INT ************************
   BSF   INTCON,GIE      ;validation des INT
   BSF   INTCON,PEIE

        BSF   PIE1,TMR1IE      ;valide le TMR1
   
   Banque0
   
;*********************** Allez c'est partie *************************            
    END


il faut sûrement modifier la configuration des ports a toi de me dire


Retourner vers « Langage ASM »

Qui est en ligne

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