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 ---
- 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 ---
Modérateur : mazertoc
compteur décompteur sur 7 segments
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
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
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
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
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
compteur décompteur sur 7 segments
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 ?
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
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
A+
PS tu as vu pour les globales??????
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
A+
PS tu as vu pour les globales??????
compteur décompteur sur 7 segments
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
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,
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
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
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,
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
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
A+
PS:Je passerais dans l’après-midi
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
A+
PS:Je passerais dans l’après-midi
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
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
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
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
Bonjour JMarc
Et bien le plaisir de voir ton code ,je suis un peu plus dispo
A+
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
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