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
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 je veut resoudre le probleme du rebond du bouton
voici le code non modifié juste pour que tu vois ou j'en suis
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
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
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
en recopiant le source j'ai trouvé cela
c'est quoi DIRPORTB?
tu fais
je viens de voir aussi cela
tu fais comment pour sortir de:
si pas gotoSuitevalid tu fais la tempo pius de nouveau testBP si pas gotoSuite tempo de nouveau .......................
A+
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
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
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
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
regarde JMarc sans un goto depuis l'affichage tout simple
avec un bouton
avec 2 boutons
A+
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
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
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
pour les timers je nage completement, nous verrons plus tard
compteur décompteur sur 7 segments
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 fonctionneCode : 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
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
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 54 invités