.include "d:\avr\avrasm\appnotes\tn2313def.inc"

.def Temp1=R16
.def Temp2=R17
.def Temp3=R18 
.def Temp4=R19
.def Temp5=R19
.cseg
.org 0
	rjmp  RESET 
reti;  INT0 
reti;  INT1 
reti;  TIMER1_CAPT 
reti; TIMER1_COMPA 
reti; TIMER1_OVF 
reti; TIMER0_OVF 
reti; USART0_RX 
reti; USART0_UDRE 
reti; UART0_TX 
reti;  ANALOG_COMP 
reti;  PCINT 
reti; TIMER1_COMPB 
rjmp  TIMER0_COMPA 
reti;TIMER0_COMPB 
;************************************Инициализация****************************************

Reset:
	CLI
ldi Temp1,RamEnd
out SPL,Temp1 ; инициализация стека

ldi Temp1,0b11111111
out ddrb, Temp1 ; настройка порта b

ldi Temp1,0b10111111
out ddrb, Temp1 ; настройка порта b

ldi Temp1,0b00000001 
out Timsk,Temp1 ;разрешить прерывание компаратора
;***************************************************************************

out ocr0a,temp3 ;записываем число сравнения таимера0
ldi temp1,0         
	OUT Tcnt0,temp1 ;обнуляем таимер0


	CLR	temp1
	OUT Tcnt1h,temp1
	CLR	temp1
	OUT Tcnt1l,temp1 ;обнуляем таимер1


ldi Temp1,0b00000011
out Tccr1b,Temp1 ;тактовый сигнал /64
ldi Temp1,0b00000011
out Tccr0,Temp1 ;тактовый сигнал /64
sei ; разрешение глобальных прерываний

;******************** Программа *********************************************************

Cycle:
rcall Press
rcall Display
rjmp Cycle         
;*******************Индикация***********************
Display:
  out PortB,temp4        ;вывод в порт


ret
;**************************************************

;******************Прерывание по совподению ч.с. и таимер0***************************
TIMER0_COMPA:

ldi temp1,0
	OUT Tcnt0,temp1 ;обнуляем таимер0
inc temp4

         reti                  ;выход из обработчика
   
;**************************Обработчик конопок**************
Press:
in Temp1,PinD ; чтение порта d
           ori Temp1,0b10111111     ;обрезаем по маске
           cpi Temp1,0b10111111     
           breq Press2          ;переход если нажата кнопка(поступил сигнал)
ldi Temp2,0
ret

Press2:     
cpi Temp2,1 
breq out1   ;вывод из обработчика при повторном срабатывании кнопки

in temp3,Tcnt1h ;чтение старшего регистра 



	CLR	temp1
	OUT Tcnt1h,temp1
	CLR	temp1
	OUT Tcnt1l,temp1 ;обнуляем таимер1


ldi Temp2,1
rjmp reset
ret
out1:
ret
;**********************************************************




