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

#41 Message par JMarc » sam. 5 nov. 2016 12:02

Pour l'instant j'ai juste fait pour un seul bouton qui passe dans la routine après appuis sans test de relache que je vais rajouté bien sur et si nouveau appuis cela ressort de la routine. en réél cela fonctionne mais pas convenablement. J'ai commencé a préparer pour les autres boutons mais pas encore en fonction, une seule chose a la fois :sifflotte: je veut resoudre le probleme du rebond du bouton

voici le code non modifié juste pour que tu vois ou j'en suis

Code : Tout sélectionner

;*******************************************************************
;
;********************************************************************
;
;
   Auteur   :maï/JMarc
;   Version   :1.0
;   Date   :09/2016   
;
;********************************************************************
;
            Note:PIC 16F877           
;********************************************************************
   ERRORLEVEL-302
   ERRORLEVEL
-305
   
   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 ***************
 DIRPORTB    EQU    B'00000111'    ; Direction PORTB
;********************************************************************
    
#DEFINE BOUTONPLUS PORTB,0
#DEFINE BOUTONMOINS PORTB,1
#DEFINE BOUTONVALID PORTB,2

;*********************** Assignations *******************************

DRAM   EQU 0x20         ;début Mémoire Ram banque0
FRAM    EQU 0X7F         
;fin Mémoire Ram banque0
Fosc   EQU .04            
;Valeur du quartz en MHz      
;********************** calcul pour une boucle de temporisation ****************
;
 a 2 niveaux sur un 16F boucle secondaire en 756 cycles
;*******************************************************************************   
TEMPS1   EQU .2000000         
;en ns a modifier suivant besoin ici 2ms
TEMPO   EQU 
((TEMPS1/(.4000/Fosc))/.768)

;**********************
 calcul pour timer1 *************************************   
DIVISEUR1   equ   .8         
;ici 8 du TMR
TEMPS   EQU .100000         
;Valeur en µs a modifier suivant besoin
TIMER1   EQU .65535
-((Fosc*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
   
;*********************** GLOBAL ************************************************
   GLOBAL   ComptSu
   GLOBAL   ComptSd
   GLOBAL   ComptMu
   GLOBAl   ComptMd
 udata    0x30
ComptSu   res 1            ;comteur seconde
ComptSd   res 1
ComptMu   res 1            ;compteur minute
ComptMd   res 1
   
;*********************** Définitions variables en RAM PAGE0 *********
    CBLOCK   0x20
    Sauv
    Sauv1
    Temp            ;compteur temps
    i,j               ;temporaire boucle
   
   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
   
;*********************** 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
    retlw   B'
00000000'             ; Effacement toutes LED
   
;*******************************************************************
;         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
    movlw   DIRPORTB    ; Direction PORTB
    movwf   TRISB        ; écriture dans registre direction
   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            ;acces banque 0 
   
;******************* 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
   
;*********************** Affichage sur 4 digits ********************************
AFFI  
   BTFSC    BOUTONVALID
   goto Traitementboutonvalid
   
   
   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
   
;********************** Boucle principale *************************************   
BouP   MOVLW   0X0A         ;on test si 10fois 100mS
   SUBWF   Temp,W
   BTFSS   STATUS,Z
   GOTO   AFFI         ;NON
   CLRF   Temp         ;RAZ compteur temp
   INCF   ComptSu         ; oui compteur seconde +1

   MOVLW   0X0A         ; on test si poid faible >9
   SUBWF   ComptSu,W
   BTFSS   STATUS,C
   GOTO   AFFI         ;NON         
   INCF   ComptSd         ;oui dizaine+1 unité=0
   CLRF   ComptSu
   
   MOVLW   0X06         ;ici on test si compteur =60S
   SUBWF   ComptSd,W
   BTFSS   STATUS,Z
   GOTO   AFFI         ;NON on affiche et boucleP
   CLRF   ComptSu         ;RAZ du compteur
   CLRF   ComptSd
   INCF   ComptMu         ;minute +1
   
   MOVLW   0X0A         ; on test si poid faible >9
   SUBWF   ComptMu,W
   BTFSS   STATUS,C
   GOTO   AFFI         ;NON         
   INCF   ComptMd         ;oui dizaine+1 unité=0
   CLRF   ComptMu

   MOVLW   0X06         ;ici on test si compteur =60Mn
   SUBWF   ComptMd,W
   BTFSS   STATUS,Z
   GOTO   AFFI         ;NON on affiche et boucleP
   CLRF   ComptSu         ;RAZ du compteur
   CLRF   ComptSd
   
;   Alarm
   
   GOTO   AFFI         ; affiche
;*********************** Ici c'
est les sous Programmes *************************   
Tem20ms        clrf i
   movlw .20
   movwf    j
   goto Tem0
   
Tem2ms   CLRF   i
   MOVLW   TEMPO
   MOVWF   j         
;charge variable boucle principale
   
Tem0   DECFSZ   i         
;test si boucle secondaire =0
   GOTO   Tem0         
;NON retoure dans boucle secondaire
   DECFSZ   j         
;test si boucle principale =0
   GOTO   Tem0         
;NON recharge boucle secondaire
   RETURN            
;oui fin de la tempo
   
;*****************************************************************************
Traitementboutonvalid
   BSF   PORTA
,0         ;allumage digit0
   MOVFW   ComptSu         
;charge la donnée
   CALL   LedTable      
;recherche donnée
   MOVWF   PORTC         
;envoi donnée
   CALL   Tem20ms         
;petite tempo 2ms   
bouclevalid
   nop
    BTFSC    BOUTONVALID
   goto Suitevalid
   CALL    Tem20ms
  goto bouclevalid
Suitevalid
  CALL Tem20ms
   BCF   PORTA
,0         ;arrêt digit0
  CLRF   Temp         
;RAZ compteur temp
   GOTO AFFI  
   
   
   
   
   
  
  RETURN
Traitementboutonplus
   incf    ComptSu
   
   RETURN   
   
Traitementboutonmoins
    decf   ComptSu 
    
    RETURN
   
    END

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

#42 Message par Guest » sam. 5 nov. 2016 12:26

Déja tu peux me dire, ce que vient faire ton test du BP validation dans la gestion de ton affichage ?
Surtout pas la bientôt ,il va falloir la virer cette gestion et la passer en SPG avec du style CALL AFFi7

amha il faut la mettre en fin de boucle vers Alarm qui est la fin de ta boucle principale le label BouP (est le début de ta boucle principale)
puis pose le test de BP validation appuyé si pas goto BouP

si oui

pose un nop
et passe sous debug pour voir tout cela

Apres si ok toujours dans le si oui tu poses la tempo et de nouveau un test si BP toujours appuyé

si oui tu boucles sur la même ligne
si non le NOP
regarde l’évolution sous debug

PS merci pour le code je le reprend

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

#43 Message par Guest » sam. 5 nov. 2016 12:50

en recopiant le source j'ai trouvé cela

Code : Tout sélectionner

   CLRF   TRISA         ;PortA en sortie
   movlw   DIRPORTB    ; Direction PORTB
   movwf   TRISB        ; écriture dans registre direction
   CLRF   TRISC         ;Broches RC0:RC7 en sortie

c'est quoi DIRPORTB?
tu fais

Code : Tout sélectionner

MOVLW B'00000111'      ;RB0:RB2 en entrée
MOVWF TRISB


je viens de voir aussi cela

Code : Tout sélectionner

bouclevalid
   nop
    BTFSC    BOUTONVALID
   goto Suitevalid
   CALL    Tem20ms
  goto bouclevalid

tu fais comment pour sortir de:
si pas gotoSuitevalid tu fais la tempo pius de nouveau testBP si pas gotoSuite tempo de nouveau .......................

A+

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

#44 Message par JMarc » sam. 5 nov. 2016 18:21

J'avais mis le test avant la gestion affichage car c'est l'endroit où il y a le plus de passage (2millisecondes je crois), si j'ai bien compris après l'étiquette ;alarm il y a un passage toute les seconde ?
Juste après alarm j'ai un retour vers l'affichage ( goto affi) et non vers BouP.
Si je met vers BouP, mon affichage ne sera plus rafraîchi :cry:

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

#45 Message par Guest » sam. 5 nov. 2016 18:48

que tu mettes ton test en haut ou en bas c'est pareil sauf que tu mélanges affichage et gestion des BP

tu as regardé pour cette sortie de boucle et pour la gestion du TRISB??

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

#46 Message par Guest » sam. 5 nov. 2016 18:51

Cette histoire de rafraîchissement , je ne sais pas ce que tu en penses, mais c'est un peu lourd .Il faudrait sans affranchir, et coller cela a un autre TIMER avec une INT

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

#47 Message par Guest » sam. 5 nov. 2016 19:09

regarde JMarc sans un goto depuis l'affichage tout simple
avec un bouton

Code : Tout sélectionner

   CLRF   ComptSd

   BTFSS    BOUTONVALID
   GOTO       AFFI       ;pas de bouton appuye
   NOP             ;bouton appuye
;   Alarm
   
   GOTO   AFFI         ; affiche

avec 2 boutons

Code : Tout sélectionner

   CLRF   ComptSd
;*******************************************************************************
   BTFSS    BOUTONVALID
   GOTO       BP_plus       ;pas le bouton validation appuyé
   NOP             ;bouton appuyé
   ---            ;on gere tout ce qui est de la validation
   ---                ;
   ---
   GOTO    AFFI          ; on retourne dans la boucle
;*******************************************************************************   
BP_plus  BTFSS   BOUTONPLUS       ; test bouton plus
   GOTO   AFFI          ; pas le bouton plus appuye
   NOP             ; appuyé
   ---
   ---             ; on gère tout ce qui est du BP_PLUS
   
;   Alarm
   
   GOTO   AFFI          ; on retourne dans la boucle


A+
Modifié en dernier par Anonymous le sam. 5 nov. 2016 19:10, modifié 1 fois.

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

#48 Message par JMarc » sam. 5 nov. 2016 19:09

maï a écrit :que tu mettes ton test en haut ou en bas c'est pareil sauf que tu mélanges affichage et gestion des BP

tu as regardé pour cette sortie de boucle et pour la gestion du TRISB??


J'ai essayé en bas, je n'arrive pas a le faire fonctionner du coup, tetu moi, j'ai remis en haut, fait comme tu m'as dit pour les tests et après quelques fonctionnement cela fonctionne, je sais trop de tempo mais nous verrons plus tard. pour la sorti de boucle, pour moi cela fonctionne :sifflotte:

Code : Tout sélectionner

Traitementboutonvalid
   nop
   call        Tem20ms
   BTFSC    BOUTONVALID
   goto Traitementboutonvalid
   nop

   BSF   PORTA
,0         ;allumage digit0
   MOVFW   ComptSu         
;charge la donnée
   CALL   LedTable      
;recherche donnée
   MOVWF   PORTC         
;envoi donnée
   CALL   Tem20ms         
;petite tempo 2ms   
bouclevalid
   nop
    BTFSC    BOUTONVALID
   goto Suitevalid
   CALL    Tem20ms
  goto bouclevalid
Suitevalid
  CALL Tem20ms
   BTFSC    BOUTONVALID
   goto Suitevalid
   nop
  BCF   PORTA
,0         ;arrêt digit0
  CLRF   Temp         
;RAZ compteur temp
   GOTO AFFI  


je continu pour rajouté la fonction changement des unités dans traitementboutonvalid

pour l'affichage, oui c'est lourd mais j'ai compris :roll:
pour les timers je nage completement, nous verrons plus tard

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

#49 Message par Guest » sam. 5 nov. 2016 19:13

JMarc a écrit :J'ai essayé en bas, je n'arrive pas a le faire fonctionner du coup, tetu moi, j'ai remis en haut, fait comme tu m'as dit pour les tests et après quelques fonctionnement cela fonctionne, je sais trop de tempo mais nous verrons plus tard. pour la sorti de boucle, pour moi cela fonctionne :sifflotte:

Code : Tout sélectionner

Traitementboutonvalid
   nop
   call        Tem20ms
   BTFSC    BOUTONVALID
   goto Traitementboutonvalid
   nop

   BSF   PORTA
,0         ;allumage digit0
   MOVFW   ComptSu         
;charge la donnée
   CALL   LedTable      
;recherche donnée
   MOVWF   PORTC         
;envoi donnée
   CALL   Tem20ms         
;petite tempo 2ms   
bouclevalid
   nop
    BTFSC    BOUTONVALID
   goto Suitevalid
   CALL    Tem20ms
  goto bouclevalid
Suitevalid
  CALL Tem20ms
   BTFSC    BOUTONVALID
   goto Suitevalid
   nop
  BCF   PORTA
,0         ;arrêt digit0
  CLRF   Temp         
;RAZ compteur temp
   GOTO AFFI  


je continu pour rajouté la fonction changement des unités dans traitementboutonvalid

pour l'affichage, oui c'est lourd mais j'ai compris :roll:
pour les timers je nage completement, nous verrons plus tard



Tu devrais si cela ne fonctionne pas faire comme je te propose avec juste des NOP et sous debug
De meme je ne comprend pas .Cela ne fonctionne pas ,oui mais QUOI

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

#50 Message par Guest » sam. 5 nov. 2016 19:17

ah oui aussi attention au test BTFSS et BTFSC suivant comme est câble ton bouton cela change parfois je me plante moite aussi :sifflotte:


Retourner vers « Langage ASM »

Qui est en ligne

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