Blame view

Algorithme 4.9 KB
e44501f2   ezalczer   Algorithme
1
2
3
4
  ;Algorithme de tutorat de microp
  
  ;Initialisation
  
150a1232   nhavard   ajout de la fonct...
5
6
7
8
  .equ DDRA = 0x01
  .equ PORTA = 0x02
  .equ DDRB = 0x03
  .equ PORTB = 0x05
c4cdf489   nhavard   init ports C et D
9
10
11
12
  .equ DDRC = 0x07
  .equ PORTC = 0x08
  .equ PIND = 0x09
  .equ DDRD = 0x0A
150a1232   nhavard   ajout de la fonct...
13
14
15
  .equ PINF = 0x0F
  .equ DDRF = 0x10
  
e4e06230   nhavard   Ajout des adresse...
16
17
18
  
  .equ EIMSK = 0x1D
  .equ EICRA = 0x69
ab6a4621   nhavard   Ajout de l'init d...
19
20
21
22
23
24
25
26
27
28
29
30
  .equ RAMEND = 0x21FF
  .equ SPH = 0x3E
  .equ SPL = 0x3D
  
  .equ ADMUX = 0x7C
  .equ ADCSRB = 0x7B
  .equ ADCSRA = 0x7A
  .equ ADCL = 0x78 
  .equ ADCH = 0x79
  
  
  
ab6a4621   nhavard   Ajout de l'init d...
31
  .org 0x0000:
e44501f2   ezalczer   Algorithme
32
33
  	JMP debut
  
ab6a4621   nhavard   Ajout de l'init d...
34
  .org 0x0002:
e44501f2   ezalczer   Algorithme
35
36
  	JMP HMJN
  
ab6a4621   nhavard   Ajout de l'init d...
37
  .org 0x0004:
e44501f2   ezalczer   Algorithme
38
  	JMP MH
ab6a4621   nhavard   Ajout de l'init d...
39
40
41
  
  .org 0x0006:
      JMP CAN
e44501f2   ezalczer   Algorithme
42
  	
ab6a4621   nhavard   Ajout de l'init d...
43
  .org 0x002E:
e44501f2   ezalczer   Algorithme
44
45
  	JMP inc_heure
  
ab6a4621   nhavard   Ajout de l'init d...
46
47
  
  
e44501f2   ezalczer   Algorithme
48
  debut:
99d558da   gwaterlo   Edit des ports us...
49
  	DDRA = 0x00
e44501f2   ezalczer   Algorithme
50
51
  	DDRB = 0xFF
  	DDRC = 0x0F
99d558da   gwaterlo   Edit des ports us...
52
  	DDRD = 0x00
150a1232   nhavard   ajout de la fonct...
53
  	DDRF = 0x00
b82d01dc   gwaterlo   Indentation -1
54
  	OCR0A->250
a02309dc   gwaterlo   Indentation
55
56
57
58
59
          OCR0B = 0x00
          TCCR0A = 0xC2
          TCCR0B = 0x04
          TIMSK0 = 0x02
          TIFR0 = 0x02
e4e06230   nhavard   Ajout des adresse...
60
  	EIMSK = 0x03
e44501f2   ezalczer   Algorithme
61
62
  	EICRA = 0x06
  	EICRB = 0x00
ab6a4621   nhavard   Ajout de l'init d...
63
64
65
66
  	LDI R28, low(RAMEND)
  	LDI R29, high(RAMEND)
  	OUT SPL, R28
  	OUT SPH, R29
200026c1   ezalczer   ajout jour
67
68
69
  	ADMUX <- 0b00010000
  	ADCSRB <- 0b00000000
  	ADCSRA <- 0b11100101
e44501f2   ezalczer   Algorithme
70
71
72
73
74
75
76
77
78
  	tab jour_lettre_1 = [70, 6E, 6E, 1C, 7C, 5B, 7E]
  	tab jour_lettre_2 = [7C, 6C, 73, 73, 73, 6F, 0C]
  	tab chiffre = [7E, 0C, 37, 17, 4D, 5B, 7B, 0E, 7F, 5F]
  	tab heure_jour = [08, 08, 08, 08, 08, 08, 08]
  	tab minute_jour = [00, 00, 00, 00, 00 ,00, 00]
  	tab heure_nuit = [20, 20, 20, 20, 20, 20, 20]
  	tab minute_nuit = [00, 00, 00, 00, 00 ,00, 00]
  	T_nuit=15		;Température de la nuit
  	T_jour=20		;Température du jour
3065ceb0   ezalczer   reglage
79
  	Jour=0          ;Jour actuel
e44501f2   ezalczer   Algorithme
80
81
82
  	Heure=0			;Heure actuelle
  	Minute=0		;Minute actuelle
  	Seconde=0		;Seconde actuelle
6d9ee0ad   ezalczer   Ajout de top_seconde
83
  	Top_seconde=0   ;Tops de timer0
e44501f2   ezalczer   Algorithme
84
  	chauffe=0		;Etat actuel : 1 si en chauffage, 0 sinon
200026c1   ezalczer   ajout jour
85
  	T=0		;Température actuelle lue par le capteur
e44501f2   ezalczer   Algorithme
86
  
c528355c   ezalczer   Ajout des reti et...
87
      sei
e44501f2   ezalczer   Algorithme
88
89
90
91
  	JMP boucle_inf
  
  boucle_inf:
  	CALL reglage	;Fonction de réglage de la chaudière
3bc2d780   ezalczer   affichage alternatif
92
93
94
95
96
  	if(Seconde/10 == 0 || Seconde/10 == 2 // Seconde/10 == 4)
  	    Afficher(Heure:Minute)
  	else
  	    Afficher(T)
  	call tempo
e44501f2   ezalczer   Algorithme
97
98
99
  	JMP boucle_inf
  
  HMJN:
c528355c   ezalczer   Ajout des reti et...
100
  	cli
e44501f2   ezalczer   Algorithme
101
102
103
  	
  	WHILE(!HMJN)
  		if(plus)
200026c1   ezalczer   ajout jour
104
105
106
107
108
109
110
  			Jour=(Jour+1)%7	;Ajout de 1
  		if(moins)
  			Jour=(Jour-1)%7	;Retrait de 1
  		Afficher(jour_lettre_1[Jour], jour_lettre_2[Jour])	;Affichage du jour
  	
  	WHILE(!HMJN)
  		if(plus)
e44501f2   ezalczer   Algorithme
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
  			Heure=(Heure+1)%24	;Ajout de 1
  		if(moins)
  			Heure=(Heure+23)%24	;Retrait de 1
  		Afficher(Heure:Minute)	;Affichage de l'heure
  		
  	WHILE(!HMJN)
  		if(plus)
  			Minute=(Minute+1)%60	;Ajout de 1
  		if(moins)
  			Minute=(Minute+59)%60	;Retrait de 1
  		Afficher(Heure:Minute)		;Affichage de l'heure
  		
  	WHILE(!HMJN)
  		if(plus)
  			if(T_jour<30.5)
  				T_jour=T_jour+0.5	;Ajout par pas de 0.5
  		if(moins)
  			if(T_jour>5)
  				T=jour=T_jour-0.5	;Retrait par pas de 0.5
  		Afficher(T_jour)			;Affichage de la temperature du jour
  	
  	WHILE(!HMJN)
  		if(plus)
  			if(T_nuit<30.5)
  				T_nuit=T_nuit+0.5	;Ajout par pas de 0.5
  		if(moins)
  			if(T_nuit>5)
  				T=nuit=T_nuit-0.5	;Retrait par pas de 0.5
  		Afficher(T_nuit)			;Affichage de la temperature de la nuit
  	
c528355c   ezalczer   Ajout des reti et...
141
  	sei
e44501f2   ezalczer   Algorithme
142
143
144
  	RETI
  	
  MH:
c528355c   ezalczer   Ajout des reti et...
145
  	cli
e44501f2   ezalczer   Algorithme
146
147
148
  	Jour_aff=0
  	while(!ok)
  		if(MH)
3065ceb0   ezalczer   reglage
149
  		    sei
e44501f2   ezalczer   Algorithme
150
151
152
153
154
155
156
157
158
159
160
  			RETI
  		if(plus)
  			Jour_aff=(Jour_aff+1)%7
  		if(moins)
  			Jour_aff=(Jour_aff-1)%7
  		afficher jour_lettre_1[Jour_aff]
  		afficher jour_lettre_2[Jour_aff]
  		call tempo
  		
  	while(!ok)
  		if(MH)
3065ceb0   ezalczer   reglage
161
  		    sei
e44501f2   ezalczer   Algorithme
162
163
164
165
166
167
168
169
170
171
172
  			RETI
  		if(plus)
  			heure_jour[Jour_aff]=(heure_jour[Jour_aff]+1)%24
  		if(moins)
  			heure_jour[Jour_aff]=(heure_jour[Jour_aff]-1)%24
  		afficher heure_jour[Jour_aff]
  		afficher minute_jour[Jour_aff]
  		call tempo
  		
  	while(!ok)
  		if(MH)
3065ceb0   ezalczer   reglage
173
  		    sei
e44501f2   ezalczer   Algorithme
174
175
176
177
178
179
180
181
182
183
184
  			RETI
  		if(plus)
  			minute_jour[Jour_aff]=(minute_jour[Jour_aff]+1)%24
  		if(moins)
  			minute_jour[Jour_aff]=(minute_jour[Jour_aff]-1)%24
  		afficher heure_jour[Jour_aff]
  		afficher minute_jour[Jour_aff]
  		call tempo
  		
  	while(!ok)
  		if(MH)
3065ceb0   ezalczer   reglage
185
  		    sei
e44501f2   ezalczer   Algorithme
186
187
188
189
190
191
192
193
194
195
196
  			RETI
  		if(plus)
  			heure_nuit[Jour_aff]=(heure_nuit[Jour_aff]+1)%24
  		if(moins)
  			heure_nuit[Jour_aff]=(heure_nuit[Jour_aff]-1)%24
  		afficher heure_nuit[Jour_aff]
  		afficher minute_nuit[Jour_aff]
  		call tempo
  		
  	while(!ok)
  		if(MH)
3065ceb0   ezalczer   reglage
197
  		    sei
e44501f2   ezalczer   Algorithme
198
199
200
201
202
203
204
205
206
  			RETI
  		if(plus)
  			minute_nuit[Jour_aff]=(minute_nuit[Jour_aff]+1)%24
  		if(moins)
  			minute_nuit[Jour_aff]=(minute_nuit[Jour_aff]-1)%24
  		afficher heure_nuit[Jour_aff]
  		afficher minute_nuit[Jour_aff]
  		call tempo
  		
3065ceb0   ezalczer   reglage
207
  	sei
e44501f2   ezalczer   Algorithme
208
209
210
  	RETI
  				
  reglage:
3065ceb0   ezalczer   reglage
211
212
      H_reglage_jour=Heure_jour[Jour]:Minute_jour[Jour];
      H_reglage_nuit=Heure_nuit[Jour]:Minute_nuit[Jour];
ab6a4621   nhavard   Ajout de l'init d...
213
  	CALL CAN		;Lecture de la valeur du capteur de température
3065ceb0   ezalczer   reglage
214
  	if(Heure:Minute<H_reglage_jour || Heure:Minute>H_reglage_nuit)
200026c1   ezalczer   ajout jour
215
  		if(T_nuit-T>0.5 && !chauffe)
200026c1   ezalczer   ajout jour
216
217
  			chauffe=1
  		else if(T_nuit-T<-0.5 && chauffe)
200026c1   ezalczer   ajout jour
218
  			chauffe=0
e44501f2   ezalczer   Algorithme
219
  	else
200026c1   ezalczer   ajout jour
220
  		if(T_jour-T>0.5 && !chauffe)
200026c1   ezalczer   ajout jour
221
222
  			chauffe=1
  		else if(T_jour-T<-0.5 && chauffe)
200026c1   ezalczer   ajout jour
223
  			chauffe=0
da283eca   ezalczer   changement reglage
224
225
226
227
  	if(chauffe)
  	    allumage chaudiere
  	else
  	    extinction chaudiere
e44501f2   ezalczer   Algorithme
228
229
  	RET
  	
ab6a4621   nhavard   Ajout de l'init d...
230
231
  
  CAN:
150a1232   nhavard   ajout de la fonct...
232
233
      LDI capteur, PINF@IO    ; On charge la valeur de la sonde dans capteur
      T = 5 + capteur/10      ; 5+0 <= T <= 5+255/10=30.5
ab6a4621   nhavard   Ajout de l'init d...
234
235
236
237
      
      
      
      
e44501f2   ezalczer   Algorithme
238
  inc_heure:
699ced4c   ezalczer   Correction
239
      Top_seconde=Top_seconde+1
4837e77d   ezalczer   62500->250
240
      if(Top_seconde==250)
6d9ee0ad   ezalczer   Ajout de top_seconde
241
242
243
244
245
246
247
248
249
250
251
          Top_seconde=0
  	    Seconde=Seconde+1
  	    if(Seconde==60)
  	    	Seconde=0
  	    	Minute=Minute+1
  	    	if(Minute==60)
  	    		Minute=0
  	    		Heure=Heure+1
  	    		if(Heure==24)
  	    			Heure=0
  	    			Jour=(Jour+1)%7
e44501f2   ezalczer   Algorithme
252
253
254
255
256
257
  	call reglage
  	RETI
  	
  	
  tempo:
  	wait 4ms
6d9ee0ad   ezalczer   Ajout de top_seconde
258
  	RET