;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:MinuteH_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