Algorithme 3.92 KB
;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
	OCR0A <- 255
	OCR0B <-0b00000000
	TCCR0A <- 0b00000010
	TCCR0B <- 0b 0000 0100
	TIMSK0 -> 0b00000010
	TIFR0 -> 0b00000010
	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
	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
	jour=0			;Etat actuel : 1 si jour, 0 si nuit
	T=capteur		;Température actuelle lue par le capteur

    sei
	JMP boucle_inf

boucle_inf:
	CALL reglage	;Fonction de réglage de la chaudière
	JMP boucle_inf

HMJN:
	cli
	
	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)
		    seti
			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)
		    seti
			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)
		    seti
			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)
		    seti
			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)
		    seti
			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
		
	seti
	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:
    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