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
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#21 Message par Guest » dim. 25 sept. 2016 10:27

detail sur les global en #20
Allez la suite.
Tu as vu, nous avons 2 types de tempo. Une issu de int et une de la boucle 2ms. Je préféré celle de l'int, car pendant la tempo dans la boucle on est dedans et si on doit rafraîchir les digits ,c'est pas le moment de se trouver coincé, dans une boucle une fois pas 2 :wink:

Pour la suite si tu le veux bien on vas rajouter 3 boutons
1 pour + un compteur
1 pour - le compteur
1 pour valider le contenu du compteur

Puis nous soumettrons ce compteur a nos variables: CompS et CompM si égal on allumera une LED

Si nous avons besoin de tempo on passera par le timer1 est il va nous en falloir.
Car tu as bien compris que ce fameux compteur est de la forme CompButS et compButM .Donc sur ces variables on doit pouvoir passer des md a Su est cela avec uniquement 3 boutons.

Pour accorder nos violons

on part avec cela

Code : Tout sélectionner

;*******************************************************************
;
;********************************************************************
;
;   Auteur   :maï/JMarc
;   Version   :1.0
;   Date   :09/2016   
;
;********************************************************************
;            Note:PIC 16F876A_04            
;********************************************************************
   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 ***************
 
;*********************** Assignations *******************************

DRAM   EQU 0x20         ;début Mémoire Ram banque0
FRAM    EQU 0X7F         ;fin Mémoire Ram banque0
Fosc   EQU .20            ;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
   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            ;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   BSF   PORTC,0         ;allumage digit0
   MOVFW   ComptSu         ;charge la donnée
   CALL   LedTable      ;recherche donnée
   MOVWF   PORTB         ;envoi donnée
   CALL   Tem2ms         ;petite tempo 2ms   
   BCF   PORTC,0         ;arrêt digit0
   
   BSF   PORTC,1
   MOVFW   ComptSd
   CALL   LedTable
   MOVWF   PORTB
   CALL   Tem2ms         ;idem digit1
   BCF   PORTC,1
   
   BSF   PORTC,2
   MOVFW   ComptMu
   CALL   LedTable
   MOVWF   PORTB
   CALL   Tem2ms         ;idem digit2         
   BCF   PORTC,2
   
   BSF   PORTC,3
   MOVFW   ComptMd
   CALL   LedTable
   MOVWF   PORTB         ;idem digit3
   CALL   Tem2ms
   BCF   PORTC,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 *************************   
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
   
    END


A toi de me donner ce bout de code si tu le veux bien

A=

PS allez une piste pour changer de unité a dizaine on va plus ou moins resté longtemps sur le bouton valid ,je le vois comme cela, Si tu as mieux je suis preneur
Modifié en dernier par Anonymous le dim. 25 sept. 2016 10:45, modifié 1 fois.

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

#22 Message par Guest » dim. 25 sept. 2016 10:34

je pensais que quelqu'un allez me demander pour /768 NON?
bon je remets tout cela dans ma culotte :lol:

a+

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

#23 Message par JMarc » dim. 25 sept. 2016 10:58

Ok, je repars avec ton listing mais à partir de ce soir
Pour les déclarations /768 et autres, c'est flou pour moi.
Je regarderai dans la semaine.

Pour les entrées ? Avec interruptions ou pas ? Sur quel port ? Si je met tout sur portb cela m'arrangerai. Du coup je décale les segments sur portc avec commande sur porta si cela te va ?

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

#24 Message par Guest » dim. 25 sept. 2016 11:06

On fait le contraire donne moi ta base de travail avec les ports configurés
pour 768 c'est le NB de cycles de la boucle secondaire le DECFSZ et le GOTO -> 3 cyles *256 pour le compteur i ->768

heu pour les INT ,je viens de te dire qu'il faut utiliser l'interruption de timer car rafraîchissement des digits :sifflotte:
A+

PS tu as vu pour les globales??????

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

#25 Message par JMarc » dim. 25 sept. 2016 23:45

Bonsoir

D'accord pour la déclaration en mémoire des globales.
Cette semaine, moins de temps cause il y a aussi le travail quotidien, mais j'aurai le temps de réfléchir a tout cela :sifflotte:

Donc je résume, je met les données sur portc, la commande des afficheurs sur porta, je passe portb en entrée, il faut que je vérifie ma platine pour les boutons poussoir et au cas je met ou non le portb avec les résistances de rappel. Tout cela ne me pose aucun problème.

Je me sert de la boucle de rafraîchissement des afficheurs pour lire le portb et grâce a des btfss ou btfsc et des goto pour traiter les boutons poussoir. J'essaie de mêtre le moins de call possible pour économiser la pile, :roll:

Une fois fait je verrai pour les variables, une chose à la fois.

La je me fais plaisir car la compilation réussi et je peut tracer avec debug, et j'arrive à transférer dans le pic.

Je dois commander des composants, pense tu que l'on va resté sur du 16f877 ou bien me conseille tu de passer sur autre chose ?

Encore merci

jean-Marc

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

#26 Message par Guest » lun. 26 sept. 2016 10:26

Bonjour

Cela tombe bien, car ici de même, ma moitié est de repos, donc 2 jours pas très dispos. Puis départ pour le Japon, voir notre fille(début octobre).

Pour le compteur décompteur:
Déjà il faut refaire la partie compteur (INCF) et la passer en décompteur(DECF).

Je te laisse faire cela ,tu ne donnera le code sur lequel tu veux que l'on travaille .Pour les composants je te propose d'acheter un ou deux 18F4525. C'est ce que j'utilise identique, broches pour broches avec 16f877 si tu le veux bien :wink:

A+

PS:Je passerais dans l’après-midi

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

#27 Message par Guest » jeu. 13 oct. 2016 16:57

bonjour JMarc

Tu as terminé ce minuteur pour œuf dur :wink:

A+

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

#28 Message par JMarc » jeu. 13 oct. 2016 23:42

Bonjour Maï

Ces derniers jours ne m'ont pas permis de pouvoir continuer.

J'en suis je resté si bouton appuyer alors sauter vers afficher qu'un seul afficheur auquel j'ai mis deux tempo pour palier au rebond du bouton et ça fonctionne.
Je lis le forum tout les jours mais pas assez de forme pour faire mes essais.

Mais ça va venir :wink:

compteur décompteur sur 7 segments
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#29 Message par Temps-x » ven. 14 oct. 2016 15:55

Bonjour Maï et JMarc,

humour!! Dépêche toi, j'ai faim

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

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

#30 Message par Guest » dim. 16 oct. 2016 11:54

Bonjour JMarc

JMarc a écrit :
Ces derniers jours ne m'ont pas permis de pouvoir continuer.

J'en suis je resté si bouton appuyer alors sauter vers afficher qu'un seul afficheur auquel j'ai mis deux tempo pour palier au rebond du bouton et ça fonctionne.
Je lis le forum tout les jours mais pas assez de forme pour faire mes essais.

Mais ça va venir :wink:


Et bien le plaisir de voir ton code ,je suis un peu plus dispo

A+


Retourner vers « Langage ASM »

Qui est en ligne

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