.include	"tn13Adef.inc"

.def temp = R16
.cseg
.org 0

;----- Таблица прерываний -----
		rjmp	RESET					;Reset Handler
		reti 							;IRQ0 Handler
		rjmp	int_isr 				;PCINT0 Handler
		reti							;Timer0 Overflow Handler
		reti							;EEPROM Ready Handler
		reti							;Analog Comparator Handler
		reti							;Timer0 CompareA Handler
		reti							;Timer0 CompareB Handler
		reti							;Watchdog Interrupt Handler
		reti 							;ADC Conversion Handler

reset:	ldi		temp, RAMEND
		out		SPL, temp

		ldi		temp, 0x80
		out		ACSR, temp

		ldi		temp, (1<<PB0)|(0<<PB3) ;PB0 - вход, PB3 - выход 
		out		DDRB, temp

		ldi		temp, (1<<PCIE) 		;Разрешение прерываний PCINT
		out		GIMSK, temp		

		ldi		temp, (1<<PCINT3)		;Выбор источника прерывания (PB3) 
		out		PCMSK, temp
		
		sei								;Общее разрешение прерываний
stop:	rjmp	stop					;Собственно, и все

;----- обработчик прерывания -----
int_isr:cli								;Запрет прерываний
		rcall	dly50ms					;Задержка 50 миллисекунд
		sbis	PINB,3					;Проверка кнопки, если нажата (PB3=0), тогда выход 
		rjmp	return
		sbis 	PINB,0					;Проверка вывода светодиода
		rjmp	setb										
		cbi		PORTB,0					;Если горит, погасить
		rjmp	return					
setb:	sbi		PORTB,0					;Если не горит, зажечь 
return:	sei								;Разрешение прерываний
		reti							;Выход
		
;----- Подпрограмма задержки ----- 
dly50ms:ldi  R17, 0x04
WL0:	ldi  R18, 0x86
WL1:	ldi  R19, 0xE2
WL2:	dec  R19
		brne WL2
		dec  R18
		brne WL1
		dec  R17
		brne WL0
		ldi  R17, 0x04
WL3:	dec  R17
		brne WL3
		ret
dly50ms:nop
		ret
