#define MUX_AUSGAENGE 16 #define MUX_DIGITAL_EINGAENGE 8 unsigned char Ausgang[MUX_AUSGAENGE]; unsigned char Eingang[MUX_DIGITAL_EINGAENGE]; #define FrostSchutz 1 #if FrostSchutz #define FrostSchutzAnzahl 5 #define FrostAusgangAnfang 11 #define FrostEingangAnfang 0 #define FrostSchutzPrioritaetZeitSek 1200 unsigned char FrostSchutzPrioritaetNr; unsigned char FrostSchutzEingaengeBits; unsigned char FrostSchutzAusgaengeBits; unsigned short FrostSchutzZeit; unsigned char FrostSchutzAusgangIstAn; unsigned char FrostSchutzAusgangSollAn; #endif // FrostSchutz void main(void) { unsigned char i,m; #if FrostSchutz FrostSchutzPrioritaetNr=0; FrostSchutzEingaengeBits=0; FrostSchutzAusgaengeBits=0; FrostSchutzZeit=0; FrostSchutzAusgangIstAn=0; #endif // FrostSchutz while(1) { #if FrostSchutz if(Flanke1000Ms) { for(i=0,FrostSchutzEingaengeBits=0;i=FrostSchutzPrioritaetZeitSek) //nach diser Zeit Prioritaet verschieben { FrostSchutzZeit=0; ++FrostSchutzPrioritaetNr; if (FrostSchutzPrioritaetNr>=FrostSchutzAnzahl) FrostSchutzPrioritaetNr=0; } FrostSchutzAusgangSollAn = 0; m= FrostSchutzPrioritaetNr; for(i=0;i=FrostSchutzAnzahl) m=0; } if(!FrostSchutzAusgangSollAn) //Kein Heizen ist notwendig { if(FrostSchutzAusgangIstAn) { Ausgang[(FrostSchutzAusgangIstAn-1)+FrostAusgangAnfang]=0; FrostSchutzAusgangIstAn=0; } } else //Heizen ist notwendig { if ( !FrostSchutzAusgangIstAn) //Kein Heizungausgang war aktiv, { FrostSchutzAusgangIstAn = FrostSchutzAusgangSollAn; Ausgang[(FrostSchutzAusgangIstAn-1)+FrostAusgangAnfang]=1; } else if (FrostSchutzAusgangIstAn!=FrostSchutzAusgangSollAn) //Eine andere als soll Heizung istbaktiv { Ausgang[(FrostSchutzAusgangIstAn-1)+FrostAusgangAnfang]=0; FrostSchutzAusgangIstAn=0; } } //als Bit darstellen gesetzter Ausgang if(FrostSchutzAusgangIstAn) FrostSchutzAusgaengeBits = (1<<(FrostSchutzAusgangIstAn-1)); else FrostSchutzAusgaengeBits = 0; } #endif // FrostSchutz }//End while(1)