diff --git a/principal.txt b/principal.txt index 078965f..d38f089 100644 --- a/principal.txt +++ b/principal.txt @@ -31,18 +31,22 @@ ; Nommage des registres utilisés .def etat = r12 +.def compteur = r6 ; Utilisé pour modifier des valeurs dans le menu + .def reference = r13 ; Température de référence actuelle + .def d3 = r2 ; Digit 3 (tout à gauche) .def d2 = r3 ; Digit 2 .def d1 = r4 ; Digit 1 .def d0 = r5 ; Digit 0 (tout à droite) -.def compteur = r6 ; Utilisé pour modifier des valeurs dans le menu -.def temp = r7 ; Utilisé pour différentes choses mais très brièvement + .def t2 = r8 ; Jour (3 premiers bits) et Heure (5 derniers bits) .def t1 = r9 ; Minutes .def t0 = r10 ; Secondes / 2 .def tt = r11 ; Watchdog artificiel +.def temp = r7 ; Utilisé pour différentes choses mais très brièvement + ; Nommage des adresses RAM utilisées .equ assocs = 0x0200 ; Association des modes aux heures @@ -93,6 +97,10 @@ debut: DDRC@IO <- 0xFF DDRG@IO <- 0xFF + ; Barres de chargement + PORTA@IO <- 0x40 + PORTC@IO <- 0x00 + ; Watchdog ;WDTCSR <- 0b00010000 ;WDTCSR <- 0b01000111 @@ -112,17 +120,43 @@ debut: ADCSRB <- 0b00000010 ADCSRA <- 0b11011110 - sei +; Initialisation des registre + etat <- 0 + ; compteur initialisé quand on en aura besoin + ; reference initialisé avec agirHeure + ; d3, d2, d1, d0 initialisés avec afficherHorloge -; Initialisation des valeurs ; Mercredi 12h34'56 - t2 <- 0b01001100 + t2 <- 0b01001100 t1 <- 34 t0 <- 28 tt <- 0 - etat <- 0 + ; temp initialisé quand on en aura besoin + +; Initialisation de la RAM + ; Valeurs de démonstration : 7° - 27° (on jouerait plus sur du 17° - 21° en réalité) + tempNuit <- 20 + tempJour <- 220 + + ; Initialisation des associations + compteur <- 0 ; Jour +initJour: + temp <- 0 ; Heure +initHeure: + assocs[compteur * 24 + temp] <- 0 ; Par défaut le mode jour + si temp <= 7 alors assocs[compteur * 24 + temp] <- 1 ; Entre minuit et 7h le mode nuit + inc temp + if temp < 24 saut initHeure + inc compteur + if compteur < 7 saut initJour + +; Logique de démarrage call afficherHorloge + call agirHeure + + ; On active les interruptions une fois que tout est prêt + sei boucle: sleep @@ -254,7 +288,7 @@ a10sVeilleTemp: agirHeure: ; Recharge la température de référence - temp <- (t2 / 0b00100000) * 24 + compteur + temp <- (t2 / 0b00100000) * 24 + (t2 & 0b00011111) if assocs[temp] = 0x00 alors reference <- tempJour if assocs[temp] = 0x01 alors reference <- tempNuit ret @@ -311,7 +345,8 @@ etatMenuAssoc: reti etatMenuJours: - compteur <- 0 + ; Par défaut on prend le jour actuel + compteur <- t2 / 0b00100000 etatMenuJoursU: etat <- 3 + compteur call afficherJour @@ -327,7 +362,7 @@ etatMenuJoursC: etatParaJours: etat <- etat + 7 - compteur <- t0 & 0b00011111 + compteur <- t2 & 0b00011111 etatParaJoursU: d3 <- afficheur@ROM[compteur/10] d2 <- afficheur@ROM[compteur%10] @@ -425,25 +460,27 @@ etatMenuHMinu: etatParaHJour: etat <- 25 - compteur <- t0 / 0b00100000 + compteur <- t2 / 0b00100000 call afficherJour reti etatParaHJourC: call boundJour - t0 <- (compteur * 0b00100000) + (t0 & 0b00011111) + t2 <- (compteur * 0b00100000) + (t2 & 0b00011111) + call agirHeure call afficherJour reti etatParaHHeur: etat <- 26 - compteur <- t0 & 0b00011111 + compteur <- t2 & 0b00011111 call afficherHeur reti etatParaHHeurC: call boundHeur - t0 <- (t0 & 0b11100000) + compteur + t2 <- (t2 & 0b11100000) + compteur + call agirHeure call afficherHeur reti @@ -542,6 +579,7 @@ watchdog: ; Interruption ADC adc: + ADCSRA <- 0b11011101 ; DEBUG Lire la température continuellement si ADCH > reference + 5 saut eteindreChaudiere si ADCH < reference - 5 saut allumerChaudiere reti -- libgit2 0.21.2