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
compteur décompteur sur 7 segments
pas facile, j'ai arrêté le timer mais j'ai un décompte de trop. j'ai tourné ca a ma sauce.
pour etre a 0
Code : Tout sélectionner
;*******************************************************************
;
;********************************************************************
;
; Auteur :maï/JMarc
; Version :1.1
; Date :11/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 ***************
;
;********************************************************************
#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
AFFICHAGE MACRO
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
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 B'00000111' ; Direction PORTB RB0,RB1 et RB2 en entrée
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 Mise en route du timer1
;*****************************************************
; pour l'exercie, je charge les variables a 9
; cette parti sera remplacé par un accée a l'eeprom
movlw 0X09
movwf ComptSu
movlw 0X05
Movwf ComptSd
movlw 0X09
movwf ComptMu
movlw 0X05
Movwf ComptMd
bsf PORTB,3 ; allumage led sur le port3
;*********************** Affichage sur 4 digits ********************************
AFFI
AFFICHAGE
BTFSC BOUTONVALID ; si +5volts sur RB2 alors goto
goto Traitementboutonvalid
;********************** Boucle principale *************************************
BouP MOVLW 0X0A ;on test si 10fois 100mS
SUBWF Temp,W
BTFSS STATUS,Z
GOTO AFFI ;NON
CLRF Temp ;RAZ compteur temp
decf ComptSu ; decrémentation, sauté si 0
movlw 0XFF ;
subwf ComptSu,W ; teste si passage sous 0
btfss STATUS,C ; oui saut pour traitement
goto AFFI ; non afficher le chiffre
decf ComptSd
movlw 0X09
movwf ComptSu ; recharger unité a 9
MOVLW 0XFF ;ici on test si inférieur a 0
SUBWF ComptSd,W
BTFSS STATUS,Z
GOTO AFFI ;NON on affiche et boucleP
decf ComptMu
movlw 0X05
movwf ComptSd ; recharger dizaine a 5
MOVLW 0XFF ; on test si sous 0
SUBWF ComptMu,W
BTFSS STATUS,C
GOTO AFFI ;NON
decf ComptMd
movlw 0X09
movwf ComptMu ; recharge Centaine
MOVLW 0XFF ;ici on test si inférieur 0
SUBWF ComptMd,W
BTFSS STATUS,Z
GOTO AFFI ;NON on affiche et boucleP
bcf T1CON,TMR1ON ; timer off
INCF ComptMd
clrf ComptSu
clrf ComptSd
clrf ComptMu
call Tem2ms
Alarm
AFFICHAGE
bcf PORTB,3 ; extention de la led sur portB
bsf PORTB,4 ; sonnerie sur portb en fonction
btfss BOUTONVALID ; attente appuis sur bpvalid
goto Alarm ; non alors boucler
alarm2
AFFICHAGE
call Tem2ms
btfsc BOUTONVALID ; relachement du bpvalid
goto alarm2 ; non alors boucler
bcf PORTB,4 ; arret de la sonnerie
bsf T1CON,TMR1ON ; demarage timer
bsf PORTB,3
movlw 0X09 ; rechargement variables
movwf ComptSu
movlw 0X05
Movwf ComptSd
movlw 0X09
movwf ComptMu
movlw 0X05
Movwf ComptMd
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
;*****************************************************************************
Traitementboutonvalid
AFFICHAGE
call Tem2ms
btfsc BOUTONVALID ; test si RB2 +5 volt si non sauté l'instruction suivante
goto Traitementboutonvalid ; boucle pour attendre le relachement du bouton
BSF PORTA,0 ;allumage digit0
MOVFW ComptSu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
;**************************************************************************************
; ma boucle d'attente d'appuie des boutons poussoirs
;*************************************************************************************
bouclevalid
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto boucleafficheurdizaine
btfsc BOUTONMOINS
goto bouclemoins
btfss BOUTONPLUS ; test appuie boutonplus (RB0), si non sauté l'instruction suivante
goto bouclevalid ; boucle pour attendre soit appuie de valid soit appuie de plus
;***************************************************************************************
boucleplus
call Tem2ms
btfsc BOUTONPLUS
goto boucleplus ; attendre le relachement du bouton
incf ComptSu
MOVLW 0X0A ; on test si poid faible >9
SUBWF ComptSu,W
BTFSC STATUS,C
CLRF ComptSu ; remise a zéro
MOVFW ComptSu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid
bouclemoins
call Tem2ms
btfsc BOUTONMOINS
goto bouclemoins ; attendre le relachement du bouton
decfsz ComptSu,f ; sauté l'instruction suivante si 0
goto suitemoins ; pas 0 allé plus loing
movfw ComptSu
CALL LedTable
movwf PORTC
movlw 0X0A ; essai pour remetre a 10 dans w
movwf ComptSu ; de w au registre comptsu
goto bouclevalid
suitemoins
MOVFW ComptSu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid
;*****************************************************************************
; suite provisoire car bientot traitement par macro
;*****************************************************************************
; Traitementboutonvalid
boucleafficheurdizaine
call Tem2ms
btfsc BOUTONVALID ; test si RB2 +5 volt si non sauté l'instruction suivante
goto boucleafficheurdizaine ; boucle pour attendre le relachement du bouton
BCF PORTA,0 ;arrêt digit0
BSF PORTA,1 ;allumage digit1
MOVFW ComptSd ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
;**************************************************************************************
; ma boucle d'attente d'appuie des boutons poussoirs
;*************************************************************************************
bouclevalid2
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto boucleafficheurcentaine
btfsc BOUTONMOINS
goto bouclemoins2
btfss BOUTONPLUS ; test appuie boutonplus (RB0), si non sauté l'instruction suivante
goto bouclevalid2 ; boucle pour attendre soit appuie de valid soit appuie de plus
;***************************************************************************************
boucleplus2
call Tem2ms
btfsc BOUTONPLUS
goto boucleplus2 ; attendre le relachement du bouton
incf ComptSd
MOVLW 0X06 ; on test si poid faible >9
SUBWF ComptSd,W
BTFSC STATUS,C
CLRF ComptSd ; remise a zéro
MOVFW ComptSd ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid2
bouclemoins2
call Tem2ms
btfsc BOUTONMOINS
goto bouclemoins2 ; attendre le relachement du bouton
decfsz ComptSd,f ; sauté l'instruction suivante si 0
goto suitemoins2 ; pas 0 allé plus loing
movfw ComptSd
CALL LedTable
movwf PORTC
movlw 0X06 ; essai pour remetre a 10 dans w
movwf ComptSd ; de w au registre comptsu
goto bouclevalid2
suitemoins2
MOVFW ComptSd ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid2
;***************************************************************************
; Traitementboutonvalid
boucleafficheurcentaine
; AFFICHAGE
call Tem2ms
btfsc BOUTONVALID ; test si RB2 +5 volt si non sauté l'instruction suivante
goto boucleafficheurcentaine ; boucle pour attendre le relachement du bouton
BCF PORTA,1 ;arrêt digit1
BSF PORTA,2 ;allumage digit2
MOVFW ComptMu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
;**************************************************************************************
; ma boucle d'attente d'appuie des boutons poussoirs
;*************************************************************************************
bouclevalid3
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto boucleafficheurmillier
btfsc BOUTONMOINS
goto bouclemoins3
btfss BOUTONPLUS ; test appuie boutonplus (RB0), si non sauté l'instruction suivante
goto bouclevalid3 ; boucle pour attendre soit appuie de valid soit appuie de plus
;***************************************************************************************
boucleplus3
call Tem2ms
btfsc BOUTONPLUS
goto boucleplus3 ; attendre le relachement du bouton
incf ComptMu
MOVLW 0X0A ; on test si poid faible >9
SUBWF ComptMu,W
BTFSC STATUS,C
CLRF ComptMu ; remise a zéro
MOVFW ComptMu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid3
bouclemoins3
call Tem2ms
btfsc BOUTONMOINS
goto bouclemoins3 ; attendre le relachement du bouton
decfsz ComptMu,f ; sauté l'instruction suivante si 0
goto suitemoins3 ; pas 0 allé plus loing
movfw ComptMu
CALL LedTable
movwf PORTC
movlw 0X0A ; essai pour remetre a 10 dans w
movwf ComptMu ; de w au registre comptsu
goto bouclevalid3
suitemoins3
MOVFW ComptMu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid3
;*************************************************************
; afficheur millier
; Traitementboutonvalid
boucleafficheurmillier
; AFFICHAGE
call Tem2ms
btfsc BOUTONVALID ; test si RB2 +5 volt si non sauté l'instruction suivante
goto boucleafficheurmillier ; boucle pour attendre le relachement du bouton
BCF PORTA,2 ;arrêt digit2
BSF PORTA,3 ;allumage digit3
MOVFW ComptMd ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
;**************************************************************************************
; ma boucle d'attente d'appuie des boutons poussoirs
;*************************************************************************************
bouclevalid4
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto bouclesortie
btfsc BOUTONMOINS
goto bouclemoins4
btfss BOUTONPLUS ; test appuie boutonplus (RB0), si non sauté l'instruction suivante
goto bouclevalid4 ; boucle pour attendre soit appuie de valid soit appuie de plus
;***************************************************************************************
boucleplus4
call Tem2ms
btfsc BOUTONPLUS
goto boucleplus4 ; attendre le relachement du bouton
incf ComptMd
MOVLW 0X06 ; on test si poid faible >5
SUBWF ComptMd,W
BTFSC STATUS,C
CLRF ComptMd ; remise a zéro
MOVFW ComptMd ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid4
bouclemoins4
call Tem2ms
btfsc BOUTONMOINS
goto bouclemoins4 ; attendre le relachement du bouton
decfsz ComptMd,f ; sauté l'instruction suivante si 0
goto suitemoins4 ; pas 0 allé plus loing
movfw ComptMd
CALL LedTable
movwf PORTC
movlw 0X06 ; essai pour remetre a 6 dans w
movwf ComptMd ; de w au registre comptsu
goto bouclevalid4
suitemoins4
MOVFW ComptMd ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
goto bouclevalid4
;****************************************************************************
; fin du provisoire
;*******************************************************************************
bouclesortie
call Tem2ms
btfsc BOUTONVALID
goto bouclesortie ; boucle pour attendre que le bouton soit relaché
BCF PORTA,3 ;arrêt digit0
CLRF Temp ;RAZ compteur temp
GOTO AFFI
END
compteur décompteur sur 7 segments
Bonjour
Ma moitie n'est pas de repos, donc...
Pour le décomptage avec arrêt a zéro, il ne fonctionne pas correctement.
comme nous sommes dans une programmation par fonction,module. Un avantage est que l'on peu tester le module tout seul .Un tuyau pour passer directement au module:
et dans le module
j'ai rajouté un goto ici en fin de module pour faire une boucle de décomptage
Maintenant rentre 1S et fait tourner la boucle.
Puis rentre 1mn et fait tourner la boucle.C'est jamais a zéro alors qu'il y a arrêt timer
Une fois le test OK, on vire tout ce qui est en rapport avec ici.
Je me répète, tu vas trop vite, c'est quoi cette EEPROM ???? Fini tes quatre modules AFFICHAGE, GESTION BOUTONS, DÉCOMPTAGE, ALARME, après tu rajoutera un autre module.
AMHA pour le moment, aucun ne tournent, correctement.Peso je me projette dans ma réalisation, pour définir ce que je veux,(cahier des charges encore et toujours, OUI) une fois fait et mis sur papier, je prend , fonction après fonction, et si pas ok je me concentre sur cela.Après si toi tu fais du global et que tu retrouves tes petits alors
moi je ne sais pas faire,2fois plantés depuis le début du fil
A+
PS; Bon hier soir,j'ai fais cuire des œufs
Ma moitie n'est pas de repos, donc...
Pour le décomptage avec arrêt a zéro, il ne fonctionne pas correctement.
comme nous sommes dans une programmation par fonction,module. Un avantage est que l'on peu tester le module tout seul .Un tuyau pour passer directement au module:
Code : Tout sélectionner
;********************** fixation des variables *********************************
Goto ici
et dans le module
Code : Tout sélectionner
ici
decf ComptSu ; decrémentation, sauté si 0
movlw 0XFF ;
subwf ComptSu,W ; teste si passage sous 0
btfss STATUS,C ; oui saut pour traitement
goto BouP ; non afficher le chiffre
decf ComptSd
movlw 0X09
movwf ComptSu ; recharger unité a 9
MOVLW 0XFF ;ici on test si inférieur a 0
SUBWF ComptSd,W
BTFSS STATUS,Z
GOTO BouP ;NON on affiche et boucleP
decf ComptMu
movlw 0X05
movwf ComptSd ; recharger dizaine a 5
MOVLW 0XFF ; on test si sous 0
SUBWF ComptMu,W
BTFSS STATUS,C
GOTO BouP ;NON
decf ComptMd
movlw 0X09
movwf ComptMu ; recharge Centaine
MOVLW 0XFF ;ici on test si inférieur 0
SUBWF ComptMd,W
BTFSS STATUS,Z
GOTO BouP ;NON on affiche et boucleP
bcf T1CON,TMR1ON ; timer off
INCF ComptMd
clrf ComptSu
clrf ComptSd
clrf ComptMu
GOTO ici
j'ai rajouté un goto ici en fin de module pour faire une boucle de décomptage
Maintenant rentre 1S et fait tourner la boucle.
Puis rentre 1mn et fait tourner la boucle.C'est jamais a zéro alors qu'il y a arrêt timer
Une fois le test OK, on vire tout ce qui est en rapport avec ici.
Je me répète, tu vas trop vite, c'est quoi cette EEPROM ???? Fini tes quatre modules AFFICHAGE, GESTION BOUTONS, DÉCOMPTAGE, ALARME, après tu rajoutera un autre module.
AMHA pour le moment, aucun ne tournent, correctement.Peso je me projette dans ma réalisation, pour définir ce que je veux,(cahier des charges encore et toujours, OUI) une fois fait et mis sur papier, je prend , fonction après fonction, et si pas ok je me concentre sur cela.Après si toi tu fais du global et que tu retrouves tes petits alors
A+
PS; Bon hier soir,j'ai fais cuire des œufs
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
JMarc
Pour le décomptage, je ne te donne pas le code, mais la piste.
-Pas de test sur les Md un simple decf.
Cela va a un moment du décomptage te ramener toutes tes variables a zéro. Il suffit donc, avant de faire un décomptage de tester, si toutes tes variables sont à zéro, si oui on sort, sinon bien on decompte
Avec, un joli organigramme, c'est très facile a voir, allez crayon papier
Ps: tu dois avoir de ton compilateur des avertissement en rapport avec le mani sur variable exemple sur il manque la boite de reception ici la variable donc
toujours avoir le résultat d'une compli sans erreur
Pour le décomptage, je ne te donne pas le code, mais la piste.
-Pas de test sur les Md un simple decf.
Cela va a un moment du décomptage te ramener toutes tes variables a zéro. Il suffit donc, avant de faire un décomptage de tester, si toutes tes variables sont à zéro, si oui on sort, sinon bien on decompte
Avec, un joli organigramme, c'est très facile a voir, allez crayon papier
Ps: tu dois avoir de ton compilateur des avertissement en rapport avec le mani sur variable exemple sur
Code : Tout sélectionner
DECF variableCode : Tout sélectionner
DECF variable,Fcompteur décompteur sur 7 segments
Bonjour Maï
Je ne trouve pas "fixation des variables" pour mettre le goto
Le "ici" j'ai trouvé
Ce qui est démoralisant c'est que j'essaie a chaque fois avec débug et ensuite en réel et chez moi cela fonctionne
J'ai mon comptage qui s'arrête avec tous les chiffres allumer inscrit zéro, la led de la plaque qui s'éteint et celle de la sirène allumé. Cela tourne en boucle jusqu'à l'appuie bpvalid, qui éteint la sirène et repart dans le de comptage.
Il faut que je supprime le code du bpmoins car il ne sert pas
Ben moi mes œufs sont cramés
Je ne trouve pas "fixation des variables" pour mettre le goto
Le "ici" j'ai trouvé
Ce qui est démoralisant c'est que j'essaie a chaque fois avec débug et ensuite en réel et chez moi cela fonctionne
J'ai mon comptage qui s'arrête avec tous les chiffres allumer inscrit zéro, la led de la plaque qui s'éteint et celle de la sirène allumé. Cela tourne en boucle jusqu'à l'appuie bpvalid, qui éteint la sirène et repart dans le de comptage.
Il faut que je supprime le code du bpmoins car il ne sert pas
Ben moi mes œufs sont cramés

compteur décompteur sur 7 segments
Normal c'est dans mon code donc pardon je travaille, avec mon code
Tient voila le décomptage pour me faire pardonner
a adapter a ton code
Tient voila le décomptage pour me faire pardonner
Code : Tout sélectionner
;*********************** Lance decomptage **************************************
Decom 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
;***********************
CLRW
SUBWF ComptMd,W
BTFSS STATUS,Z
GOTO Decom0 ;pas a zero
CLRW
SUBWF ComptMu,W
BTFSS STATUS,Z
GOTO Decom0 ; on verifie que le compteur
CLRW
SUBWF ComptSd,W ; ne soit pas a zero
BTFSS STATUS,Z
GOTO Decom0 ; avant de decompte
CLRW
SUBWF ComptSu,W
BTFSC STATUS,Z
GOTO BouP0 ;il est a zero on sort et arrêt comptage
;***********************
Decom0 DECF ComptSu,F ;uS-1
MOVLW 0XFF ; test si > 0
SUBWF ComptSu,W
BTFSS STATUS,Z
GOTO BouP ; NON
MOVLW 0X09
MOVWF ComptSu ;uS= 9
;***********************
DECF ComptSd,F ;dS +1
MOVLW 0XFF
SUBWF ComptSd,W ;test si >0
BTFSS STATUS,Z
GOTO BouP ;NON
MOVLW 0X5
MOVWF ComptSd ;dS =9
;***********************
DECF ComptMu,F
MOVLW 0XFF
SUBWF ComptMu,W
BTFSS STATUS,Z ;IDEM Mu
GOTO BouP
MOVLW 0X09
MOVWF ComptMu
;***********************
DECF ComptMd
GOTO BouP
a adapter a ton code
compteur décompteur sur 7 segments
C'est comme dit un peu plus haut test si les variables ne sont pas a zero et on ne fait que : DECF ComptMd,F en fin décomptage il n'y a que cela a modifier
tient il ya aussi cela qui ne va pas
lorsque tu travail sur une variable .Tu finis le travail et apres, tu prends la suivante .Regarde comme je fais
petite explication ou mettre le goto ici
juste avant la BOUCLE PRINCIPALE donc la
tient il ya aussi cela qui ne va pas
Code : Tout sélectionner
decf ComptSu ; decrémentation, sauté si 0
movlw 0XFF ;
subwf ComptSu,W ; teste si passage sous 0
btfss STATUS,C ; oui saut pour traitement
goto AFFI ; non afficher le chiffre
decf ComptSd
movlw 0X09
movwf ComptSu ; recharger unité a 9
lorsque tu travail sur une variable .Tu finis le travail et apres, tu prends la suivante .Regarde comme je fais
petite explication ou mettre le goto ici
juste avant la BOUCLE PRINCIPALE donc la
Code : Tout sélectionner
BSF T1CON,TMR1ON ;arrêt TMR1 Mise en route du timer1
GOTO ICI
;*****************************************************
; pour l'exercie, je charge les variables a 9
; cette parti sera remplacé par un accée a l'eeprom
movlw 0X09
compteur décompteur sur 7 segments
Ce qui est démoralisant c'est que j'essaie a chaque fois avec débug et ensuite en réel et chez moi cela fonctionne![]()
J'ai mon comptage qui s'arrête avec tous les chiffres allumer inscrit zéro, la led de la plaque qui s'éteint et celle de la sirène allumé. Cela tourne en boucle jusqu'à l'appuie bpvalid, qui éteint la sirène et repart dans le de comptage.
Alors si c'est bon que veux-tu de plus. Mais la il faut que tu m'expliques par ce que moi je ne comprends pas cela
Cela tourne en boucle jusqu'à l'appuie bpvalid, qui éteint la sirène et repart dans le de comptage.
chez c'est comme cela:
A la mise sous tension
-Le 1er digit clignote les 2 autres sont fixe .(j'ai pas 4digits le programme tourne pour 4)
-Avec BP_Val je me déplace pour sélectionner, le digits sur lequel je veux travailler, bien sur le clignotement suit de 1 passe a 2, de 3 a 3 etc.....
_Avec le BP_Plus incrémente ,le digit sélectionné jusqu’à la valeur max en fonction de sa position 9 ou 5
une fois, le temps de programmé,j'appuie longuement sur le BP_Val
le clignotement s'arrête les 3 digits sont fixes, au relâchement du BP_Val le décomptage se met en route.
....si pour X raisons, je considéré que la programmation n'est pas bonne, un appuie long sur BP_Val arrête le décomptage et retour casse mise sous tension
pas d'action lors du décomptage des BP Sauf BP_val sur appuie long
sinon a la fin du temps programmé, validation de l'alarme petite pause et casse mise en service.
je fais cela avec
14 variables et 242 octets de mem Programme 2 timer et 2 tempo(800µs et 2ms)
c'est, comment dire, simple
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité


