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
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#51 Message par JMarc » mar. 20 sept. 2016 21:00

Il n'y a pas de soucis.

Mes besoins ? J'ai une idée par minute. :sifflotte:
Pour l'instant, je m'entraîne avec le débuger. J'ai pris ta trame mais impossible d'assembler. J'ai les yeux hs oops

Je continue demain

Merci, Jean-Marc

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

#52 Message par JMarc » mer. 21 sept. 2016 10:58

Bonjour Maï et tous les membres du forum

J'ai fais un tableau, en le déclarant org 0x300
mis la ligne addwf PCL,f
chargé PCLATH avec 0x03 dans la partie innitialisations
et ca fonctionne :-D :-D :-D

Code : Tout sélectionner

    org 0x0300
LedTable
    addwf   PCL
,f                ; ajout au PC
    retlw   B
'00111111'             ; LED allum?es pour afficher 0    63
    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


Code : Tout sélectionner

    
    movlw    0x03
    movwf    PCLATH


J'attaque la partie timer puis je prendrai ta trame


Jean-Marc trop content

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

#53 Message par JMarc » mer. 21 sept. 2016 14:07

Voila, fini, et fonctionne en vrai.

Je reconnais que sans le débuguer je n'y serai pas arrivé.
J'ai réduis le fichier source comme tu me la conseillé, viré les routines eeprom et compagnie. je sais que l'on peut réduire encore :wink:

J'ai compris mes pics hs, il y a 16F877 pour l'ancien et les nouveaux que j'ai commandé 16F877A, c'est écrit tellement petit :roll: j'ai changé dans MPLAB et cela fonctionne.

Maintenant je suis preneur pour des idées de rajout de fonction de cette base de programme pour me forcer a réfléchir; heu mollo dans les demandes, faut resté a mon niveau débutant exit

Code : Tout sélectionner

;*****************************************************************************
;                                                                   *  
;               
Compteur pour 4 afficheurs 7 segments                                                              *
;*****************************************************************************
;                                                                            *
;    
NOM:     JMarc                                                               *
;    
Date:    20/9/2016                                                               *
;    
Version1                                                               *
;    
Circuit:                                                                *
;    
Auteur:   Bigonoff pour la base                                                              *
;              
tavernier pour le prog et modifié par JMarc                                                              *
;*****************************************************************************
;                                                                            *
;    
Fichier requisP16F877.inc                                             *
;                                                                            *
;                                                                            *
;                                                                            *
;*****************************************************************************
;                                                                            *
;    
Notes:    Les segments des afficheurs sont commandés par les huit lignes                                                              *
;              
du port B et le port A commande les cathodes communes des 
;            afficheurs                                         *
;                                                                            *
;                                                                            *
;                                                                            *
;*****************************************************************************


    LIST      
p=16F877A            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 programmationLes 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'10000000'
            
RBPU     b7 1Résistance rappel +5V hors service
            
INTEDG   b6 1Interrupt sur flanc montant de RB0
            
;               0Interrupt sur flanc descendde RB0
            
TOCS      b5 1source clock transition sur RA4
            
;                0horloge interne
            
TOSE      b4 1Sélection flanc montant RA4(si B5=1)
            ;                
0Sélection flanc descendant RA4
            
PSA       b3 1Assignation prédiviseur sur Watchdog
            
;                0Assignation prédiviseur sur Tmr0
            
PS2/PS0   b2/b0 valeur du prédiviseur
                        
;           000 =  1/(watchdogou 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


;*****************************************************************************
MASQUE        EQU    H'00FF'
;*****************************************************************************
;                           
ASSIGNATIONS DES GLOBALES                          *
;*****************************************************************************
    GLOBAL 
Count
    
GLOBAL TempC
    
GLOBAL MsdTime 
    
GLOBAL LsdTime
UDATA
    Count res 1
    TempC res 1
    MsdTime res 1
    LsdTime res 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        nonattendre
    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)

        
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 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 interruptson se passera
de sauvegarder FSR
Si le programme ne fait pas plus de 2Kon 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
    goto    restorereg    ; fin des test d'
interruption modifié par JM
    call    inttmr0        
ouitraiter 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
            ; --------------------

            ;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


////////////////////////////////////////////////////////////////////////////

;                           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        nonboucler

            
autoriser interruptions (banque 0)
            ; ----------------------------------
    
clrf    PIR1        effacer flags 1
    clrf    PIR2        
effacer flags 2
    bsf    INTCON
,GIE    valider interruptions
    BANK0
    clrf    PORTA
    clrf    PORTB
    bsf    PORTA
,3
    
    clrf    MsdTime                 
raz timers           J'ai modifié ici
    clrf    LsdTime                 ;       /
    movlw   .93                     ; pr?chargement RTCC        
    movwf   TMR0 ;RTCC                    ; d?part comptage
    
    goto    start        ; programme principal


;*****************************************************************************
;                      PROGRAMME PRINCIPAL                                   *
;*****************************************************************************
    
ServiceRTCC
    bcf     INTCON,T0IF             ; raz drapeau d'
it          Bit2
    movlw    0x03            
charge 0x03 pour le tableau
    movwf    PCLATH
    
    
    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 (z=0 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? alors saut
    bcf     TempC,3                 ; non alors raz Lsd
    btfsc   TempC,0                 ; si 0 alors saut 
    goto    UpdateMsd 
    btfsc   TempC,1
    goto    Update3rdLsd
    btfsc   TempC,2            ; si 0 alors saut
    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


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 pas de saut
    return                          ; sinon retour
    retlw   .10                     ; retour avec 10


start
    nop
    nop
    nop
    
    goto start        ; boucler

    
    
    org 0x0300
LedTable
    addwf   PCL,f                ; ajout au PC
    retlw   B'
00111111'             ; LED allum?es pour afficher 0    63
    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


    END             ; directive fin de programme


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

#54 Message par Guest » mer. 21 sept. 2016 15:36

bonjour

il y a quelques problèmes mais un notamment et de plus important, c'est le traitement de int du timer0

voici comment se traite cette int

Code : Tout sélectionner

   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


on ne fait pas appel dans une int de call, le drapeau se traite dans l'int ,si l'on doit faire un test c'est uniquement sur la variable ou les variables ici Temp, dans la boucle principale ou dans une boucle secondaire l'int doit-etre la plus courte possible

voila ce que tu fais c'est pas bon

Code : Tout sélectionner

;*****************************************************************************
;                      PROGRAMME PRINCIPAL                                   *
;*****************************************************************************
   
ServiceRTCC
    bcf     INTCON,T0IF             ; raz drapeau d'it          Bit2
    movlw    0x03            ; charge 0x03 pour le tableau
    movwf    PCLATH
   
   
    call    IncTimer                ; incr?mentation timer
    call    UpdateDisplay           ; mise ? jour affichage
    retfie

tu ne fais pas de restauration, de plus tu empiles encore et encore .il y a une limite sur le NB de call imbriqué, c'est 8 c'est un joli cas de plantage et de plus difficile a trouver, car aucune erreur de complilation.

tu ne recharges jamais ton timer0 si une seule fois ici

Code : Tout sélectionner

    clrf    MsdTime                 ; raz timers           J'ai modifié ici
    clrf    LsdTime                 ;       /
    movlw   .93                     ; pr?chargement RTCC       
    movwf   TMR0 ;RTCC                    ; d?part comptage
 


donc si tu peux revoir cela

allez A+

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

#55 Message par JMarc » mer. 21 sept. 2016 17:02

Alors la recharge du timer et un peu moins de call

Code : Tout sélectionner

    
            
Interruption TMR0
            
; -----------------

    
btfsc    INTCON,T0IE    tester si interrupt timer autorisée
    btfss    INTCON
,T0IF    ouitester si interrupt timer en cours
    
goto    restorereg    fin des test d'interruption modifié par JM
    movlw    .96            ; Je recharge mon timer apres l'
interuption
    movwf    TMR0

    call    IncTimer                
incr?mentation timer
    call    UpdateDisplay           
mise jour affichage

    
    bcf    INTCON
,T0IF    effacer flag interrupt tmr0
    
goto    restorereg    et fin d'interruption
                ; SUPPRIMER CETTE LIGNE POUR


Les sauvegardes de pclath ? j'ai rajouté une sauvegarde avant la lecture du tableau avec une restoration apres ecriture sur portC (oui j'ai changé de port car je souhaite utilisé portb en entré pour les résistances et aussi les intéruptions

je remet le code entier

Code : Tout sélectionner

;*****************************************************************************
;                                                                   *  
;               
Compteur pour 4 afficheurs 7 segments                                                              *
;*****************************************************************************
;                                                                            *
;    
NOM:     JMarc                                                               *
;    
Date:    20/9/2016                                                               *
;    
Version1                                                               *
;    
Circuit:                                                                *
;    
Auteur:   Bigonoff pour la base                                                              *
;              
tavernier pour le prog et modifié par JMarc                                                              *
;*****************************************************************************
;                                                                            *
;    
Fichier requisP16F877.inc                                             *
;                                                                            *
;                                                                            *
;                                                                            *
;*****************************************************************************
;                                                                            *
;    
Notes:    Les segments des afficheurs sont commandés par les huit lignes                                                              *
;              
du port C et le port A commande les cathodes communes des 
;            afficheurs                                         *
;                                                                            *
;                                                                            *
;                                                                            *
;*****************************************************************************


    LIST      
p=16F877A            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 programmationLes 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'10000000'
            
RBPU     b7 1Résistance rappel +5V hors service
            
INTEDG   b6 1Interrupt sur flanc montant de RB0
            
;               0Interrupt sur flanc descendde RB0
            
TOCS      b5 1source clock transition sur RA4
            
;                0horloge interne
            
TOSE      b4 1Sélection flanc montant RA4(si B5=1)
            ;                
0Sélection flanc descendant RA4
            
PSA       b3 1Assignation prédiviseur sur Watchdog
            
;                0Assignation prédiviseur sur Tmr0
            
PS2/PS0   b2/b0 valeur du prédiviseur
                        
;           000 =  1/(watchdogou 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'00000000'    Direction PORTC
DIRPORTD    EQU    
B'11111111'    Direction PORTD
DIRPORTE    EQU    
B'00000111'    Direction PORTE


;*****************************************************************************
MASQUE        EQU    H'00FF'
;*****************************************************************************
;                           
ASSIGNATIONS DES GLOBALES                          *
;*****************************************************************************
    GLOBAL 
Count
    
GLOBAL TempC
    
GLOBAL MsdTime 
    
GLOBAL LsdTime
UDATA
    Count res 1
    TempC res 1
    MsdTime res 1
    LsdTime res 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        nonattendre
    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)

        
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 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 interruptson se passera
de sauvegarder FSR
Si le programme ne fait pas plus de 2Kon 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    restorereg    ; fin des test d'
interruption modifié par JM
    movlw    .96            
Je recharge mon timer apres l'interuption
    movwf    TMR0

    call    IncTimer                ; incr?mentation timer
    call    UpdateDisplay           ; mise ? jour affichage

    
    bcf    INTCON,T0IF    ; effacer flag interrupt tmr0
    goto    restorereg    ; et fin d'
interruption
                
SUPPRIMER CETTE LIGNE POUR
                
TRAITER PLUSIEURS INTERRUPT
                
EN 1 SEULE FOIS
            
; --------------------

            ;
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 statusré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


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

;                           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
    BANK0
    clrf    PORTA
    clrf    PORTB
    clrf    PORTC
    bsf    PORTA,3
    
    clrf    MsdTime                 ; raz timers           J'
ai modifié ici
    clrf    LsdTime                 
;       /
    
movlw   .93                     pr?chargement RTCC        
    movwf   TMR0 
;RTCC                    d?part comptage
    
    
goto    start        programme principal


;*****************************************************************************
;                      
PROGRAMME PRINCIPAL                                   *
;*****************************************************************************
    
ServiceRTCC
    
    
    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 (z=0 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    PCLATH , w            ; charger PCLATH
    movwf    PCLATH_temp            ; le sauver
    movlw    0x03            ; charge 0x03 pour le tableau
    movwf    PCLATH

    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? alors saut
    bcf     TempC,3                 ; non alors raz Lsd
    btfsc   TempC,0                 ; si 0 alors saut 
    goto    UpdateMsd 
    btfsc   TempC,1
    goto    Update3rdLsd
    btfsc   TempC,2            ; si 0 alors saut
    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   PORTC                   ; commande des LED
    movf    TempC,w
    movwf   PORTA
    movf    PCLATH_temp , w        ; recharger ancien PCLATH
    movwf    PCLATH            ; le restaurer
    return


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 pas de saut
    return                          ; sinon retour
    retlw   .10                     ; retour avec 10


start
    nop
    nop
    nop
    
    goto start        ; boucler

    
    
    org 0x0300
LedTable
    addwf   PCL,f                ; ajout au PC
    retlw   B'
00111111'             ; LED allum?es pour afficher 0    63
    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


    END             ; directive fin de programme


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

#56 Message par Guest » mer. 21 sept. 2016 17:58

Encore trop de monde dans INT

Tient regarde ultra court, c'est le timer1 peu importe pas mis l'affichage tu peux prendre le tient, pas encore bien regarde le code .
Cela compte de 0 a 59s le digit unite c'est ComptSu, le digits dizaine c'est CompSd.

cela compli sans problème, plus vite et plus rapide et de plus super précis precision celle du quartz

Code : Tout sélectionner

;*******************************************************************
;
;********************************************************************
;            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 *******************************

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
   ComptSu
   ComptSd
   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 0x04
   
   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 *******************
   CLRF   PORTA
   CLRF   PORTB
   
   Banque1            ;accés bank1
   
   CLRF   TRISA         ;PortA en sortie
   CLRF   TRISB         ;Broches RB0 à RB7 en sortie
   
   MOVLW   B'00000110'      ;PORTA digitale
   MOVWF   ADCON1         ;
   
;*********************** validation des INT ************************
   BSF   INTCON,GIE      ;validation des INT
   BSF   INTCON,PEIE

        BSF   PIE1,TMR1IE      ;valide le TMR1
   
   Banque0
   
;******************* 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
   
   BSF   T1CON,TMR1ON      ;marche TMR1
   
;********************** Boucle principale *************************************   
BouP1   CALL   AFFICHE         ;afficheur 7 segments
   
BouP   MOVLW   0X0A         ;on test si 10fois 100mS
   SUBWF   Temp,W
   BTFSS   STATUS,Z
   GOTO   BouP         ;NON on retourne dans la boucle P
   INCF   ComptSu         ; oui compteur seconde +1

   
   MOVLW   0X0A         ; on test si poid faible >9
   SUBWF   ComptSu,W
   BTFSS   STATUS,C
   GOTO   Compt         
   INCF   ComptSd
   CLRF   ComptSu
   
Compt   MOVLW   0X06         ;ici on test si compteur =60S
   SUBWF   ComptSd,W
   BTFSS   STATUS,Z
   GOTO   BouP1         ; NON on retourne dans boucle P
   CLRF   ComptSu         ;RAZ du compteur
   CLRF   ComptSd
   GOTO   BouP1
   
;*********************** AFFICHAGE des SECONDES *******************************
;poids fort ComptSd ;poid faible ComptSu
;******************************************************************************   
AFFICHE   
   
   RETURN
   
LedTable
    addwf   PCL,f          ; 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
   
;*********************** Allez c'est partie *************************            
    END


Doit même, rentré sur une page, pas besoin de : 0RG 0X300, ce qui pour un code aussi simple n'est pas normal de faire appel ?????? en sommes que du bonheur

A+
Modifié en dernier par Anonymous le mer. 21 sept. 2016 18:25, modifié 1 fois.

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

#57 Message par Guest » mer. 21 sept. 2016 18:01

Tient regarde aussi, la gestion des banques .Une fois la configuration, port trimer terminée, on appel plus les banques je reste en BANQUE 0.
Tout comme la gestion des entrées sorties, ludique leurs façon de faire .Mais bien plus rapide la mienne si le port est en sortie un simple CLRF TRISX suffit plus court et rapide.

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

#58 Message par Guest » mer. 21 sept. 2016 18:53

Allez pas encore l’apéro
la finale :wink:

Code : Tout sélectionner

*******************************************************************
;
;********************************************************************
;            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
   ComptSu
   ComptSd
   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 0x04
   
   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 *******************
   CLRF   PORTA
   CLRF   PORTB
   CLRF   PORTC
   Banque1            ;accés bank1
   
   CLRF   TRISA         ;PortA en sortie
   CLRF   TRISB         ;Broches RB0:RB7 en sortie
   CLRF   TRISC         ;Broches RC0:RC7 en sortie
   
   MOVLW   B'00000110'      ;PORTA digitale
   MOVWF   ADCON1         ;
   
;*********************** validation des INT ************************
   BSF   INTCON,GIE      ;validation des INT
   BSF   INTCON,PEIE

        BSF   PIE1,TMR1IE      ;valide le TMR1
   
   Banque0
   
;******************* 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
   
   BSF   T1CON,TMR1ON      ;arrêt TMR1
   
;********************** Boucle principale *************************************
   
AFFI
   MOVFW   ComptSu
   CALL   LedTable
   MOVWF   PORTB
   MOVFW   ComptSd
   CALL   LedTable
   MOVWF   PORTC
   
BouP   MOVLW   0X0A         ;on test si 10fois 100mS
   SUBWF   Temp,W
   BTFSS   STATUS,Z
   GOTO   BouP         ;NON on retourne dans la boucle P
   INCF   ComptSu         ; oui compteur seconde +1

   
   MOVLW   0X0A         ; on test si poid faible >9
   SUBWF   ComptSu,W
   BTFSS   STATUS,C
   GOTO   Compt         
   INCF   ComptSd
   CLRF   ComptSu
   
Compt   MOVLW   0X06         ;ici on test si compteur =60S
   SUBWF   ComptSd,W
   BTFSS   STATUS,Z
   GOTO   AFFI         ; NON on retourne dans boucle P
   CLRF   ComptSu         ;RAZ du compteur
   CLRF   ComptSd
   GOTO   AFFI
   
;*********************** AFFICHAGE des SECONDES *******************************
;poids fort ComptSd ;poid faible ComptSu
;******************************************************************************   
   
LedTable
    addwf   PCL,f          ; 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
   
;*********************** Allez c'est partie *************************            
    END


Bonne soirée

A+

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

#59 Message par JMarc » mer. 21 sept. 2016 20:23

c'est super gentil mais j'arrive pas a assembler. et ne trouve pas l'erreur. ca me plait et je voudrais le tracer pour comprende. et je n ai pas encore pris l'apéro +1


Code : Tout sélectionner

make[2]: Leaving directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
nbproject/Makefile-default.mk:84recipe for target '.build-conf' failed
make
[1]: Leaving directory 'C:/jmp/pic/fantaspicmai/afficheur/fantaspicmai.X'
nbproject/Makefile-impl.mk:39recipe for target '.build-impl' failed

BUILD FAILED 
(exit value 2total time1s)
 

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

#60 Message par Guest » jeu. 22 sept. 2016 10:07

Bonjour

si erreur ici peut-être

Code : Tout sélectionner

  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


je suis sous un 16F877 avec un quartz 20MHz

A+

PS donne moi tout de la construction comme ici le résultat de mon exemple

Code : Tout sélectionner

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory '/home/moi/MPLABXProjects/16_ASM/TEST_16A.X'
make  -f nbproject/Makefile-default.mk dist/default/debug/TEST_16A.X.debug.cof
make[2]: Entering directory '/home/moi/MPLABXProjects/16_ASM/TEST_16A.X'
"/opt/microchip/mplabx/v3.26/mpasmx/mpasmx" -d__DEBUG -d__MPLAB_DEBUGGER_SIMULATOR=1 -q -p16f877 -u -l\"build/default/debug/7segments.lst\" -e\"build/default/debug/7segments.err\" -o\"build/default/debug/7segments.o\" \"7segments.asm\"
Message[305] /home/moi/MPLABXProjects/16_ASM/TEST_16A.X/7segments.asm 155 : Using default destination of 1 (file).
Message[305] /home/moi/MPLABXProjects/16_ASM/TEST_16A.X/7segments.asm 162 : Using default destination of 1 (file).
"/opt/microchip/mplabx/v3.26/mpasmx/mplink"    -p16f877  -w -x -u_DEBUG -z__ICD2RAM=1 -m"dist/default/debug/TEST_16A.X.debug.map"   -z__MPLAB_BUILD=1  -z__MPLAB_DEBUG=1 -z__MPLAB_DEBUGGER_SIMULATOR=1  -odist/default/debug/TEST_16A.X.debug.cof  build/default/debug/7segments.o     
MPLINK 5.08, LINKER
Device Database Version 1.29
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0

make[2]: Leaving directory '/home/moi/MPLABXProjects/16_ASM/TEST_16A.X'
make[1]: Leaving directory '/home/moi/MPLABXProjects/16_ASM/TEST_16A.X'

BUILD SUCCESSFUL (total time: 706ms)
Loading symbols from /home/moi/MPLABXProjects/16_ASM/TEST_16A.X/dist/default/debug/TEST_16A.X.debug.cof...
Loading code from /home/moi/MPLABXProjects/16_ASM/TEST_16A.X/dist/default/debug/TEST_16A.X.debug.cof...
Loading completed


A+


Retourner vers « Langage ASM »

Qui est en ligne

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