Blame view

Algorithme 3.7 KB
e44501f2   ezalczer   Algorithme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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
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
179
180
181
182
183
  ;Algorithme de tutorat de microp
  
  ;Initialisation
  
  0x0000:
  	JMP debut
  
  0x0002:
  	JMP HMJN
  
  0x0004:
  	JMP MH
  	
  0x002E:
  	JMP inc_heure
  
  debut:
  	DDRA = 0x07
  	DDRB = 0xFF
  	DDRC = 0x0F
  	DDRD = 0x03
  	DDRF = 0x02
  	EIMSK = 0x037
  	EICRA = 0x06
  	EICRB = 0x00
  	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
  	Heure=0			;Heure actuelle
  	Minute=0		;Minute actuelle
  	Seconde=0		;Seconde actuelle
  	millisec=0;
  	chauffe=0		;Etat actuel : 1 si en chauffage, 0 sinon
  	jour=0			;Etat actuel : 1 si jour, 0 si nuit
  	T=capteur		;Température actuelle lue par le capteur
  
  	JMP boucle_inf
  
  boucle_inf:
  	CALL reglage	;Fonction de réglage de la chaudière
  	JMP boucle_inf
  
  HMJN:
  	;Desactive les interruptions
  	
  	WHILE(!HMJN)
  		if(plus)
  			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
  	
  	;Reactive les interruptions
  	RETI
  	
  MH:
  	;Desactive les interruptions
  	Jour_aff=0
  	while(!ok)
  		if(MH)
  			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)
  			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)
  			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)
  			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)
  			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
  		
  	;Reactive les interruptions
  	RETI
  				
  reglage:
  	T=capteur		;Lecture de la valeur du capteur de température
  	if(Heure:Minute<H_jour || Heure:Minute>H_nuit)
  		if(T_nuit-T>0.5)
  			demarrage chaudiere		;Démarrage de la chaudière
  		else if(T_nuit-T<-0.5)
  			stop chaudiere			;Arrêt de la chaudière
  	else
  		if(T_jour-T>0.5)
  			demarrage chaudiere		;Démarrage de la chaudière
  		else if(T_jour-T<-0.5)
  			stop chaudiere			;Arrêt de la chaudière
  	RET
  	
  inc_heure:
  	Millisec=Millisec+1
  	if(Millisec==250)
  		Millisec=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
  	call reglage
  	RETI
  	
  	
  tempo:
  	wait 4ms
  	RET