Code:
{--------------------------------------------------------------}
{ Const Declarations }
const einschalttemperatur_tag : Word = 26; //26
abschalttemperatur_tag : Word = 28; //28
einschalttemperatur_nacht : Word = 14; //2
abschalttemperatur_nacht : Word = 16; //28
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
a : WORD;
b : BOOLEAN;
seconds, minutes, hours : byte;
second, minute, hour: string[2];
{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
DDRB:= %11111111;
end InitPorts;
Procedure RTC;
BEGIN
I2Cout($50, 2);
second:=I2Cinp($50, Seconds);
I2Cout($50, 3);
minute:=I2Cinp($50, Minutes);
I2Cout($50, 4);
hour:=I2Cinp($50, hours);
second:=bytetohex (seconds);
minute:=bytetohex (minutes);
hour:=bytetohex (hours);
LCDCLR;
LCDxy(1,0);
write (LCDOut,'Aktuelle Zeit');
LCDxy(3,1);
write (LCDOut,hour);
LCDxy(5,1);
write (LCDOut,':');
LCDxy(6,1);
write (LCDOut,minute);
LCDxy(8,1);
write (LCDOut,':');
LCDxy(9,1);
write (LCDOut,second);
mdelay(20);
end;
Procedure Temperatur_messen;
BEGIN
a:= GetAdc ;
a:= a-390;
a:= a * 17;
a:= a div 100;
end;
Procedure Tagestemperatur;
BEGIN
LCDCLR;
LCDxy(2,0);
write (LCDOut, 'Lufttemp:');
LCDXY(12,0);
write (LCDOut ,IntToStr(a));
If a < einschalttemperatur_tag THEN // Wenn Temperatur unter 26°, einschalten.
PortB:=%11111111;
b:= TRUE; // Heitzung 'an' Flag setzen.
endif;
If a >= abschalttemperatur_tag THEN // Wenn Temperatur um 28°, ausschalten.
PortB:=%00000000;
b:= FALSE; // Heitzung 'aus' Flag setzen.
endif;
If b = TRUE THEN
LCDXY(0,1);
write (LCDOut, 'Bodenheizung:an');
ELSE
LCDXY(0,1);
write (LCDOut, 'Bodenheizung:aus');
endif;
mdelay(100);
end;
Procedure Nachttemperatur;
BEGIN
LCDCLR;
LCDxy(2,0);
write (LCDOut, 'Lufttemp:');
LCDXY(12,0);
write (LCDOut ,IntToStr(a));
If a < einschalttemperatur_nacht THEN // Wenn Temperatur unter 26°, einschalten.
PortB:=%11111111;
b:= TRUE; // Heitzung 'an' Flag setzen.
endif;
If a >= abschalttemperatur_nacht THEN // Wenn Temperatur um 28°, ausschalten.
PortB:=%00000000;
b:= FALSE; // Heitzung 'aus' Flag setzen.
endif;
If b = TRUE THEN
LCDXY(0,1);
write (LCDOut, 'Bodenheizung:an');
ELSE
LCDXY(0,1);
write (LCDOut, 'Bodenheizung:aus');
endif;
mdelay(100);
end;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
InitPorts;
EnableInts;
//I2Cout($50, 2, $00); // Sekunden stellen
//I2Cout($50, 3, $05); // Minuten stellen
//I2Cout($50, 4, $20); // Stunden stellen
loop
RTC;
mdelay (1000);
Temperatur_messen;
If hour = 23 THEN
Nachttemperatur;
mdelay(1000);
IF hour = 08 THEN
Tagestemperatur;
mdelay(1000);
ENDIF;
ENDIF;
endloop;
end Tutor01.
Lesezeichen