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

compteur décompteur sur 7 segments
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#131 Message par JMarc » sam. 3 déc. 2016 17:48

Bonjour Maï

maï a écrit :
la gestion de tes boutons on en es OU?

A+


Je n'avance pas du tout, toujours mon probleme de copier du forum vers mon pc, ma seule solution est de copier dans bloc note, sauvegarder, avec un editeur hexa remplacer tout les 0xA0 en 0x20, sauvegarder, reprendre le fichier avec le bloc note, copier et coller dans mplab. Ca ma "gonflé" de chercher pendant des heures et pas trouver la solution :furieux:

de plus maintenant je ne sort plus de la routine interruption donc je perd du temps sans même bosser sur le prog :cry:


Je remet le code avant que tu me le demande :sifflotte:

Code : Tout sélectionner

;********************************************************************
;                
descriptif du projet:
;
Decompteur programmablesur 4 digits 7 segemnts,
;
2 BP un plus variables,un validation deplacement et demarrage decompteur.
;
;;********************************************************************
;
;                
Auteur    :JMarc maï
;                Version    :2.0
;                Date    :2016
;
;*******************************************************************************
;            
Note:PIC 16F877a par exemple
;                                
;*******************************************************************************
    
ERRORLEVEL-302
    
   
list       p=16f877         ;liste directive du 16F877
   
#include    "p16f877.inc"

;********************** chargement des Macros **********************************   

;***************************** 
Configuation des fuses **************************
;            
CONFIG
__config 0x3D3A
;__CONFIG _FOSC_HS _WDTE_OFF _PWRTE_OFF _CP_OFF _BOREN_OFF _LVP_OFF _CPD_OFF _WRT_OFF
;
    
__CONFIG   _CP_OFF _DEBUG_OFF _WRT_ENABLE_OFF _CPD_OFF _LVP_OFF _BODEN_OFF _PWRTE_ON _WDT_OFF _HS_OSC

        
;_CP_OFF        Pas de protection
        
;_DEBUG_OFF        RB6 et RB7 en utilisation normale
        
;_WRT_ENABLE_OFF    Le programme ne peut pas écrire dans la flash
        
;_CPD_OFF               Mémoire EEprom déprotégée
        
;_LVP_OFF        RB3 en utilisation normale
        
_BODEN_OFF        Reset tension hors service
        
;_PWRTE_ON        Démarrage temporisé
        
;_WDT_OFF        Watchdog hors service
        
;_HS_OSC        Oscillateur haute vitesse (4Mhz<F<20Mhz)

;
;*********************** 
déclaration des variables *****************************
;
Toutes ces variables sont globales pour le fichier source,MEM MEM_us MEM1 
;MEM1_us MEM2 pour l'ensemble du projet.

;*******************************************************************************
 GLOBAL    MEM,MEM1            ;variables utilisables dans tout le projet
 GLOBAL    MEM_us,MEM1_us            ; pour macro delay
 GLOBAL    MEM2
 
Group_gobal udata 0x20
MEM    res 1                ;MEM :MEM2 sont necessaires
MEM_us    res 1    
MEM1    res 1                ;pour les macros delay
MEM1_us res 1    
MEM2    res 1                ;
 
Group_Local udata 0x30
ComptSu        res 1            ;comteur seconde
ComptSd        res 1
ComptMu        res 1            ;compteur minute
ComptMd        res 1
Index        res 1            ;lors programmation digit concerné 
Temp        res    1            ;compteur temps
Temp_Val    res    1            ;compteur temps touche val        
Sauv        res 2            ;pour sauvegarde registres lors INT
    
        
;*********************** Definition des Externes *******************************
;
;*********************** Déclarations des définitions **************************
#DEFINE    _XTAL_FREQ  .4000000        ;ici FOSC =4MHz
        
#DEFINE BP_Plus PORTB,0
#DEFINE    BP_Val PORTB,1

        
;*********************** Assignations ou constantes ****************************
DRAM    EQU 0x20         ;début Mémoire Ram banque0
    
;*********************** MACROS ************************************************
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
;*********************** Affichage sur 4 digits ********************************
Aff7    MACRO
    
    BSF   PORTA,0         ;allumage digit0
    MOVFW   ComptSu         ;charge la donnée
    CALL   LedTable      ;recherche donnée
    MOVWF   PORTC         ;envoi donnée
    CALL   Tem2ms         ;petite tempo 2ms   
    BCF   PORTA,0         ;arrêt digit0
   
    BSF   PORTA,1
    MOVFW   ComptSd
    CALL   LedTable
    MOVWF   PORTC
    CALL   Tem2ms         ;idem digit1
    BCF   PORTA,1
   
    BSF   PORTA,2
    MOVFW   ComptMu
    CALL   LedTable
    MOVWF   PORTC
    CALL   Tem2ms         ;idem digit2         
    BCF   PORTA,2
   
    BSF   PORTA,3
    MOVFW   ComptMd
    CALL   LedTable
    MOVWF   PORTC         ;idem digit3
    CALL   Tem2ms
    BCF   PORTA,3

    ENDM

;*******************************************************************************
Compteur    MACRO
    movlw   0X0A    ; on teste si 10 fois 100 ms
    btfss   STATUS,Z
;    goto    AFFI
    goto    BouP
    clrf    Temp    ; raz compteur temp

;    decf    ComptSu,f
;
;    movfw   ComptSu
;    iorwf   ComptSd,w
;    iorwf   ComptMu,w
;    iorwf   ComptMd,w   ; addition
;    btfsc   STATUS,Z    ; test si 0
;    goto    BouP0

    movlw   ComptSu     ; Chargement du pointeur sur la premiere variable
    movwf   FSR
    movfw   INDF        ; Chargement de la source dans w
    incf    FSR,f         ; variable suivante
    iorwf   INDF,w
    incf    FSR,f
    iorwf   INDF,w
    incf    FSR,f
    iorwf   INDF,w
    btfsc   STATUS,Z
    goto    BouP

;   suite decomptage ici


    ENDM

;*********************** TOUT COMMENCE ICI *************************************
    org 0X00                   ;au rest le pointeur instruction est ICI
    GOTO debut                 ;saut sur le label debut

    org 0X04
    MOVWF   Sauv            ;sauve W
    SWAPF   STATUS,W        ; 
    MOVWF   Sauv+1            ;sauve status
    
    BTFSS    PIR1,TMR1IF        ;test flag si TIMER1
    GOTO    Int0            ;NON
    
    MOVLW    0x3C            ; int toute le 100ms    
    MOVWF    TMR1H
    MOVLW    0xB3
;    MOVWF    TMR1
    movwf   TMR1L
    
    BCF    PIR1,TMR1IF        ;RAZ du drapeau de TMR1
    INCF    Temp,F            ; à 10 cela fera 1s
    INCF    Temp_Val,F        ;tempo BP Val
    GOTO    IntS
    
Int0    BTFSS    INTCON,T0IF        ;Test flag si TIMER0
    GOTO    IntS            ;on sort pour gerer l'
affichage
    BCF    INTCON
,T0IE        ;ARRET INT TMR0
    
    Aff7
    
    MOVLW    0XA
    MOVWF    TMR0            
charge Timer0 pour 1ms
    BCF    INTCON
,T0IF        ;RAZ Flag TIMER0
    BSF    INTCON
,T0IE        ;mise en service INT TMR0
    
IntS    SWAPF    Sauv
+1,0
    MOVWF    STATUS            
;restaure status
    SWAPF    Sauv

    SWAPF    Sauv
0            ;restaure W

    RETFIE
    
;*********************** Alumage segments afficheur ****************************
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
   
;**********ici c'est votre programme principale ou main ************************
debut
;*********************** 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            ;efface les sorties des ports
    CLRF   PORTC
 Banque1                ;accés bank1
    
    CLRF   TRISA            ;RA:RA5    en sortie
    
    MOVLW  B'
00000111'        ;RB0:RB1 en entrées
    MOVWF   TRISB
    
    CLRF   TRISC            ;RC0:RC7 en sortie
   
    MOVLW   B'
00000110'        ;PORTA digitale
    MOVWF   ADCON1

;*********************** validation des INT ************************************
    MOVLW   (1<<GIE)|(1<<PEIE)|(1<<T0IE)|(0<<INTE)|(0<<RBIE)|(0<<T0IF)|(0<<INTF)|(0<<RBIF)
    MOVWF    INTCON            ;Initialisation des INT
    
    BSF    PIE1,TMR1IE        ;valide int TMR1
;******************* Initialisation des timers/compteurs ***********************       
;                   ici on va travailler avec le TIMER1 et TIMER0
;*******************************************************************************

    MOVLW    0x01
    MOVWF    OPTION_REG
    
 Banque0    
    MOVLW 0xA
    MOVWF TMR0
    
;**********************
    BSF T1CON, 0x4
    BCF T1CON, 0x5
    MOVLW 0x3C
    MOVWF TMR1H
    MOVLW 0xB3
    ;MOVWF TMR1
    movwf TMR1L
 
    BSF    T1CON,TMR1ON        ; mise en service Timer1
    
;********************** Boucle principale **************************************    
BouP
    Compteur
;*********************** Bouton plus *******************************************    
Plus    BTFSS    Index,7            ;mode decomptage ?
    GOTO    Decom            ;oui
    nop
    BTFSC    BP_Plus            ;BP_Plus appuyé?
    GOTO    BouP            ;NON on reboucle sur Principale
    
 ;   CALL    Temp800µs        ;petite tempo antirebond
    call    Tem2ms
Plus0    BTFSS    BP_Plus            ;BP_Plus relaché
    GOTO    Plus0            ;NON on boucle
    
    INCF    INDF,F            ;adresse pointé +1
    
    MOVLW    0X0A            ;test butée 9
    
 ;   BTFSS    Index,0
  ;  BTFSC    Index,2            ;on test les digits max 9 ou 5
  ;  GOTO    Plus1
    
 ;   MOVLW    0X6            ;test butée 5
Plus1    SUBWF    INDF,W
    
    BTFSC    STATUS,C
    CLRF    INDF            ;si butée raz adresse pointé
    
    GOTO    BouP            ;on Reboucle sur bouc
Decom
    goto    BouP


Tem2ms
    MOVLW 0x3
    MOVWF MEM1
    MOVLW 0x98
    MOVWF MEM
temp    DECFSZ MEM, F
    GOTO temp
    DECFSZ MEM1, F
    GOTO temp

    RETURN


    END                ;fin pour le compilateur

compteur décompteur sur 7 segments
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#132 Message par Guest » sam. 3 déc. 2016 18:31

Tient j'ai remis un peu d'ordre et mis quelques lignes de code pour la suite . j'ai fait un test,sur la platine a trou ,pour le moment le BP plus te permet d’incrémenter le digits les unités seconde avec la buté 09. Le BP validation n'est pas encore travaillé, à toi de jouer,avec FSR et les butées

Code : Tout sélectionner

;********************************************************************
;
                descriptif du projet:
;
Decompteur programmable, sur 4 digits 7 segemnts,
;
2 BP un plus variables,un validation deplacement et demarrage decompteur.
;
;;********************************************************************
;
;
                Auteur    :JMarc maï
;                Version    :2.0
;                Date    :2016
;
;*******************************************************************************
;
            Note:PIC 16F877a par exemple
;                                
;*******************************************************************************
    ERRORLEVEL-302
    
   list       p
=16f877         ;liste directive du 16F877
   
#include    "p16f877.inc"

;********************** chargement des Macros **********************************   

;***************************** Configuation des fuses **************************
;
            
; CONFIG
; __config 0x3D3A
;__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _CP_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF
;
    __CONFIG   _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

        
;_CP_OFF        Pas de protection
        
;_DEBUG_OFF        RB6 et RB7 en utilisation normale
        
;_WRT_ENABLE_OFF    Le programme ne peut pas écrire dans la flash
        
;_CPD_OFF               Mémoire EEprom déprotégée
        
;_LVP_OFF        RB3 en utilisation normale
        
; _BODEN_OFF        Reset tension hors service
        
;_PWRTE_ON        Démarrage temporisé
        
;_WDT_OFF        Watchdog hors service
        
;_HS_OSC        Oscillateur haute vitesse (4Mhz<F<20Mhz)

;
;***********************
 déclaration des variables *****************************
;
Toutes ces variables sont globales pour le fichier source,MEM MEM_us MEM1 
;MEM1_us MEM2 pour l''ensemble du projet.
;
 
;*******************************************************************************
 GLOBAL    MEM,MEM1            ;variables utilisables dans tout le projet
 GLOBAL    MEM_us
,MEM1_us            ; pour macro delay
 GLOBAL    MEM2
 
Group_gobal udata 0x20
MEM    res 1                
;MEM :MEM2 sont necessaires
MEM_us    res 1    
MEM1    res 1                
;pour les macros delay
MEM1_us res 1    
MEM2    res 1                
;
 
Group_Local udata 0x30
ComptSu        res 1            
;comteur seconde
ComptSd        res 1
ComptMu        res 1            
;compteur minute
ComptMd        res 1
Index        res 1            
;lors programmation digit concerné 
Temp        res    1            
;compteur temps
Temp_Val    res    1            
;compteur temps touche val        
Sauv        res 2            
;pour sauvegarde registres lors INT
    
        
;*********************** Definition des Externes *******************************
;
;***********************
 Déclarations des définitions **************************
#DEFINE    _XTAL_FREQ  .4000000        ;ici FOSC =4MHz
        
#DEFINE BP_Plus PORTB,0
#DEFINE    BP_Val PORTB,1

        
;*********************** Assignations ou constantes ****************************
DRAM    EQU 0x20         ;début Mémoire Ram banque0
    
;*********************** MACROS ************************************************
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
;*********************** Affichage sur 4 digits ********************************
Aff7    MACRO
    
    BSF   PORTA
,0            ;allumage digit0
    MOVFW   ComptSu            
;charge la donnée
    CALL   LedTable            
;recherche donnée
    MOVWF   PORTC            
;envoi donnée
    Tem2ms                
;petite tempo 2ms   
    BCF   PORTA
,0            ;arrêt digit0
   
    BSF   PORTA
,1
    MOVFW   ComptSd
    CALL   LedTable
    MOVWF   PORTC
    Tem2ms                
;idem digit1
    BCF   PORTA
,1
   
    BSF   PORTA
,2
    MOVFW   ComptMu
    CALL   LedTable
    MOVWF   PORTC
    Tem2ms                
;idem digit2         
    BCF   PORTA
,2
    
    BSF   PORTA
,3
    MOVFW   ComptMd
    CALL   LedTable
    MOVWF   PORTC            
;idem digit3
    Tem2ms
    BCF   PORTA
,3

    ENDM
    
;******************************************************************************* 
    
Tem2ms    MACRO
    LOCAL T1
    MOVLW 0x3
    MOVWF MEM1
    MOVLW 0x98
    MOVWF MEM
T1    DECFSZ MEM
, F            ; source issue de la macro delay_ms .2
    GOTO T1
    DECFSZ MEM1
, F
    GOTO T1
    
    ENDM

;*********************** TOUT COMMENCE ICI *************************************
    org 0X00            ;au rest le pointeur instruction est ICI
    GOTO debut            
;saut sur le label debut

    org 0X04
    MOVWF   Sauv            
;sauve W
    SWAPF   STATUS
,W        ; 
    MOVWF   Sauv
+1            ;sauve status
    
    BTFSS    PIR1
,TMR1IF        ;test flag si TIMER1
    GOTO    Int0            
;NON
    
    MOVLW    0x3C            
; int toute le 100ms    
    MOVWF    TMR1H
    MOVLW    0xB3
    movwf   TMR1L
    
    BCF    PIR1
,TMR1IF        ;RAZ du drapeau de TMR1
    INCF    Temp
,F            ; à 10 cela fera 1s
    INCF    Temp_Val
,F        ;tempo BP Val
    GOTO    IntS
    
Int0    BTFSS    INTCON
,T0IF        ;Test flag si TIMER0
    GOTO    IntS            
;on sort pour gerer l'affichage
    BCF    INTCON,T0IE        ;ARRET INT TMR0
    
    Aff7
    
    MOVLW    0XA
    MOVWF    TMR0            ; charge Timer0 pour 1ms
    BCF    INTCON,T0IF        ;RAZ Flag TIMER0
    BSF    INTCON,T0IE        ;mise en service INT TMR0
    
IntS    SWAPF    Sauv+1,0
    MOVWF    STATUS            ;restaure status
    SWAPF    Sauv, 1 
    SWAPF    Sauv, 0        ;restaure W

    RETFIE
    
;*********************** Alumage segments afficheur ****************************
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
   
;**********ici c'
est votre programme principale ou main ************************
debut
;*********************** 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            
;efface les sorties des ports
    CLRF   PORTC
 Banque1                
;accés bank1
    
    CLRF   TRISA            
;RA:RA5    en sortie
    
    MOVLW  B
'00000111'        ;RB0:RB1 en entrées
    MOVWF   TRISB
    
    CLRF   TRISC            
;RC0:RC7 en sortie
   
    MOVLW   B
'00000110'        ;PORTA digitale
    MOVWF   ADCON1

;*********************** validation des INT ************************************
    MOVLW   (1<<GIE)|(1<<PEIE)|(1<<T0IE)|(0<<INTE)|(0<<RBIE)|(0<<T0IF)|(0<<INTF)|(0<<RBIF)
    MOVWF    INTCON            ;Initialisation des INT
    
    BSF    PIE1
,TMR1IE        ;valide int TMR1
;******************* Initialisation des timers/compteurs ***********************       
;                   ici on va travailler avec le TIMER1 et TIMER0
;*******************************************************************************

    MOVLW    0x01
    MOVWF    OPTION_REG
    
 Banque0    
    MOVLW 0xA
    MOVWF TMR0
    
;**********************
    BSF T1CON, 0x4
    BCF T1CON
, 0x5
    MOVLW 0x3C
    MOVWF TMR1H
    MOVLW 0xB3
    movwf TMR1L
 
    BSF    T1CON
,TMR1ON        ; mise en service Timer1
    
;********************** fixation des variables *********************************
Raz_Var    CLRF    ComptSu            ;
    CLRF    ComptSd            ;
    CLRF    ComptMu            ;raz des variables Temps        
    CLRF    ComptMd            
;
    
Init_Va    MOVLW    ComptSu            
;intialise ou re les variables
    MOVWF    FSR            
;charge le pointeur de adresse unite S
    MOVLW    B
'10000001'        ;B0:B3 index sur 1er digit
    MOVWF    Index            
;B7: mode programmation
        
    
       
;********************** Boucle principale **************************************    
BouP    BTFSC    BP_Val            
;BP val appuiyé ?    
    GOTO    Plus            
;NON voir le BP plus
    GOTO    BouP
;*********************** Bouton plus *******************************************    
Plus    BTFSS    Index
,7            ;mode decomptage ?
    GOTO    Decom            ;oui
    
    BTFSC    BP_Plus            
;BP_Plus appuyé?
    GOTO    BouP            ;NON on reboucle sur Principale
    
    CALL    Temp800µs        
;petite tempo antirebond
Plus0    BTFSS    BP_Plus            
;BP_Plus relaché
    GOTO    Plus0            
;NON on boucle
    
    INCF    INDF
,F            ;adresse pointé +1
    
    MOVLW    0X0A            
;test butée 9
    
Plus1    SUBWF    INDF
,W
    
    BTFSC    STATUS
,C
    CLRF    INDF            
;si butée raz adresse pointé
    
    GOTO    BouP            
;on Reboucle sur boucle principale
;*******************************************************************************
    
Decom    NOP
    NOP                
;ici module de decomptage            
    GOTO    BouP    
;*********************** ici c'est des SPG *************************************
;ici spg car plusieurs fois utilisés dans le source sinon macro
;********************** Tempo de 800µs *****************************************
Temp800µs

    MOVLW 0x2
    MOVWF MEM_us
    MOVLW 0x9
    MOVWF MEM1_us
T0    DECFSZ MEM1_us, F        ; source issu de la macro delay_us .800
    GOTO T0
    DECFSZ MEM_us, F
    GOTO T0
    
    RETURN

    END

A+
PS j'ai passé le spg de la tempon 2ms en macro et fait une autre tempo pour anti rebond 800µs
Tu étais en boucle car le bit 7 de la structure de bits Index n’était pas a 1. j'ai rajouté cela avec fixation des variables la tu as 80% du projet :sifflotte:

compteur décompteur sur 7 segments
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#133 Message par Guest » dim. 4 déc. 2016 07:40

Je reviens sur la programmation modulaire pourquoi ne pas travailler de cette manière ?
Exemple pour la programmation du temps il nous faut:
-Le module BP (gestion des variables)
-Le module affichage (affiche les variables)
Et c'est tout .
Donc dans ton essai, pourquoi mettre le module décomptage, qui n'est pas utilisé et qui vient perturber ton test du code.

Le décomptage intervient dans le décomptage de tes variables il lui faut:
-le module BP (ON/OFF)
-le module décomptage (décompte les variables)
-Le module affichage (affiche les variables)
Et c'est tout.

La programmation modulaire te permet de tester les modules seuls.
-Affichage tourne tout seul(au rythme du timer0)
-Le décomptage suffit de charger les variables et de le faire tourner en boucle
-Le module BP qui suivant divers appuis sur BP change uniquement des variables

Dans tout cela, ces modules, ont un élément commun-> VARIABLE .Oui pour affichage c'est bien les variables a afficher, pour le décompteur c'est bien les variables a décompter et pour le BP c'est bien les variables a faire évoluer

Tout cela pour te dire,avant d'assembler les modules,il faut en prendre un, et effectuer des tests jusqu’à qu'il remplisse les conditions voulue, exemple le module affichage dans l’état convient pour le décomptage, pas pour la programmation temps (manque sélection du digit) il faudra lorsque tu vas te mettre la dessus , faire au niveau BouP, une boucle sans fin du style

Code : Tout sélectionner

BouP        GOTO BouP
et LA tu sera uniquement sur le module AFFICHAGE
Pour arrêter l'affichage et se concentrer sur un autre module interdire l'int du TIMER0 etc....


A+

PS dessolé comme DAB je suis un peu LONG. Mais si tu a compris cela, ça va te faire GAGNER un temps fou. Perso je ne programme que sur du modulaire sachant que la programmation est un jeu qui consiste a utiliser les variables (ou bits :wink: )comme vecteur d'info.
Modifié en dernier par Anonymous le dim. 4 déc. 2016 16:22, modifié 1 fois.

compteur décompteur sur 7 segments
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#134 Message par JMarc » dim. 4 déc. 2016 12:48

Bonjour Maï

maï a écrit :PS dessolé comme DAB je suis un peu LONG.


Ne soit pas désolé car même si je ne comprend pas tout, je passe beaucoup de temps a relire tout les posts et sa fini par me servir.
Mais c'est avec les exemples que je comprend le mieux. le code si dessus est en décorticage :roll: sous debug et a force de le faire tourné je fini par comprendre meme si pour l'instant j'ai du mal a comprendre l'intérêt d'utilisé l'adressage indirect, je trouve moins compliquer le direct.

Merci !

compteur décompteur sur 7 segments
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#135 Message par Guest » dim. 4 déc. 2016 16:13

j'ai du mal a comprendre l'intérêt d'utilisé l'adressage indirect, je trouve moins compliquer le direct.

dans ce cas donne moi ton code sur les BP que l'on regarde cela ou ton organigramme mon projet suit a la lettre celui ci viewtopic.php?f=11&t=370 en #6

compteur décompteur sur 7 segments
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#136 Message par JMarc » dim. 4 déc. 2016 19:33

Voici ce qu'il sort de mes idées en essayant d'utilisé l'adressage indirect

Code : Tout sélectionner

       
;********************** Boucle principale **************************************    
BouP    
    BTFSC    BP_Val            
;BP val appuiyé ?    RB1
    GOTO    Plus            
;NON voir le BP plus    
;    GOTO    BouP
    goto    Tbpval  
;   voir bouton val

;*********************** Bouton plus *******************************************    
Plus    BTFSS    Index
,7            ;mode decomptage ?
    GOTO    Decom            ;oui
    
    BTFSC    BP_Plus            
;BP_Plus appuyé?    RB0
    GOTO    BouP            
;NON on reboucle sur Principale
    
    CALL    Temp800µs        
;petite tempo antirebond
Plus0    BTFSS    BP_Plus            
;BP_Plus relaché
    GOTO    Plus0            
;NON on boucle
    
    INCF    INDF
,F            ;adresse pointé +1
    
    MOVLW    0X0A            
;test butée 9
 
    BTFSS    Index
,0
    BTFSC    Index
,2            ;on test les digits max 9 ou 5
    GOTO    Plus1
    
    MOVLW    0X6            
;test butée 5
  
Plus1    SUBWF    INDF
,W
    
    BTFSC    STATUS
,C
    CLRF    INDF            
;si butée raz adresse pointé
    
    GOTO    BouP            
;on Reboucle sur boucle principale
;*******************************************************************************
Tbpval

    BTFSS   BP_Val           
;BP_val appuyé?    RB1
    GOTO    Tbpval           
;NON on reboucle sur Principale
    CALL    Temp800µs        
;petite tempo antirebond  
 

    rlf     Index
,;   rotation par la gauche
    bcf     Index
,;   le carry etait a 1 donc je traite ainsi
    btfsc   Index
,;   test si > que ComptMd
    goto    FinTbpval   
; oui alors traitement 
    incf    FSR
,f       ;   non alors variable suivante
    bsf     Index
,7     ; garder la main en reglage
    goto    BouP
FinTbpval
    bcf     Index
,4     ; traitement sortie
    bsf     Index
,0     ; remettre sur ComptSu
    movlw   ComptSu
    movwf   FSR
    bsf     Index
,;    mettre a 0 si l'on veut aller en decomtage
    goto    BouP
;*******************************************************************************    
Decom    NOP
    NOP                ;ici module de decomptage

compteur décompteur sur 7 segments
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#137 Message par Guest » dim. 4 déc. 2016 20:23

oui iul y a des bonnes idées et je vois que tu lis mes posts :sifflotte: il te manque un peu d'ordre dans tout cela :bravo:

compteur décompteur sur 7 segments
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#138 Message par JMarc » dim. 4 déc. 2016 23:58

Merci !

compteur décompteur sur 7 segments
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#139 Message par Guest » lun. 5 déc. 2016 12:06

JMarc a écrit :Merci !

c'est Bien mais pas la fin :sifflotte:

Code : Tout sélectionner

;**********************
Val0    BTFSS    Index,7            ;mode Decomptage?
    GOTO    BouP            ;oui on touche a RIEN et on boucle
        
    BCF    STATUS
,C
    RLF    Index
,F            ;décalage index digit vers la GAUCHE
    
    BTFSC    Index
,4            ;Index hors butée?
    GOTO    Init_Va            ;oui on réinitialise les variables
    BSF    Index
,7                ;repositionne le bit programmation
    
    INCF    FSR
,F            ;NON pointeur variable +1
    
    GOTO    BouP            
;boucle principale


Petite explication POUR CE QUI NOUS LISENT
on part de cela

Code : Tout sélectionner

    index=    B'10000001'        ;B0:B3 index sur 1er digit B7: mode programmation


pour au final apres appui sur valida faire

Code : Tout sélectionner

    Index    B'10000010'        ;B0:B3 index sur 1er digit B7: mode programmation


On fait cela par:
-rotation a GAUCHE AVEC CARRY cela implique que carry est a ZERO lorsque tu fais ce type de rotation, TU ne peux garantir que carry est a zero donc avant on met carry a zero, on fait la rotation gauche,
-puis POURQUOI allez plus loin si on est hors butée? Donc test butée si plus grand on réinitialise les variables car a l'init on est bien ou on doit bien initialise c'est variables OUI OUI
- si dans butée on fini avec index en repositionnant le bit programmation temps(7)
et en fin incrémentation du pointeur, puis retour BouP

Voila pas très complique et en adéquation avec mon organigramme

A+

PS heu Index n'est pas la pour faire beau, c'est une structure de bits avec:
bit 7 ->décomptage ou programmation
bit6 -> gestion alarme
bit 0:3 -> sélection digit

cette sélection il va falloir bien l'utiliser dans le module affichage pour faire clignoter l'afficheur sélectionné. encore 5% et le mode programmation est terminé allez JMarc.....

AH oui mon code démarre a Val0 car avant il y a la gestion de BP validation sur BP appui LONG. Donc la c'est la sortie après l'anti rebond :wink:
Modifié en dernier par Anonymous le lun. 5 déc. 2016 12:28, modifié 2 fois.

compteur décompteur sur 7 segments
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#140 Message par Guest » lun. 5 déc. 2016 12:21

JMarc pourquoi cette FinTbpVal :mur: Ici bien plus court, et de plus nécessaire (fin de décomptage on va passer par la, en cas d’arrêt de décomptage on va passer par la )

Alors que tu as a l'int du programme cela

Code : Tout sélectionner

;********************** fixation des variables *********************************
Raz_Var    CLRF    ComptSu            ;
    CLRF    ComptSd            ;
    CLRF    ComptMu            ;raz des variables Temps        
    CLRF    ComptMd            
;
    
Init_Va    MOVLW    ComptSu            
;initialise ou re les variables
    MOVWF    FSR            
;charge le pointeur de adresse unité S
    MOVLW    B
'10000001'        ;B0:B3 index sur 1er digit
    MOVWF    Index            
;B7: mode programmation
    
;********************** Boucle principale **************************************    
BouP    BTFSC    BP_Val            
;BP val appuiyé ?    
    GOTO    Plus            
;NON voir le BP plus

    CALL    Temp800µs        
;OUI petite tempo anti rebond
    BTFSC    BP_Val            
;BP_Val relâche
    GOTO    Val0            
;oui


Retourner vers « Langage ASM »

Qui est en ligne

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