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:
|
ccce77ff
ezalczer
ADCH
|
232
|
capteur<-ADCH ; On charge la valeur de la sonde dans capteur
|
150a1232
nhavard
ajout de la fonct...
|
233
|
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
|