af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
1
2
3
4
5
|
; Équivalences
.equ PINA = 0x00
.equ DDRA = 0x01
.equ PORTA = 0x02
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
6
|
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
7
8
9
10
|
.equ PINB = 0x03
.equ DDRB = 0x04
.equ PORTB = 0x05
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
11
12
|
.equ SREG = 0x3F
|
930282df
Geoffrey PREUD'HOMME
Afficheur numérique
|
13
14
|
.equ WDTCSR = 0x60
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
15
16
17
18
|
.equ EIMSK = 0x3D
.equ EICRA = 0x69
.equ EICRB = 0x6A
|
6244f6c8
Geoffrey PREUD'HOMME
Initialisation ADC
|
19
20
21
22
23
|
.equ ADMUX = 0x7C
.equ ADCSRB = 0x7B
.equ ADCSRA = 0x7A
.equ ADCH = 0x79
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
24
25
26
27
28
29
|
.equ SPH = 0x3E
.equ SPL = 0x3D
; Nommage des registres utilisés
.def etat = r19
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
30
|
.def reference = r20
|
930282df
Geoffrey PREUD'HOMME
Afficheur numérique
|
31
32
33
34
|
.def d3 = r20 ; Digit 3 (tout à gauche)
.def d2 = r20 ; Digit 2
.def d1 = r20 ; Digit 1
.def d0 = r20 ; Digit 0 (tout à droite)
|
0f97c980
Geoffrey PREUD'HOMME
Bouton valider
|
35
36
|
.def compteur = r20 ; Utilisé pour différentes choses
.def tempo = r20 ; Utilisé pour différentes choses mais très brièvement
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
37
38
39
40
41
42
|
; Vecteurs d'interruptions
.org 0x000 ; Vecteur RESET
jmp debut
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
43
44
45
46
47
48
49
50
51
52
53
|
.org 0x0002 ; INT0
jmp valider
.org 0x0004 ; INT1
jmp retour
.org 0x0006 ; INT2
jmp incrementer
.org 0x0008 ; INT3
jmp decrementer
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
54
|
|
aa2eef0b
Geoffrey PREUD'HOMME
Initialisation wa...
|
55
56
57
58
59
60
61
|
.org 0x0018 ; Watchdog
jmp watchdog
.org 0x003A ; ADC
jmp adc
|
930282df
Geoffrey PREUD'HOMME
Afficheur numérique
|
62
63
|
.org 0x0080
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
64
65
|
; Tableaux de la mémoire du programme
|
930282df
Geoffrey PREUD'HOMME
Afficheur numérique
|
66
|
afficheurNombres:
|
0f97c980
Geoffrey PREUD'HOMME
Bouton valider
|
67
|
.DB 0x3F, 0x30, 0x6D, 0x79, 0x72, 0x5B, 0x5F, 0x31, 0x7F, 0x7B
|
930282df
Geoffrey PREUD'HOMME
Afficheur numérique
|
68
69
70
71
72
|
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
;afficheurLettres:
; .DB ; TODO
; ; A, B, C, D, E, F, G, H ; TODO
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
73
74
75
76
77
|
; Programme
debut:
; Configuration des composants
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
78
79
|
SREG <- 0b10000000
|
930282df
Geoffrey PREUD'HOMME
Afficheur numérique
|
80
|
; Watchdog
|
aa2eef0b
Geoffrey PREUD'HOMME
Initialisation wa...
|
81
82
|
WDTCSR <- 0b00010000
WDTCSR <- 0b01000111
|
930282df
Geoffrey PREUD'HOMME
Afficheur numérique
|
83
|
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
84
85
86
87
88
89
|
; Interruptions externes
EIMSK <- 0b00001111
EICRA <- 0b11111111 ; TODO Oscillations annulables ?
EICRB <- 0b00000000
; ADC
|
6244f6c8
Geoffrey PREUD'HOMME
Initialisation ADC
|
90
91
92
|
ADMUX <- 0b01110000
ADCSRB <- 0b00001011
ADCSRA <- 0b10011101 ; TODO Auto-trigger ?
|
733c078a
Geoffrey PREUD'HOMME
Configuration des...
|
93
|
sei
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
94
95
96
97
98
99
100
|
; Initialisation des valeurs
boucle:
sleep
jmp boucle
; Fonctions
|
0f97c980
Geoffrey PREUD'HOMME
Bouton valider
|
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
afficherHeure:
; Affiche l'heure actuelle
temp <-
ret
afficherTemperature:
; Considère le registre compteur comme une température et l'affiche
d0 <- 0x63 ; Sigle °
d1 <- afficheur[compteur%10]
temp <- compteur + 50
d2 <- afficheur[(temp/10)%10]
d3 <- afficheur[temp/100]
ret
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
agir10s:
; Initialise une lecture ADC
; Met à jour l'état de veille (si on est en état veille)
ret
agirHeure:
; Recharge la température de référence
ret
; Interruption boutons
incrementer:
reti
decrementer:
reti
valider:
|
0f97c980
Geoffrey PREUD'HOMME
Bouton valider
|
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
|
si mode <= 1 saut validerVeille
si mode = 2 saut validerAssoc
si mode <= 9 saut validerAJour
si mode <= 16 saut validerParaAJour
si mode = 17 saut validerTJour
si mode = 18 saut validerParaTJour
si mode = 19 saut validerTNuit
si mode = 20 saut validerParaTNuit
si mode = 21 saut validerHorloge
si mode <= 24 saut validerMenuHorloge
si mode <= 27 saut validerParaHorloge
reti
; TODO Affichages
validerVeille:
mode <- 2
validerAssoc:
mode <- 3
validerAJour:
mode <- mode + 7
reti
validerParaAJour:
; TODO
reti
validerTJour:
mode <- 18
reti
validerParaTJour:
; TODO
mode <- 17
reti
validerTNuit:
mode <- 20
reti
validerParaTNuit:
; TODO
mode <- 19
reti
validerHorloge:
mode <- 22
reti
validerMenuHorloge:
mode <- mode + 3
reti
validerParaHorloge:
mode <- mode - 3
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
179
180
181
182
183
184
185
186
187
188
189
190
|
reti
retour:
reti
; Interruption Watchdog
watchdog:
; Met à jour les registres de temps, active agir10s ou agirHeure si nécessaire
reti
; Interruption ADC
adc:
|
aadee417
Geoffrey PREUD'HOMME
Définition des états
|
191
192
193
194
195
196
197
198
|
si ADCH > reference + 5 saut eteindreChaudiere
si ADCH < reference - 5 saut allumerChaudiere
reti
allumerChaudiere:
PORTC <- 0x01
reti
eteindreChaudiere:
PORTC <- 0x00
|
af2c171d
Geoffrey PREUD'HOMME
Rédaction du matin
|
199
200
201
202
203
204
|
reti
; Interruption timer
timer:
; Affiche le digit suivant sur l'afficheur 7seg
reti
|