du wirst einen timer brauchen der der eine globale variable erhöht
Dieser sourcecode würde auf einem ATMega32 laufen.
Je nach microcontroller kann sich der code geringfügig ändern.
PHP-Code:
volatile int zeit=0;
//interrupt service routine
// wird ausgelöst wenn OCR0 erreicht wird
SIGNAL(TIMER0_COMP_vect)
{
zeit++;
TCNT0 = 0x00; //timer wieder auf null setzen
}
int main(void){
sei(); //enable interrupts
//Timer 0 initialisieren
TCNT0 = 0x00; //Timer 0 mit Null initialisieren
OCR0 = 0x5; //Vergleichsregister initialisieren
TIMSK = (1<<OCIE0); //Output Compare interrupt enable
sbi(TCCR0,CS02);
while(true){
if(zeit==60)
{
sbi(DDRC,PC1); //schalte PC1 als output
sbi(PORTC,PC1); //schalte PC1 auf 1
}
}
}
mit dem vergleichsregister OCR0 legst du fest wie weit er zählen soll bis der interrupt SIGNAL auslöst und raufzählt.
und im main legst dann fest welcher output des microcontrollers geschalten werden soll wenn ein bestimmter wert erreicht ist.
Du musst das vergleichsregister halt dann richtig einstellen damit er genau 1 sekunde zählt
oder 60 sekunden.
je nach Taktfrequenz der microcontrollers.