Algorithme 3.7 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
	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