Bonsoir à tous.

J'aimerais vous exposer ici mon problème:

- J'ai développé un petit programme simple permettant d'incrémenter indépendamment mes valeurs et des les affichées à gauche et à droite (mon bouton de gauche incrémente de 0 à 9 et affiche la valeur à gauche, pareil à droite et ceci, en indépendant).

C'est un programme en 2 temps:

- La première étape consiste à mémoriser le nombre de personne que peut contenir une salle (par exemple).
- La deuxième me permet de compté le nombre de personne entrantes dans la salle.

J'aimerais maintenant pouvoir mémoriser les valeurs affichées indépendamment (si j'ai un 12 affiché, j'aimerais enregistrer le 1 dans une variable a gauche, et le 2 dans une variable à droite).

J'aimerais ensuite que mon compteur recommence à zéro (mais que les valeurs enregistrées restent en mémoire).

Etape finale: quand la valeur mémorisé est tenté d'être dépassée, j'aimerais qu'il y ait un simple bip. (si j'ai enregistrer 12, le compteur se remet a zéro. J'essaye d'entrer 13, et la intervient un bip)

J'aimerais préciser que je ne suis pas programmeur de microcontrôleur, donc merci d'avance pour votre précieuse aide

Voici enfin mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
;

; Initialisation pour l'assembleur. Ne rien changer sans raison précise!

	LIST 	 p=16F84A		;Défini le processeur
	INCLUDE <p16F84A.inc>	;Définitions spécifiques

; Initialisation du registre de configuration du micocontroleur
; (pas de protection, pas de retard au démarrage, pas de chien de garde,
;  oscillateur RC)

	__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC 

;********* Déclarations *************************



	CBLOCK 0Ch		;Block de valeurs
Compt1: 1			;Compteur 1 pour temporisation
Compt2: 1			;Compteur 2 pour temporisation
Compt3:	1			;Compteur 3 pour temporisation
Nmbre: 10			;Zone de 16 nombres de 0 à F
CptNmbreD: 10		;Compteur du nombre de code affiché
CptNmbreG: 10		;Compteur du nombre de code affiché
PD: 10				;Pointeur pour le 7 segments de droite
PG: 10				;Pointeur pour le 7 segments de gauche
VD: 1				;Variable permettant d'enregistrer la valeur de l'affichage de droite
VG: 1				;Variable permettant d'enregistrer la valeur de l'affichage de gauche


	ENDC			;Fin de la zone

;************************************************
; DEBUT DU PROGRAMME
;************************************************

Reset	ORG 00h			;Adresse du Reset
		goto Start		;Saut au début du programme

;************************************************

Start	ORG 05h			;Début du programme principal

	BSF  STATUS,RP0		;Sélection page 1
	CLRF TRISB			;Port B en mode sortie (les 8 bits)
	BCF TRISA,1			;Sélection RA1 en sortie (affichage de gauche)
	BCF TRISA,2			;Sélection RA2 en sortie (affichage de droite)
	BSF TRISA,3			;Sélection RA3 en entrée (bouton de droite)
	BSF TRISA,4			;Sélection RA4 en entrée (bouton de gauche)

	BCF STATUS,RP0		;Sélection Bank 0


;************************************************
;Initialisation de codes des nombres en RAM
;************************************************

	MOVLW .192			;Nombre 0
	MOVWF Nmbre
	MOVLW .249			;Nombre 1
	MOVWF Nmbre+1
	MOVLW .164			;Nombre 2
	MOVWF Nmbre+2
	MOVLW .176			;Nombre 3
	MOVWF Nmbre+3
	MOVLW .153			;Nombre 4
	MOVWF Nmbre+4
	MOVLW .146			;Nombre 5
	MOVWF Nmbre+5
	MOVLW .130			;Nombre 6
	MOVWF Nmbre+6
	MOVLW .248			;Nombre 7
	MOVWF Nmbre+7
	MOVLW .128			;Nombre 8
	MOVWF Nmbre+8
	MOVLW .144			;Nombre 9
	MOVWF Nmbre+9

Main
;Adressage indirect par pointeur
	MOVLW Nmbre		;Initialise l'adresse de départ du pointeur
	MOVWF PD		;On charge la valeur de W dans PD
	MOVWF PG		;On charge la valeur de W dans PG
	MOVWF FSR		;Charge l'adresse de départ dans le registre d'adressage indirect
	MOVLW .10		;Initilisation du comteur de nombre à afficher (ici 16 nombres de 0 à F)
	MOVWF CptNmbreD	;Le CptNmbreD peut avoir un maximum de 10 valeures (0,1,2,3,4,5,,6,7,8,9)
	MOVWF CptNmbreG	;Le CptNmbreG peut avoir un maximum de 10 valeures (0,1,2,3,4,5,,6,7,8,9)	

InitD
	MOVLW Nmbre		;Initialise l'adresse de départ du pointeur
	MOVWF PD		;On charge la valeur de W dans PD
	MOVWF FSR		;Charge l'adresse de départ dans le registre d'adressage indirect
	MOVLW .10		;Initilisation du comteur de nombre à afficher (ici 16 nombres de 0 à F)
	MOVWF CptNmbreD
	goto Bouton

InitG
	MOVLW Nmbre		;Initialise l'adresse de départ du pointeur
	MOVWF PG		;On charge la valeur de W dans PG
	MOVWF FSR		;Charge l'adresse de départ dans le registre d'adressage indirect
	MOVLW .10		;Initilisation du comteur de nombre à afficher (ici 16 nombres de 0 à F)
	MOVWF CptNmbreG	
	goto Bouton


;************************************************
;Action lorsque l'on appuie sur le bouton
;************************************************
Bouton
	BTFSC PORTA,3	;Si le bouton droit est appuyé
	goto DAppuye	;On va directement dans DAppuye

	BTFSC PORTA,4	;Si le bouton gauche est appuyé
	goto GAppuye	;On va directement dans DAppuye

	call Aff		;On appel l'affichage

	goto Bouton		;Si on n'appuie pas sur un des 2 boutons, on va refaire la boucle

;************************************************
;Action que doit effectuer le bouton droit lorsque les 2 boutons sont appuyés
;************************************************
BoutonDroit

C'est ici que j'aimerais pouvoir mémoriser la valeur affiché sur l'affichage de droite

;************************************************
;Action que doit effectuer le bouton gauche lorsque les 2 boutons sont appuyés
;************************************************
BoutonGauche

Et ici pour celui de gauche



;***********************************************************
;Action lorsque le bouton de droit est appuyé (et maintenu)
;***********************************************************
DAppuye
	BTFSC PORTA,4
	goto BoutonGauche

	call Aff
	BTFSS PORTA,3
	goto IncrementeD
	goto DAppuye

GAppuye
	BTFSC PORTA,3
	goto BoutonDroit

	call Aff
	BTFSS PORTA,4
	goto IncrementeG
	goto GAppuye

IncrementeD
	INCF PD,1
	call Aff
	DECFSZ CptNmbreD,1
	goto Bouton
	goto InitD

IncrementeG
	INCF PG,1
	call Aff
	DECFSZ CptNmbreG,1
	goto Bouton
	goto InitG

Aff
	MOVFW PD		;On bouge la valeur de PD dans W
	MOVWF FSR		;On met la valeur de W dans FSR
	MOVF INDF,w		;On accède a la valeur de W via INDF
	MOVWF PORTB		;On affiche cette valeur sur le port B
	BCF PORTA, 0x1	; -->
	BSF PORTA, 0x2	;Qui correspond ici à l'écran de gauche	

	MOVLW .3
	MOVWF Compt1
	MOVLW .2
	MOVWF Compt2
	MOVLW .1
	MOVWF Compt3
	
	CALL SPTemp

	MOVFW PG		;On bouge la valeur de PG dans W
	MOVWF FSR		;On met la valeur de W dans FSR
	MOVF INDF,w		;On accède a la valeur de W via INDF
	MOVWF PORTB		;On affiche cette valeur sur le port B
	BCF PORTA, 0x2	; -->
	BSF PORTA, 0x1	;Qui correspond ici à l'écran de droite

	MOVLW .3
	MOVWF Compt1
	MOVLW .2
	MOVWF Compt2
	MOVLW .1
	MOVWF Compt3
	
	CALL SPTemp
	return


;*************************************************
; Sous-programme temporisation 0.5 s
;*************************************************

SPTemp	
	DECFSZ Compt1	;Décrémente Compteur 1, saut si =0
	Goto SPTemp
	DECFSZ Compt2	;Décrémente Compteur 2, saut si =0
	Goto SPTemp
	DECFSZ Compt3	;Décrémente Compteur 3, saut si =0
	Goto SPTemp	
	
	RETURN

Goto Main

;************** Fin du fichier assembleur ********************************
	END