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
Bonjour Maï
J'avais bien compris que cela ne te plaisais pas et j'avais noté "fait a ma sauce"
quand j'ai vue ta facon et bien je te l'ai piqué
Cela ma plus et j'ai remplacé aussitôt mon code par le tiens que je me régale a voir tourner sous debug.
Je prend aussi les exemples des organigrammes, j'espère qu'ils vont m'inspirer
Je n'ose pas ouvrir un fil pour chaque chose que je ne comprend pas, ils y en aurai trop
J'avais bien compris que cela ne te plaisais pas et j'avais noté "fait a ma sauce"
quand j'ai vue ta facon et bien je te l'ai piqué
Code : Tout sélectionner
;*********************************************************************
movfw ComptSu ; addition puis test si 0
iorwf ComptSd,w
iorwf ComptMu,w
iorwf ComptMd,w
btfsc STATUS,Z
goto BouP0
;******************
decf ComptSu,F ;uS-1
btfss ComptSu,7
goto BouP
movlw 0X09
movwf ComptSu
Cela ma plus et j'ai remplacé aussitôt mon code par le tiens que je me régale a voir tourner sous debug.
Je prend aussi les exemples des organigrammes, j'espère qu'ils vont m'inspirer
Je n'ose pas ouvrir un fil pour chaque chose que je ne comprend pas, ils y en aurai trop
compteur décompteur sur 7 segments
JMarc a écrit :Code : Tout sélectionner
;*********************************************************************
movfw ComptSu ; addition puis test si 0
iorwf ComptSd,w
iorwf ComptMu,w
iorwf ComptMd,w
btfsc STATUS,Z
goto BouP0
;******************
decf ComptSu,F ;uS-1
btfss ComptSu,7
goto BouP
movlw 0X09
movwf ComptSu
Mais la il y a un petit problème,le compte n'est pas bon. Il y a une seconde de trop OUI OUI OUI, mais je te laisse finir le projet. après on regarde qui plus court et le plus rapide YES
compteur décompteur sur 7 segments
Bonsoir tout le monde
non, non, je n'ai pas abandonné, juste que je pédale sévère
J'ai résolu mes plantages du au passage de la gestion des afficheurs par interruption avec timer0.
un coup timer0 tourne pendant la section programmation, après problème au démarrage, de que je trouve une panne une autre apparaît
maintenant des 0 arrêt du programme, le compte est bon
je sais c'est le fouillis mais je débute et vu le temps passé a chercher maintenant l'expérience est mémorisé
allé maintenant j'attaque la gestion des bp
non, non, je n'ai pas abandonné, juste que je pédale sévère
J'ai résolu mes plantages du au passage de la gestion des afficheurs par interruption avec timer0.
un coup timer0 tourne pendant la section programmation, après problème au démarrage, de que je trouve une panne une autre apparaît
maintenant des 0 arrêt du programme, le compte est bon
je sais c'est le fouillis mais je débute et vu le temps passé a chercher maintenant l'expérience est mémorisé
allé maintenant j'attaque la gestion des bp
Code : Tout sélectionner
;*******************************************************************
;
;********************************************************************
;
; Auteur :maï/JMarc
; Version :1.1
; Date :11/2016
;
; timer0 = gestion afficheurs
; timer1 = gestion du temps
;********************************************************************
; 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
GLOBAL tempaffi
udata 0x30
ComptSu res 1 ;comteur seconde
ComptSd res 1
ComptMu res 1 ;compteur minute
ComptMd res 1
tempaffi res 1
;*********************** Définitions variables en RAM PAGE0 *********
CBLOCK 0x20
Sauv
Sauv1
Temp ;compteur temps
i,j, ;temporaire boucle
; tempaffi
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
btfss PIR1,TMR1IF ; test timer1 en cours
goto timer0 ; non alors test suivant
MOVLW TIMER1L ;oui
MOVWF TMR1L ; 45
MOVLW TIMER1H ;on recharge le timer1
MOVWF TMR1H ; 207
BCF PIR1,TMR1IF ;RAZ du drapeau de TMR1
INCF Temp,F ; à 10 cela fera 1s
goto fintimer
;************************
; test timer0
timer0
btfss INTCON,T0IF ;test si interuption tmr0
goto fintimer ; non alors fin
bcf INTCON,T0IF ; raz du drapeau TMR0
decf tempaffi,f ; -1 au compteur des afficheurs
call affichage
fintimer
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 ************************
;*************************timer0
bcf OPTION_REG,PSA ;diviseur sur timer et non wachdog
bcf OPTION_REG,PS2 ; PS2=0,PS1=1,PS0=0 diviser tmr0 par 8
bcf OPTION_REG,PS0
bcf OPTION_REG,T0CS
; bsf INTCON,T0IE ; valide le TMR0
;************************timer1
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
clrf TMR0 ; effacement compteur par precaution
BSF T1CON,TMR1ON ; 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 (alimentation plaque de cuisson)
movlw 0X05
movwf tempaffi
bsf INTCON,T0IE ; valide le TMR0
;*********************** 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
CLRF Temp ;RAZ compteur temp
;*********************************************************************
decf ComptSu,f
movfw ComptSu ; addition puis test si 0
iorwf ComptSd,w
iorwf ComptMu,w
iorwf ComptMd,w
btfsc STATUS,Z
goto BouP0
;******************
btfss ComptSu,7
goto BouP
movlw 0X09
movwf ComptSu
decf ComptSd,F
btfss ComptSd,7
goto BouP
movlw 0X05
movwf ComptSd
decf ComptMu,F
btfss ComptMu,7
goto BouP
movlw 0x09
movwf ComptMu
decf ComptMd
goto BouP
BouP0
bcf T1CON,TMR1ON ; arret timer
bcf PORTB,3 ; extextion de la led sur portB
bsf PORTB,4 ; sonnerie sur portb en fonction
goto BouP
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
affichage
call Tem2ms
decfsz tempaffi
goto affi1
bcf PORTA,1
BSF PORTA,0 ;allumage digit0
MOVFW ComptSu ;charge la donnée
CALL LedTable ;recherche donnée
MOVWF PORTC ;envoi donnée
movlw 0X05
movwf tempaffi
RETURN
affi1
decfsz tempaffi
goto affi2
bcf PORTA,2
BSF PORTA,1
MOVFW ComptSd
CALL LedTable
MOVWF PORTC
movlw 0X02
movwf tempaffi
RETURN
affi2
decfsz tempaffi
goto affi3
bcf PORTA,3
BSF PORTA,2
MOVFW ComptMu
CALL LedTable
MOVWF PORTC
movlw 0X03
movwf tempaffi
RETURN
affi3
bcf PORTA,0
BSF PORTA,3
MOVFW ComptMd
CALL LedTable
MOVWF PORTC ;idem digit3
movlw 0X04
movwf tempaffi
RETURN
;*****************************************************************************
Traitementboutonvalid
bcf INTCON,T0IE ; arret du TMR0 affichage géré manuellement
bcf PORTA,1 ; autres afficheurs eteints
BCF PORTA,2
BCF PORTA,3
relachbpvalid
CALL Tem2ms
btfsc BOUTONVALID ; test si RB2 +5 volt si non sauté l'instruction suivante
goto relachbpvalid ; 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
bouclevalid
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto boucleafficheurdizaine
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
;*****************************************************************************
; suite provisoire car bientot traitement par macro
;*****************************************************************************
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
bouclevalid2
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto boucleafficheurcentaine
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
boucleafficheurcentaine
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
bouclevalid3
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto boucleafficheurmillier
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
boucleafficheurmillier
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
bouclevalid4
call Tem2ms
btfsc BOUTONVALID ; test appuie boutonvalid (RB2)
goto bouclesortie
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
;****************************************************************************
; 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 TMR0
bsf INTCON,T0IE ; demarage du TMR0 qui était affichage géré manuellement
CLRF Temp ;RAZ compteur temp
GOTO AFFI
END
compteur décompteur sur 7 segments
Bonsoir
Pour la gestion de l'int est des timer 0 et 1 identique à mon programme, sauf que je ne fais pas un call affichage mais un goto j'aime pas les calls dans les INT .
petite question c'est quoi
Pour la suite, je te conseils, encore et toujours de repartir sur un nouveau fichier source, avec la gestion de l'int comme tu as fais et une boucle du sytle BouP goto BouP et un spg ton module affichage comme celui du #82.
Cela devrait d'afficher de joli ZERO avec le rafraîchissement PAR le TIMER0 qui entre nous une tres bonne avancé. ici rappel du spg affichage
C'est CA la base après dans la boucle tu traites du module des BP et dans le module affichage le clignotement du digit sélectionne reste le module décomptage avec son problème de la seconde de trop oui oui oui module que tu rajoutes en SPG
et on va pouvoir manger nos œufs
A+
PS bon il faut aussi tout ce qui y a autour, les configs port int etc.. mais ça tu l'avais deviné
Pour la gestion de l'int est des timer 0 et 1 identique à mon programme, sauf que je ne fais pas un call affichage mais un goto j'aime pas les calls dans les INT .
petite question c'est quoi
Code : Tout sélectionner
decf tempaffi,f ; -1 au compteur des afficheurs
Pour la suite, je te conseils, encore et toujours de repartir sur un nouveau fichier source, avec la gestion de l'int comme tu as fais et une boucle du sytle BouP goto BouP et un spg ton module affichage comme celui du #82.
Cela devrait d'afficher de joli ZERO avec le rafraîchissement PAR le TIMER0 qui entre nous une tres bonne avancé. ici rappel du spg affichage
Code : Tout sélectionner
;*********************** Affichage sur 4 digits ********************************
AFFI
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
RETURN
C'est CA la base après dans la boucle tu traites du module des BP et dans le module affichage le clignotement du digit sélectionne reste le module décomptage avec son problème de la seconde de trop oui oui oui module que tu rajoutes en SPG
et on va pouvoir manger nos œufs
A+
PS bon il faut aussi tout ce qui y a autour, les configs port int etc.. mais ça tu l'avais deviné
compteur décompteur sur 7 segments
maï a écrit :
petite question c'est quoiCode : Tout sélectionner
decf tempaffi,f ; -1 au compteur des afficheurs
Chaque passage tmr0, je decremente tempaffi que je teste dans la parti gestion affichage pour le choix du digit a allumer
compteur décompteur sur 7 segments
Bonsoir
Oui c'est pas bon puisque il faut passer par le pointeur FSR.
Bon ici
la base de départ qui faut travailler, tu l'as deja fait. c'est l'affichage en macro avec rafraîchissement par le timer0 qui tourne tout seul sans passer par le module bouton ni décomptage
il y a la boucle principale qui tourne sur elle même et c'est de la qu'il faut faire le module des BP. Je 'invite a faire cela si tu le veux bien bouton plus incrémentation de digit BP validation déplacement du digit pour le moment laisse tomber le clignotement du digit sélectionné.
ici tu vas devoir travailler avec le pointeur FSR
tu es d’accord et surtout tu suis ????
A+
P allez encore 4 semaines puis je poste ma version on y croit
JMarc a écrit :
Chaque passage tmr0, je decremente tempaffi que je teste dans la parti gestion affichage pour le choix du digit a allumer
Oui c'est pas bon puisque il faut passer par le pointeur FSR.
Bon ici
Code : Tout sélectionner
;********************************************************************
; descriptif du projet:
;Decompteur programmable, sur 4 digits 7 segemnts,
;2 BP un plus variables,un validation deplacement et demarrage decompteur.
;
;;********************************************************************
;
; Auteur :JMarc maï
; Version :1.0
; Date :2016
;
;*******************************************************************************
; Note:PIC 16F877a par exemple
;
;*******************************************************************************
ERRORLEVEL-302
list p=16f877 ;liste directive du 16F877
#include "p16f877.inc"
;********************** chargement des Macros **********************************
;***************************** 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 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 digit concerné
Temp res 1 ;compteur temps
Temp_Val res 1 ;compteur temps touche val
Sauv res 2 ;pour sauvegarde 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 ************************************************
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 sur 4 digits ********************************
Aff7 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
;*********************** TOUT COMMENCE ICI *************************************
org 0X00 ;au rest le pointeur instruction est ICI
GOTO debut ;saut sur le label debut
org 0X04
MOVWF Sauv ;sauve W
SWAPF STATUS,W ;
MOVWF Sauv+1 ;sauve status
BTFSS PIR1,TMR1IF ;test flag si TIMER1
GOTO Int0 ;NON
MOVLW 0x3C ; int toute le 100ms
MOVWF TMR1H
MOVLW 0xB3
MOVWF TMR1
BCF PIR1,TMR1IF ;RAZ du drapeau de TMR1
INCF Temp,F ; à 10 cela fera 1s
INCF Temp_Val,F ;tempo BP Val
GOTO IntS
Int0 BTFSS INTCON,T0IF ;Test flag si TIMER0
GOTO IntS ;on sort pour gerer l'affichage
BCF INTCON,T0IE ;ARRET INT TMR0
Aff7
MOVLW 0XA
MOVWF TMR0 ; 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
;*******************************************************************************
MOVLW 0x01
MOVWF OPTION_REG
Banque0
MOVLW 0xA
MOVWF TMR0
;**********************
BSF T1CON, 0x4
BCF T1CON, 0x5
MOVLW 0x3C
MOVWF TMR1H
MOVLW 0xB3
MOVWF TMR1
BSF T1CON,TMR1ON ; mise en service Timer1
;********************** Boucle principale **************************************
BouP GOTO BouP
;********************** ici c'est des SPG **************************************
Tem2ms
MOVLW 0x3
MOVWF MEM1
MOVLW 0x98
MOVWF MEM
temp DECFSZ MEM, F
GOTO temp
DECFSZ MEM1, F
GOTO temp
RETURN
END ;fin pour le compilateur
la base de départ qui faut travailler, tu l'as deja fait. c'est l'affichage en macro avec rafraîchissement par le timer0 qui tourne tout seul sans passer par le module bouton ni décomptage
il y a la boucle principale qui tourne sur elle même et c'est de la qu'il faut faire le module des BP. Je 'invite a faire cela si tu le veux bien bouton plus incrémentation de digit BP validation déplacement du digit pour le moment laisse tomber le clignotement du digit sélectionné.
ici tu vas devoir travailler avec le pointeur FSR
tu es d’accord et surtout tu suis ????
A+
P allez encore 4 semaines puis je poste ma version on y croit
compteur décompteur sur 7 segments
Bonsoir Maï
Ce que je ne comprend pas c'est que tu ma dit pas de call dans les inters.
Sur le prog si dessus, lors de l'inter tmr0, la macro affichage est appelé, tout les afficheurs sont traités sur une seule inter. La tempo 2ms est appelé 4 fois par un call.
Pourquoi utilisé la 2ms plutôt que celle que j'ai fait qui utilise que le tmr0 ?
Ce que je ne comprend pas c'est que tu ma dit pas de call dans les inters.
Sur le prog si dessus, lors de l'inter tmr0, la macro affichage est appelé, tout les afficheurs sont traités sur une seule inter. La tempo 2ms est appelé 4 fois par un call.
Pourquoi utilisé la 2ms plutôt que celle que j'ai fait qui utilise que le tmr0 ?
compteur décompteur sur 7 segments
Bonjour JMarc
Pas de call mais une MACRO, pas call Aff7 ni de return , mais juste Aff7
oui 2ms c'est le temps nécessaire pour ne pas faire scintiller les afficheurs (voir moins mais attention) et un fois dans la macro on fait les 4 afficheurs affaire régle
le timer 0 est la uniquement pour le faire le rafraîchissement de afficheur et laisser un peu de temps entre 2 affichages au module BP:
cela fonctionne comme cela:
les variables temps
ComptSu res 1 ;comteur seconde
ComptSd res 1
ComptMu res 1 ;compteur minute
ComptMd res 1
nous avons ou aurons 4 modules
Affichage
BP
Décomptage
Alarme
le liens entre ces modules c'est les variables temps,
Pour Affichage <=>BP
-Toute le 1ms on donne la main au module BP, suivant action modif les variables temps(touche plus )ou on décompte si validation puis on affiche au rythme du timer 0
bien sur il faut maîtriser le pointeur FSR
A+
PS 1ms on peut en prendre plus mais c'est quand même ~ 1000 instructions il y a de quoi faire
JMarc a écrit :Ce que je ne comprend pas c'est que tu ma dit pas de call dans les inters.
Pas de call mais une MACRO, pas call Aff7 ni de return , mais juste Aff7
Sur le prog si dessus, lors de l'inter tmr0, la macro affichage est appelé, tout les afficheurs sont traités sur une seule inter. La tempo 2ms est appelé 4 fois par un call.
oui 2ms c'est le temps nécessaire pour ne pas faire scintiller les afficheurs (voir moins mais attention) et un fois dans la macro on fait les 4 afficheurs affaire régle
Pourquoi utilisé la 2ms plutôt que celle que j'ai fait qui utilise que le tmr0 ?
le timer 0 est la uniquement pour le faire le rafraîchissement de afficheur et laisser un peu de temps entre 2 affichages au module BP:
cela fonctionne comme cela:
les variables temps
ComptSu res 1 ;comteur seconde
ComptSd res 1
ComptMu res 1 ;compteur minute
ComptMd res 1
nous avons ou aurons 4 modules
Affichage
BP
Décomptage
Alarme
le liens entre ces modules c'est les variables temps,
Pour Affichage <=>BP
-Toute le 1ms on donne la main au module BP, suivant action modif les variables temps(touche plus )ou on décompte si validation puis on affiche au rythme du timer 0
bien sur il faut maîtriser le pointeur FSR
A+
PS 1ms on peut en prendre plus mais c'est quand même ~ 1000 instructions il y a de quoi faire
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 120 invités