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ï
Je n'avance pas du tout, toujours mon probleme de copier du forum vers mon pc, ma seule solution est de copier dans bloc note, sauvegarder, avec un editeur hexa remplacer tout les 0xA0 en 0x20, sauvegarder, reprendre le fichier avec le bloc note, copier et coller dans mplab. Ca ma "gonflé" de chercher pendant des heures et pas trouver la solution
de plus maintenant je ne sort plus de la routine interruption donc je perd du temps sans même bosser sur le prog
Je remet le code avant que tu me le demande
maï a écrit :
la gestion de tes boutons on en es OU?
A+
Je n'avance pas du tout, toujours mon probleme de copier du forum vers mon pc, ma seule solution est de copier dans bloc note, sauvegarder, avec un editeur hexa remplacer tout les 0xA0 en 0x20, sauvegarder, reprendre le fichier avec le bloc note, copier et coller dans mplab. Ca ma "gonflé" de chercher pendant des heures et pas trouver la solution
de plus maintenant je ne sort plus de la routine interruption donc je perd du temps sans même bosser sur le prog
Je remet le code avant que tu me le demande
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 :2.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
;
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;_CP_OFF Pas de protection
;_DEBUG_OFF RB6 et RB7 en utilisation normale
;_WRT_ENABLE_OFF Le programme ne peut pas écrire dans la flash
;_CPD_OFF Mémoire EEprom déprotégée
;_LVP_OFF RB3 en utilisation normale
; _BODEN_OFF Reset tension hors service
;_PWRTE_ON Démarrage temporisé
;_WDT_OFF Watchdog hors service
;_HS_OSC Oscillateur haute vitesse (4Mhz<F<20Mhz)
;
;*********************** 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
;*******************************************************************************
Compteur MACRO
movlw 0X0A ; on teste si 10 fois 100 ms
btfss STATUS,Z
; goto AFFI
goto BouP
clrf Temp ; raz compteur temp
; decf ComptSu,f
;
; movfw ComptSu
; iorwf ComptSd,w
; iorwf ComptMu,w
; iorwf ComptMd,w ; addition
; btfsc STATUS,Z ; test si 0
; goto BouP0
movlw ComptSu ; Chargement du pointeur sur la premiere variable
movwf FSR
movfw INDF ; Chargement de la source dans w
incf FSR,f ; variable suivante
iorwf INDF,w
incf FSR,f
iorwf INDF,w
incf FSR,f
iorwf INDF,w
btfsc STATUS,Z
goto BouP
; suite decomptage ici
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
movwf TMR1L
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
movwf TMR1L
BSF T1CON,TMR1ON ; mise en service Timer1
;********************** Boucle principale **************************************
BouP
Compteur
;*********************** Bouton plus *******************************************
Plus BTFSS Index,7 ;mode decomptage ?
GOTO Decom ;oui
nop
BTFSC BP_Plus ;BP_Plus appuyé?
GOTO BouP ;NON on reboucle sur Principale
; CALL Temp800µs ;petite tempo antirebond
call Tem2ms
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 bouc
Decom
goto BouP
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
compteur décompteur sur 7 segments
Tient j'ai remis un peu d'ordre et mis quelques lignes de code pour la suite . j'ai fait un test,sur la platine a trou ,pour le moment le BP plus te permet d’incrémenter le digits les unités seconde avec la buté 09. Le BP validation n'est pas encore travaillé, à toi de jouer,avec FSR et les butées
A+
PS j'ai passé le spg de la tempon 2ms en macro et fait une autre tempo pour anti rebond 800µs
Tu étais en boucle car le bit 7 de la structure de bits Index n’était pas a 1. j'ai rajouté cela avec fixation des variables la tu as 80% du projet
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 :2.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
;
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;_CP_OFF Pas de protection
;_DEBUG_OFF RB6 et RB7 en utilisation normale
;_WRT_ENABLE_OFF Le programme ne peut pas écrire dans la flash
;_CPD_OFF Mémoire EEprom déprotégée
;_LVP_OFF RB3 en utilisation normale
; _BODEN_OFF Reset tension hors service
;_PWRTE_ON Démarrage temporisé
;_WDT_OFF Watchdog hors service
;_HS_OSC Oscillateur haute vitesse (4Mhz<F<20Mhz)
;
;*********************** 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
Tem2ms ;petite tempo 2ms
BCF PORTA,0 ;arrêt digit0
BSF PORTA,1
MOVFW ComptSd
CALL LedTable
MOVWF PORTC
Tem2ms ;idem digit1
BCF PORTA,1
BSF PORTA,2
MOVFW ComptMu
CALL LedTable
MOVWF PORTC
Tem2ms ;idem digit2
BCF PORTA,2
BSF PORTA,3
MOVFW ComptMd
CALL LedTable
MOVWF PORTC ;idem digit3
Tem2ms
BCF PORTA,3
ENDM
;*******************************************************************************
Tem2ms MACRO
LOCAL T1
MOVLW 0x3
MOVWF MEM1
MOVLW 0x98
MOVWF MEM
T1 DECFSZ MEM, F ; source issue de la macro delay_ms .2
GOTO T1
DECFSZ MEM1, F
GOTO T1
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 TMR1L
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 TMR1L
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 ou re les variables
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
GOTO BouP
;*********************** 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
Plus1 SUBWF INDF,W
BTFSC STATUS,C
CLRF INDF ;si butée raz adresse pointé
GOTO BouP ;on Reboucle sur boucle principale
;*******************************************************************************
Decom NOP
NOP ;ici module de decomptage
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
MOVLW 0x2
MOVWF MEM_us
MOVLW 0x9
MOVWF MEM1_us
T0 DECFSZ MEM1_us, F ; source issu de la macro delay_us .800
GOTO T0
DECFSZ MEM_us, F
GOTO T0
RETURN
END
A+
PS j'ai passé le spg de la tempon 2ms en macro et fait une autre tempo pour anti rebond 800µs
Tu étais en boucle car le bit 7 de la structure de bits Index n’était pas a 1. j'ai rajouté cela avec fixation des variables la tu as 80% du projet
compteur décompteur sur 7 segments
Je reviens sur la programmation modulaire pourquoi ne pas travailler de cette manière ?
Exemple pour la programmation du temps il nous faut:
-Le module BP (gestion des variables)
-Le module affichage (affiche les variables)
Et c'est tout .
Donc dans ton essai, pourquoi mettre le module décomptage, qui n'est pas utilisé et qui vient perturber ton test du code.
Le décomptage intervient dans le décomptage de tes variables il lui faut:
-le module BP (ON/OFF)
-le module décomptage (décompte les variables)
-Le module affichage (affiche les variables)
Et c'est tout.
La programmation modulaire te permet de tester les modules seuls.
-Affichage tourne tout seul(au rythme du timer0)
-Le décomptage suffit de charger les variables et de le faire tourner en boucle
-Le module BP qui suivant divers appuis sur BP change uniquement des variables
Dans tout cela, ces modules, ont un élément commun-> VARIABLE .Oui pour affichage c'est bien les variables a afficher, pour le décompteur c'est bien les variables a décompter et pour le BP c'est bien les variables a faire évoluer
Tout cela pour te dire,avant d'assembler les modules,il faut en prendre un, et effectuer des tests jusqu’à qu'il remplisse les conditions voulue, exemple le module affichage dans l’état convient pour le décomptage, pas pour la programmation temps (manque sélection du digit) il faudra lorsque tu vas te mettre la dessus , faire au niveau BouP, une boucle sans fin du style
et LA tu sera uniquement sur le module AFFICHAGE
Pour arrêter l'affichage et se concentrer sur un autre module interdire l'int du TIMER0 etc....
A+
PS dessolé comme DAB je suis un peu LONG. Mais si tu a compris cela, ça va te faire GAGNER un temps fou. Perso je ne programme que sur du modulaire sachant que la programmation est un jeu qui consiste a utiliser les variables (ou bits )comme vecteur d'info.
Exemple pour la programmation du temps il nous faut:
-Le module BP (gestion des variables)
-Le module affichage (affiche les variables)
Et c'est tout .
Donc dans ton essai, pourquoi mettre le module décomptage, qui n'est pas utilisé et qui vient perturber ton test du code.
Le décomptage intervient dans le décomptage de tes variables il lui faut:
-le module BP (ON/OFF)
-le module décomptage (décompte les variables)
-Le module affichage (affiche les variables)
Et c'est tout.
La programmation modulaire te permet de tester les modules seuls.
-Affichage tourne tout seul(au rythme du timer0)
-Le décomptage suffit de charger les variables et de le faire tourner en boucle
-Le module BP qui suivant divers appuis sur BP change uniquement des variables
Dans tout cela, ces modules, ont un élément commun-> VARIABLE .Oui pour affichage c'est bien les variables a afficher, pour le décompteur c'est bien les variables a décompter et pour le BP c'est bien les variables a faire évoluer
Tout cela pour te dire,avant d'assembler les modules,il faut en prendre un, et effectuer des tests jusqu’à qu'il remplisse les conditions voulue, exemple le module affichage dans l’état convient pour le décomptage, pas pour la programmation temps (manque sélection du digit) il faudra lorsque tu vas te mettre la dessus , faire au niveau BouP, une boucle sans fin du style
Code : Tout sélectionner
BouP GOTO BouP
Pour arrêter l'affichage et se concentrer sur un autre module interdire l'int du TIMER0 etc....
A+
PS dessolé comme DAB je suis un peu LONG. Mais si tu a compris cela, ça va te faire GAGNER un temps fou. Perso je ne programme que sur du modulaire sachant que la programmation est un jeu qui consiste a utiliser les variables (ou bits )comme vecteur d'info.
Modifié en dernier par Anonymous le dim. 4 déc. 2016 16:22, modifié 1 fois.
compteur décompteur sur 7 segments
Bonjour Maï
Ne soit pas désolé car même si je ne comprend pas tout, je passe beaucoup de temps a relire tout les posts et sa fini par me servir.
Mais c'est avec les exemples que je comprend le mieux. le code si dessus est en décorticage sous debug et a force de le faire tourné je fini par comprendre meme si pour l'instant j'ai du mal a comprendre l'intérêt d'utilisé l'adressage indirect, je trouve moins compliquer le direct.
maï a écrit :PS dessolé comme DAB je suis un peu LONG.
Ne soit pas désolé car même si je ne comprend pas tout, je passe beaucoup de temps a relire tout les posts et sa fini par me servir.
Mais c'est avec les exemples que je comprend le mieux. le code si dessus est en décorticage sous debug et a force de le faire tourné je fini par comprendre meme si pour l'instant j'ai du mal a comprendre l'intérêt d'utilisé l'adressage indirect, je trouve moins compliquer le direct.
compteur décompteur sur 7 segments
j'ai du mal a comprendre l'intérêt d'utilisé l'adressage indirect, je trouve moins compliquer le direct.
dans ce cas donne moi ton code sur les BP que l'on regarde cela ou ton organigramme mon projet suit a la lettre celui ci viewtopic.php?f=11&t=370 en #6
compteur décompteur sur 7 segments
Voici ce qu'il sort de mes idées en essayant d'utilisé l'adressage indirect
Code : Tout sélectionner
;********************** Boucle principale **************************************
BouP
BTFSC BP_Val ;BP val appuiyé ? RB1
GOTO Plus ;NON voir le BP plus
; GOTO BouP
goto Tbpval ; voir bouton val
;*********************** Bouton plus *******************************************
Plus BTFSS Index,7 ;mode decomptage ?
GOTO Decom ;oui
BTFSC BP_Plus ;BP_Plus appuyé? RB0
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
;*******************************************************************************
Tbpval
BTFSS BP_Val ;BP_val appuyé? RB1
GOTO Tbpval ;NON on reboucle sur Principale
CALL Temp800µs ;petite tempo antirebond
rlf Index,f ; rotation par la gauche
bcf Index,0 ; le carry etait a 1 donc je traite ainsi
btfsc Index,4 ; test si > que ComptMd
goto FinTbpval ; oui alors traitement
incf FSR,f ; non alors variable suivante
bsf Index,7 ; garder la main en reglage
goto BouP
FinTbpval
bcf Index,4 ; traitement sortie
bsf Index,0 ; remettre sur ComptSu
movlw ComptSu
movwf FSR
bsf Index,7 ; mettre a 0 si l'on veut aller en decomtage
goto BouP
;*******************************************************************************
Decom NOP
NOP ;ici module de decomptage
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
compteur décompteur sur 7 segments
JMarc a écrit :Merci !
c'est Bien mais pas la fin
Code : Tout sélectionner
;**********************
Val0 BTFSS Index,7 ;mode Decomptage?
GOTO BouP ;oui on touche a RIEN et on boucle
BCF STATUS,C
RLF Index,F ;décalage index digit vers la GAUCHE
BTFSC Index,4 ;Index hors butée?
GOTO Init_Va ;oui on réinitialise les variables
BSF Index,7 ;repositionne le bit programmation
INCF FSR,F ;NON pointeur variable +1
GOTO BouP ;boucle principale
Petite explication POUR CE QUI NOUS LISENT
on part de cela
Code : Tout sélectionner
index= B'10000001' ;B0:B3 index sur 1er digit B7: mode programmation
pour au final apres appui sur valida faire
Code : Tout sélectionner
Index B'10000010' ;B0:B3 index sur 1er digit B7: mode programmation
On fait cela par:
-rotation a GAUCHE AVEC CARRY cela implique que carry est a ZERO lorsque tu fais ce type de rotation, TU ne peux garantir que carry est a zero donc avant on met carry a zero, on fait la rotation gauche,
-puis POURQUOI allez plus loin si on est hors butée? Donc test butée si plus grand on réinitialise les variables car a l'init on est bien ou on doit bien initialise c'est variables OUI OUI
- si dans butée on fini avec index en repositionnant le bit programmation temps(7)
et en fin incrémentation du pointeur, puis retour BouP
Voila pas très complique et en adéquation avec mon organigramme
A+
PS heu Index n'est pas la pour faire beau, c'est une structure de bits avec:
bit 7 ->décomptage ou programmation
bit6 -> gestion alarme
bit 0:3 -> sélection digit
cette sélection il va falloir bien l'utiliser dans le module affichage pour faire clignoter l'afficheur sélectionné. encore 5% et le mode programmation est terminé allez JMarc.....
AH oui mon code démarre a Val0 car avant il y a la gestion de BP validation sur BP appui LONG. Donc la c'est la sortie après l'anti rebond
Modifié en dernier par Anonymous le lun. 5 déc. 2016 12:28, modifié 2 fois.
compteur décompteur sur 7 segments
JMarc pourquoi cette FinTbpVal Ici bien plus court, et de plus nécessaire (fin de décomptage on va passer par la, en cas d’arrêt de décomptage on va passer par la )
Alors que tu as a l'int du programme cela
Alors que tu as a l'int du programme cela
Code : Tout sélectionner
;********************** fixation des variables *********************************
Raz_Var CLRF ComptSu ;
CLRF ComptSd ;
CLRF ComptMu ;raz des variables Temps
CLRF ComptMd ;
Init_Va MOVLW ComptSu ;initialise ou re les variables
MOVWF FSR ;charge le pointeur de adresse unité 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
BTFSC BP_Val ;BP_Val relâche
GOTO Val0 ;oui
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 87 invités