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

Décompteur 7 segments programmable
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#1 Message par Guest » lun. 26 déc. 2016 20:15

voila avec l'utilisation de mes macros qui est bien sur plus souple, et un début, pour l'utilisation du module DÉCOMPTAGE s'il y a des courageux pour finir :sifflotte:

Code : Tout sélectionner

;*******************************************************************************
;            Descriptif du projet:
;Decompteur programmable, sur 4 digits 7 segemnts,
;2 BP: un,+ variable. Un validation deplacement et demarrage decompteur.
;   
; Le projet peut etre vue comme 4 modules independants:
;-Affichage des 4 digits avec selection du digit pour programmation
;-BP pour la programmation,selection digit ,Arrêt/marche decompteur
;-Décompteur, decompte les minutes et secondes preprogrammees
;-Alarme pas traite dans le source   
;

;*******************************************************************************
;          Note:PIC 16F877   
;                            
;*******************************************************************************
    ERRORLEVEL-302
   
   list      p=16f877      ;liste directive du 16F877
   #include    "p16f877.inc"
   
;********************** chargement des Macros **********************************   
   #include   /home/moi/MPLABXProjects/8bits_MACRO_ASM/Macro_16F_ASM.asm
;***************************** Configuation des fuses **************************
;         
; CONFIG
; __config 0x3D3A
 __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _CP_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF
;
;
;*********************** déclaration des variables *****************************
;Toutes ces variables sont globales, pour le fichier source.
; MEM MEM_us MEM1 MEM1_us MEM2 sont globales,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 et digit concerné
Temp       res   1         ;compteur temps
Temp_Val    res   1         ;compteur temps touche val      
Sauv       res 2         ;pour sauvegarde (2) 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 ************************************************
; les MACRO sont regroupe dans le fichier Macro_16F_ASM.asm
;   
;*********************** TOUT COMMENCE ICI *************************************
   ORG 0X00                ;au Rest le pointeur instruction est ICI
   GOTO Debut              ;saut sur le label debut

   ORG 0X04         ;vecteur INT
   MOVWF   Sauv         ;sauve W
   SWAPF   STATUS,W      ;
   MOVWF   Sauv+1         ;sauve status
   
   BTFSS   PIR1,TMR1IF      ;test flag si TIMER1
   GOTO   Int0         ;NON test TMIER0
   
   MOVLW   0x3C         ; int toute le 100ms   
   MOVWF   TMR1H
   MOVLW   0xB3         ;et on recharge le TIMER1
   MOVWF   TMR1
   
   BCF   PIR1,TMR1IF      ;RAZ du drapeau de TMR1
   
   INCF   Temp,F         ; à 10 cela fera 1s
   INCF   Temp_Val,F      ;tempo pour le BP Val
   
;   BTFSC   Index,7         ; en programmation temps
;   GOTO   IntS         ; oui

;   MOVLW   0X0A         ;on test si 10fois 100mS
;   SUBWF   Temp,W
;   BTFSS   STATUS,Z
;   GOTO   IntS         ;NON
;   CLRF   Temp         ;OUI RAZ compteur temps et on decompte
   
;   appel module decomptage
   
   GOTO   IntS
   
Int0   BTFSS   INTCON,T0IF      ;Test flag si TIMER0
   GOTO   IntS         ;NON on sort
   BCF   INTCON,T0IE      ;arret int TMR0
   
   Aff7S            ; appel a la macro Aff7S
   
   MOVLW   0XA
   MOVWF   TMR0         ;Apres aff7C 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
;*******************************************************************************
   
;TIMER0 nous donne 1ms pour le module clavier et decomptage, apres affichage segments

   Timer0 .1000         ;int toute les 1ms
;**********************

;TIMER1 dans la programation gere le temps de clignotement sinon tempo du decomptage   
;et temps appui sur BP validation
   Timer1   .100000         ;int toute les 100ms
   
   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 le pointeur sur 1er variable
   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

   CALL   Temp800µs      ;OUI petite tempo anti rebond
   
   CLRF   Temp_Val      ;declenche la tempo   

Val1   BTFSC   BP_Val         ;malgres la tempo
   GOTO   Val0         ;le BP a etait relaché donc on sort

   BTFSS   Temp_Val,2      ;appuie long 400ms?
   GOTO   Val1         ;NON on reboucle

   BTFSS   Index,7         ;fin tempo mode programmation?
   GOTO   Raz_Var         ;oui arret decomptage on boucle sur RAZ
   
   BCF   Index,7         ;NON on passe en decomptage
   GOTO   Start_D         ;on lancement decomptage
   
;**********************
Val0   BTFSS   Index,7         ;mode Decomptage?
   GOTO   Decom         ;oui
      
   BCF   STATUS,C
   RLF   Index,F         ;decalage index digit vers la GAUCHE
   
   BTFSC   Index,4         ;Index hors butée?
   GOTO   Init_Va         ;oui on reinitialise les variables
   
   BSF   Index,7         ;repositionne le bit programmation
   
   INCF   FSR,F         ;NON pointeur variable +1
   
   GOTO   BouP         ;boucle principale
   
;*********************** 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
   
   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
   
;*******************************************************************************   
Start_D   BTFSS   BP_Val
   GOTO   Start_D         ;attend que BP_Val soit relaché
   CLRF   Temp         ;RAZ du compteur temps, decomptage parti
   
;*********************** Lance decomptage **************************************   
Decom   MOVFW   ComptSu         ;on effectue un OU logique
   IORWF   ComptSd,W
   IORWF   ComptMu,W      ;avec les variables Temps et on
   IORWf   ComptMd,W      ;test si zero
   BTFSC   STATUS,Z
   GOTO   Init_Va         ;oui initialise variables

   MOVLW   0X0A         ;on test si 10fois 100mS
   SUBWF   Temp,W
   BTFSS   STATUS,Z
   GOTO   BouP         ;NON
   CLRF   Temp         ;OUI RAZ compteur temps et on decompte

;***********************                *   
   DECF   ComptSu,F      ;uS-1
   BTFSS   ComptSu,7      ;debordement?
   GOTO   BouP         ;NON   
   MOVLW   0X09
   MOVWF   ComptSu         ;uS= 9
   
;***********************                *   
   DECF    ComptSd,F      ;Sd -1
   
   BTFSS   ComptSd,7      ;debordement?
   GOTO   BouP         ;NON
   MOVLW   0X5
   MOVWF   ComptSd         ;Sd =9

;***********************                * ici c'est notre macro   
   DECF   ComptMu,F      ;Mu-1

   BTFSS   ComptMu,7      ;debordement?
   GOTO   BouP         ;NON
   MOVLW   0X9
   MOVWF   ComptMu         ;Mu =9
   
;***********************                *
   DECF   ComptMd         ;Md -1   
   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

   delay_us .800
   
   RETURN
   
;*********************** Tempo de 1ms ******************************************
   END            ;fin pour le compilateur


sur ce bonne fin d'année a bientôt, le plaisir de vous retrouver en 2017

A+

PS pour la programmation modulaire ici http://www.techno-science.net/?onglet=g ... tion=11420 aussi ou sur votre moteur de recherche favori

Décompteur 7 segments programmable
JJE
Amateur
Amateur
Messages : 143
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#2 Message par JJE » jeu. 21 juin 2018 14:38

Bonjour Guest,
Je tombe sur ce vieux post, resté sans réponse, un peu par hasard.
C'est le premier source que je rencontre en code relogeable, il va me falloir creuser un peu. Mais j'y lit :

; les MACRO sont regroupe dans le fichier Macro_16F_ASM.asm


Ce fichier a-t-il été copié dans un autre post ? où pourrais-je le trouver ?
Merci d'avance
Cordialement
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Décompteur 7 segments programmable
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1086
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » jeu. 21 juin 2018 15:41

bonjour,



voir sur le site de Bigonoff

ou dans ce zip
macros.zip


ou encore
m16f877.asm.txt
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Décompteur 7 segments programmable
Jérémy
Administrateur du site
Administrateur du site
Messages : 2155
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » jeu. 21 juin 2018 16:11

Bojour à tous,

@JJE : Guest est un ancien membre de FantasPIC, qui n'ai plus le bienvenue ici . Tu n'auras aucune réponse de sa part ! :furieux:

viewtopic.php?f=28&t=447 , regarde j'ai reçu plusieurs plaintes dans ce genre. Et ma réponse fut sans appel ( non publié ) mais je l'ai remis a sa place !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Décompteur 7 segments programmable
JJE
Amateur
Amateur
Messages : 143
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#5 Message par JJE » jeu. 21 juin 2018 17:51

OK Jérémy, ça a l'air effectivement bien grave :roll:

merci à paulfjujo

Cordialement
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Décompteur 7 segments programmable
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1086
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » jeu. 21 juin 2018 19:30

bonsoir,

Ah oui,
j'avais oublié la relation
GUEST=MAi

C'est pas le PEROU

Décompteur 7 segments programmable
JMarc
Confirmé
Confirmé
Messages : 518
Enregistré en : août 2016
Localisation : Dans le Sud...

#7 Message par JMarc » jeu. 21 juin 2018 23:29

Bonjour tout le monde


JJE a écrit :Bonjour Guest,
Je tombe sur ce vieux post, resté sans réponse, un peu par hasard.
C'est le premier source que je rencontre en code relogeable, il va me falloir creuser un peu. Mais j'y lit :

; les MACRO sont regroupe dans le fichier Macro_16F_ASM.asm


Ce fichier a-t-il été copié dans un autre post ? où pourrais-je le trouver ?
Merci d'avance
Cordialement



Non ce fichier n’est pas dans un autre post ni sur un autre forum. D’ailleur Il a demandé de supprimer toute trace de lui sur le forum

Pour ma part, je me suis lancé dans un lourd examen qui ne me laisse pas le temps pour mes montages mais si tu as besoin d’aide cela sera volontier

Jean-Marc

Décompteur 7 segments programmable
JJE
Amateur
Amateur
Messages : 143
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#8 Message par JJE » ven. 22 juin 2018 03:16

pour paulfjujo, merci, j'ai compris que j'ai raté un épisode tumultueux avec Guest alias MAI.
Bon courage à toi JMarc
Cordialement
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité