.include "C:\avr\appnotes\2313def.inc"

.def     Temp=R16
.def     Power=R17
.def     Count_0=R18
.def     Quater=R19
.def     Temp4=R20

.cseg
.org 0

rjmp Reset            ;вектора прерываний
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP




;Reset:
INT_0:
INT_1:
Timer1_capt1:
;Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
          reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
reset:    ldi Temp,0b11111111   ;настройка портов
          out DDRB,Temp
          out DDRD,Temp

          ldi Temp,0b01000000   ;разрешить прерывание компаратора
          out TIMSK,Temp

          ldi Temp,0b00000101   ;тактовый сигнал = CK/1024 = 4883имп/с
          out TCCR1B,Temp

          ldi Temp,0x13         ;инициализация компаратора под секунду
          out OCR1AH,Temp
          ldi Temp,0x13
          out OCR1AL,Temp

          ldi Temp,RamEnd       ;установка указателя стека
          out SPL,Temp

          ldi Power,0b00000101  ;инициализация питалова
	  out PortB,Power

          ldi Temp,0b00110000  ;инициализация питалова
	  out PortD,Temp

          ldi Temp,0            ;обнуление таймера
          out TCNT1H,Temp
          out TCNT1L,Temp
	  ldi Quater,0
	  ldi Count_0,0

          sei                   ;разрешить прерывания


;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Cycle:      rjmp Cycle              ;бесконечный цикл


;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************

Timer1_comp1:
         ldi Temp,0            ;обнуление таймера
         out TCNT1H,Temp
         out TCNT1L,Temp


Timer:   inc Count_0  	       ;Оп! секунда
         cpi Count_0,2         ;если две
	 breq Quater_time	;о! четверть!
	 rjmp To_cycle		;нет - так дальше крутим

Quater_time:
	 ldi Count_0,0         ;сброс 0-го счётчика
	 inc Quater
	 cpi Quater,3		;время менять?!
	 breq Power_off
	 cpi Quater,4
	 breq Power_on
	 rjmp To_cycle

Power_off:  ldi Power,0b00000000	;вырубаем
	    out PortB,Power
	    rjmp To_cycle

Power_on:  ldi Power,0b00000101	;врубили! и сбросили четверти
	   out PortB,Power
	   ldi Quater,0

To_cycle: reti                 ;выход из обработчика