/* uC: Attiny2313 */
/* F_CPU = 2.000.000 Hz */
#include <avr/io.h>
#include <avr/interrupt.h>
//Variablen für die Zeit
volatile unsigned int millisekunden;
volatile unsigned int sekunde;
volatile unsigned int minute;
volatile unsigned int stunde;
int main(void)
{
DDRB |= (1<< PB0);
// Timer 0 konfigurieren
TCCR0A = (1<<WGM01); // CTC Modus
TCCR0B |= (1<<CS11); // Prescaler 8
// ((2000000/

/1000) = 125 bei Qu = 2,0 MHz
OCR0A = 250-1;
// Compare Interrupt erlauben
TIMSK |= (1<<OCIE0A);
// Global Interrupts aktivieren
sei();
while(1)
{
/*Hier kann die aktuelle Zeit
ausgeben werden*/
if (sekunde % 2 == 0) //alle 2 sec LED ON/OFF
{
PORTB &= ~(1<< PB0);//PB0... LOW = LED ON
}else {
PORTB |= (1<< PB0);//PB0...HIGH = LED OFF
}
}
}
/*
Der Compare Interrupt Handler
wird aufgerufen, wenn
TCNT0 = OCR0A = 125-1
ist (125 Schritte), d.h. genau alle 1 ms
*/
ISR (TIMER0_COMPA_vect)
{
millisekunden++;
if(millisekunden == 1000)
{
sekunde++;
millisekunden = 0;
if(sekunde == 60)
{
minute++;
sekunde = 0;
}
if(minute == 60)
{
stunde++;
minute = 0;
}
if(stunde == 24)
{
stunde = 0;
}
}
}
Lesezeichen