Commit d47c1384099829b99d94dee494ec9f8dd363268f

Authored by Geoffrey PREUD'HOMME
1 parent 38c40966

Finalisation du programme

Ça maaaaaarche !
Showing 1 changed file with 51 additions and 13 deletions   Show diff stats
@@ -31,18 +31,22 @@ @@ -31,18 +31,22 @@
31 ; Nommage des registres utilisés 31 ; Nommage des registres utilisés
32 32
33 .def etat = r12 33 .def etat = r12
  34 +.def compteur = r6 ; Utilisé pour modifier des valeurs dans le menu
  35 +
34 .def reference = r13 ; Température de référence actuelle 36 .def reference = r13 ; Température de référence actuelle
  37 +
35 .def d3 = r2 ; Digit 3 (tout à gauche) 38 .def d3 = r2 ; Digit 3 (tout à gauche)
36 .def d2 = r3 ; Digit 2 39 .def d2 = r3 ; Digit 2
37 .def d1 = r4 ; Digit 1 40 .def d1 = r4 ; Digit 1
38 .def d0 = r5 ; Digit 0 (tout à droite) 41 .def d0 = r5 ; Digit 0 (tout à droite)
39 -.def compteur = r6 ; Utilisé pour modifier des valeurs dans le menu  
40 -.def temp = r7 ; Utilisé pour différentes choses mais très brièvement 42 +
41 .def t2 = r8 ; Jour (3 premiers bits) et Heure (5 derniers bits) 43 .def t2 = r8 ; Jour (3 premiers bits) et Heure (5 derniers bits)
42 .def t1 = r9 ; Minutes 44 .def t1 = r9 ; Minutes
43 .def t0 = r10 ; Secondes / 2 45 .def t0 = r10 ; Secondes / 2
44 .def tt = r11 ; Watchdog artificiel 46 .def tt = r11 ; Watchdog artificiel
45 47
  48 +.def temp = r7 ; Utilisé pour différentes choses mais très brièvement
  49 +
46 ; Nommage des adresses RAM utilisées 50 ; Nommage des adresses RAM utilisées
47 51
48 .equ assocs = 0x0200 ; Association des modes aux heures 52 .equ assocs = 0x0200 ; Association des modes aux heures
@@ -93,6 +97,10 @@ debut: @@ -93,6 +97,10 @@ debut:
93 DDRC@IO <- 0xFF 97 DDRC@IO <- 0xFF
94 DDRG@IO <- 0xFF 98 DDRG@IO <- 0xFF
95 99
  100 + ; Barres de chargement
  101 + PORTA@IO <- 0x40
  102 + PORTC@IO <- 0x00
  103 +
96 ; Watchdog 104 ; Watchdog
97 ;WDTCSR <- 0b00010000 105 ;WDTCSR <- 0b00010000
98 ;WDTCSR <- 0b01000111 106 ;WDTCSR <- 0b01000111
@@ -112,17 +120,43 @@ debut: @@ -112,17 +120,43 @@ debut:
112 ADCSRB <- 0b00000010 120 ADCSRB <- 0b00000010
113 ADCSRA <- 0b11011110 121 ADCSRA <- 0b11011110
114 122
115 - sei 123 +; Initialisation des registre
  124 + etat <- 0
  125 + ; compteur initialisé quand on en aura besoin
  126 + ; reference initialisé avec agirHeure
  127 + ; d3, d2, d1, d0 initialisés avec afficherHorloge
116 128
117 -; Initialisation des valeurs  
118 ; Mercredi 12h34'56 129 ; Mercredi 12h34'56
119 - t2 <- 0b01001100 130 + t2 <- 0b01001100
120 t1 <- 34 131 t1 <- 34
121 t0 <- 28 132 t0 <- 28
122 tt <- 0 133 tt <- 0
123 134
124 - etat <- 0 135 + ; temp initialisé quand on en aura besoin
  136 +
  137 +; Initialisation de la RAM
  138 + ; Valeurs de démonstration : 7° - 27° (on jouerait plus sur du 17° - 21° en réalité)
  139 + tempNuit <- 20
  140 + tempJour <- 220
  141 +
  142 + ; Initialisation des associations
  143 + compteur <- 0 ; Jour
  144 +initJour:
  145 + temp <- 0 ; Heure
  146 +initHeure:
  147 + assocs[compteur * 24 + temp] <- 0 ; Par défaut le mode jour
  148 + si temp <= 7 alors assocs[compteur * 24 + temp] <- 1 ; Entre minuit et 7h le mode nuit
  149 + inc temp
  150 + if temp < 24 saut initHeure
  151 + inc compteur
  152 + if compteur < 7 saut initJour
  153 +
  154 +; Logique de démarrage
125 call afficherHorloge 155 call afficherHorloge
  156 + call agirHeure
  157 +
  158 + ; On active les interruptions une fois que tout est prêt
  159 + sei
126 160
127 boucle: 161 boucle:
128 sleep 162 sleep
@@ -254,7 +288,7 @@ a10sVeilleTemp: @@ -254,7 +288,7 @@ a10sVeilleTemp:
254 288
255 agirHeure: 289 agirHeure:
256 ; Recharge la température de référence 290 ; Recharge la température de référence
257 - temp <- (t2 / 0b00100000) * 24 + compteur 291 + temp <- (t2 / 0b00100000) * 24 + (t2 & 0b00011111)
258 if assocs[temp] = 0x00 alors reference <- tempJour 292 if assocs[temp] = 0x00 alors reference <- tempJour
259 if assocs[temp] = 0x01 alors reference <- tempNuit 293 if assocs[temp] = 0x01 alors reference <- tempNuit
260 ret 294 ret
@@ -311,7 +345,8 @@ etatMenuAssoc: @@ -311,7 +345,8 @@ etatMenuAssoc:
311 reti 345 reti
312 346
313 etatMenuJours: 347 etatMenuJours:
314 - compteur <- 0 348 + ; Par défaut on prend le jour actuel
  349 + compteur <- t2 / 0b00100000
315 etatMenuJoursU: 350 etatMenuJoursU:
316 etat <- 3 + compteur 351 etat <- 3 + compteur
317 call afficherJour 352 call afficherJour
@@ -327,7 +362,7 @@ etatMenuJoursC: @@ -327,7 +362,7 @@ etatMenuJoursC:
327 362
328 etatParaJours: 363 etatParaJours:
329 etat <- etat + 7 364 etat <- etat + 7
330 - compteur <- t0 & 0b00011111 365 + compteur <- t2 & 0b00011111
331 etatParaJoursU: 366 etatParaJoursU:
332 d3 <- afficheur@ROM[compteur/10] 367 d3 <- afficheur@ROM[compteur/10]
333 d2 <- afficheur@ROM[compteur%10] 368 d2 <- afficheur@ROM[compteur%10]
@@ -425,25 +460,27 @@ etatMenuHMinu: @@ -425,25 +460,27 @@ etatMenuHMinu:
425 460
426 etatParaHJour: 461 etatParaHJour:
427 etat <- 25 462 etat <- 25
428 - compteur <- t0 / 0b00100000 463 + compteur <- t2 / 0b00100000
429 call afficherJour 464 call afficherJour
430 reti 465 reti
431 466
432 etatParaHJourC: 467 etatParaHJourC:
433 call boundJour 468 call boundJour
434 - t0 <- (compteur * 0b00100000) + (t0 & 0b00011111) 469 + t2 <- (compteur * 0b00100000) + (t2 & 0b00011111)
  470 + call agirHeure
435 call afficherJour 471 call afficherJour
436 reti 472 reti
437 473
438 etatParaHHeur: 474 etatParaHHeur:
439 etat <- 26 475 etat <- 26
440 - compteur <- t0 & 0b00011111 476 + compteur <- t2 & 0b00011111
441 call afficherHeur 477 call afficherHeur
442 reti 478 reti
443 479
444 etatParaHHeurC: 480 etatParaHHeurC:
445 call boundHeur 481 call boundHeur
446 - t0 <- (t0 & 0b11100000) + compteur 482 + t2 <- (t2 & 0b11100000) + compteur
  483 + call agirHeure
447 call afficherHeur 484 call afficherHeur
448 reti 485 reti
449 486
@@ -542,6 +579,7 @@ watchdog: @@ -542,6 +579,7 @@ watchdog:
542 579
543 ; Interruption ADC 580 ; Interruption ADC
544 adc: 581 adc:
  582 + ADCSRA <- 0b11011101 ; DEBUG Lire la température continuellement
545 si ADCH > reference + 5 saut eteindreChaudiere 583 si ADCH > reference + 5 saut eteindreChaudiere
546 si ADCH < reference - 5 saut allumerChaudiere 584 si ADCH < reference - 5 saut allumerChaudiere
547 reti 585 reti