//Используется таймер-счётчик T1
// некоторые светодиоды бегают туда-сюда
// при этом - один светодиод меняет своё состояние чараз определённый
//промежуток времени (1 Гц) задающийся функцией прерывания по переполнению Т1
//----------------------------------------------------------------------

#include <tiny2313.h>
#include <delay.h>

interrupt [TIM1_OVF] void timer1_ovf_isr(void)  // функция прерывания 
 {
  TCNT1=0x10000-0x1E85;   //для частоты тактирования 8Мгц и делителя 1024 получаем,
                                  //что в одну секунду в TCNT1 регистр прибавится (8*10^6)/1024=7813, 
                                  //следовательно, необходимо выставить "таймер", что бы переполнение произошло через
                                  //это колличество тактов 
  PORTB.3=~PORTB.3;
 }

void main(void)
 {
  unsigned char a=200;

  #pragma optsize-
  CLKPR=0x80;
  CLKPR=0x00;
  #ifdef_OPTIMIZE_SIZE_
  #pragma optsize+
  #endif

  PORTB=0x00;
  DDRB=0xFF;

  TCCR1A=0x00;
  TCCR1B=0x05; // выбор входных импульсов с тактового генератора через предделитель на 1024
  TCNT1=0x10000-0x1E85;   //для частоты тактирования 8Мгц и делителя 1024 получаем,
                                  //что в одну секунду в TCNT1 регистр прибавится (8*10^6)/1024=7813, 
                                  //следовательно, необходимо выставить "таймер", что бы переполнение произошло через
                                  //это колличество тактов 
  
  TIMSK=0x80;  // разрешаем прерывания по переполнению Т1 (для T0 = 0x02)
  
  #asm ("sei") //глобальное включение прерываний (выключить можно по сбросу I бита -> "cli")
    
  
  while(1)
   {
    PORTB.0=1;
    delay_ms(a);
    PORTB.1=1;
    delay_ms(a);
    PORTB.2=1;
    delay_ms(a);
    PORTB.4=1;
    delay_ms(a);
    PORTB.7=1;
    delay_ms(a);
    PORTB.5=1;
    delay_ms(a);
   

 
   PORTB.5=0;
   delay_ms(a);
   PORTB.7=0;
   delay_ms(a);
   PORTB.4=0;
   delay_ms(a);
   PORTB.2=0;
   delay_ms(a);
   PORTB.1=0;
   delay_ms(a);
   PORTB.0=0;
   delay_ms(a);
   };
  }