;Algorithme de tutorat de microp ;Initialisation .equ RAMEND = 0x21FF .equ SPH = 0x3E .equ SPL = 0x3D .equ ADMUX = 0x7C .equ ADCSRB = 0x7B .equ ADCSRA = 0x7A .equ ADCL = 0x78 .equ ADCH = 0x79 .org 0x0000: JMP debut .org 0x0002: JMP HMJN .org 0x0004: JMP MH .org 0x0006: JMP CAN .org 0x002E: JMP inc_heure debut: DDRA = 0x00 DDRB = 0xFF DDRC = 0x0F DDRD = 0x00 DDRF = 0x02 OCR0A->250 OCR0B = 0x00 TCCR0A = 0xC2 TCCR0B = 0x04 TIMSK0 = 0x02 TIFR0 = 0x02 EIMSK = 0x037 EICRA = 0x06 EICRB = 0x00 LDI R28, low(RAMEND) LDI R29, high(RAMEND) OUT SPL, R28 OUT SPH, R29 ADMUX <- 0b00010000 ADCSRB <- 0b00000000 ADCSRA <- 0b11100101 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 Jour=0 ;Jour actuel Heure=0 ;Heure actuelle Minute=0 ;Minute actuelle Seconde=0 ;Seconde actuelle Top_seconde=0 ;Tops de timer0 chauffe=0 ;Etat actuel : 1 si en chauffage, 0 sinon T=0 ;Température actuelle lue par le capteur sei JMP boucle_inf boucle_inf: CALL reglage ;Fonction de réglage de la chaudière if(Seconde/10 == 0 || Seconde/10 == 2 // Seconde/10 == 4) Afficher(Heure:Minute) else Afficher(T) call tempo JMP boucle_inf HMJN: cli WHILE(!HMJN) if(plus) Jour=(Jour+1)%7 ;Ajout de 1 if(moins) Jour=(Jour-1)%7 ;Retrait de 1 Afficher(jour_lettre_1[Jour], jour_lettre_2[Jour]) ;Affichage du jour 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 sei RETI MH: cli Jour_aff=0 while(!ok) if(MH) sei 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) sei 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) sei 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) sei 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) sei 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 sei RETI reglage: H_reglage_jour=Heure_jour[Jour]:Minute_jour[Jour]; H_reglage_nuit=Heure_nuit[Jour]:Minute_nuit[Jour]; CALL CAN ;Lecture de la valeur du capteur de température if(Heure:MinuteH_reglage_nuit) if(T_nuit-T>0.5 && !chauffe) demarrage chaudiere ;Démarrage de la chaudière chauffe=1 else if(T_nuit-T<-0.5 && chauffe) stop chaudiere ;Arrêt de la chaudière chauffe=0 else if(T_jour-T>0.5 && !chauffe) demarrage chaudiere ;Démarrage de la chaudière chauffe=1 else if(T_jour-T<-0.5 && chauffe) stop chaudiere ;Arrêt de la chaudière chauffe=0 RET CAN: T = ADCH inc_heure: Top_seconde=Top_seconde+1 if(Top_seconde==250) Top_seconde=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