#include <avr/io.h>
#include <avr/interrupt.h>


#define MR  PORTB &= ~(1<<PB3); PORTB |= (1<<PB3)
#define SH  PORTB |=  (1<<PB2); PORTB &= ~(1<<PB2)
#define OUT PORTB |=  (1<<PB1); PORTB &= ~(1<<PB1)
#define D_H  PORTB |=  (1<<PB0)
#define D_L  PORTB &= ~(1<<PB0)




void ledout(unsigned short szam){
  MR;
  for(signed char i=15; i>=0; i--){
    if (szam & (1<<i)) D_H;
	else D_L;
	SH;
  }
  OUT;
}


unsigned short bar(char hosz){
  unsigned short tar=0;
  hosz=16-hosz;
  for(signed char i=15; i>=hosz; i--){
    tar|=1<<i;
  }
  return tar;
}


volatile unsigned char s=0,m=0,h=0,d=0;  //időváltozók

int main(){
  DDRB=0xFF;
  DDRD=0xFF;
  TCCR1B=(1<<CS12)
		|(0<<CS11)
		|(1<<CS10) //20MHz/1024= 19531Hz;
		|(1<<WGM13)
		|(1<<WGM12);
  TCCR1A=(0<<WGM11)
		|(0<<WGM10); //ICR1-ig számol
	
  ICR1=19530; //19531 a timer plafon ==> 1s-os jel
  sei();  //global interrupt enable
  TIMSK1|=1<<ICIE1; //interrupt CTC-nél

  ledout(0);  //kijelzőt töröl

  TCNT1=0;
  while(1){}  

  return 0;
}



ISR(TIMER1_CAPT_vect) {  //1mp-enként lefut
  s++;
  if (s==60){
    m++;
	s=0;
  }
  if (m==60){
    h++;
	m=0;
  }
  if (h==24){
    d++;
	h=0;
  }
  if (d==255) d=0;
  ledout(s);
	
}
