;Tiny 11 - 	Пример применения микроконтроллера
;			для обеспечения индикации светодиода.

; Определение устройства.
.device ATTINY15

; Определение имен регистров ввода/вывода
.equ    SREG    =$3F
.equ    GIMSK   =$3B
.equ    GIFR    =$3A
.equ    TIMSK   =$39              
.equ    TIFR    =$38 
.equ    MCUCR   =$35
.equ    MCUSR	=$34
.equ    TCCR0   =$33
.equ    TCNT0   =$32
.equ    TCCR1   =$30
.equ    TCNT1   =$2F
.equ    OCR1A   =$2E
.equ    OCR1B   =$2D
.equ    PORTB   =$18
.equ	PINB	=$16
.equ	DDRB    =$17
.equ    ACSR    =$08     
.equ    ADMUX   =$07
.equ    ADCSR   =$06
.equ    ADCH    =$05
.equ    ADCL    =$04       

.cseg					; Сегмент кода (находится во Flash памяти).
						; Для t11 память данных (EEPROM) отсутствует.

;Вектор прерываний
.org 0
	rjmp init			;Инициализация и обработка прервания по Reset
	rjmp int0			;Обработчик Int0 - кнопка "ВКЛ"
	rjmp button			;Обработчик нажатия кнопки "ВЫКЛ"
	
;Блок инициализации
init:   

	ldi r16,0x08			; 1 бит на вывод
	out DDRB,r16   		; Установить бит 3 в portb для вывода на LED

	sbi PORTB,3		; Погасить LED

	ldi r16,0x10		; Разрешить режим холостого хода (For ISIS 6.5 - 13)
	out MCUCR,r16		; и прерывание по низкому уровня   

	ldi r16,0x60			; Разрешить прерывания по входам порта B и INT0 
	out GIMSK,r16

	sei					; Разрешить прерывания  
	
loop2:	
	sleep				; Перейти в режим пониженного энергопотребления
	rjmp 	loop2		; После обработки прерывания нажатия кнопок
						; снова перейти в режим пониженного энергопотребления
button:

	ldi r16,0x40			; Разрешить прерывания по входам порта B и INT0 
	out GIMSK,r16

	sbi PORTB,3			; PIN0 - Зажечь	

loop:	rcall Delay
	sbis PINB,4
	rjmp loop

	rjmp fin
int0:
	ldi r16,0x20			; Разрешить прерывания по входам порта B и INT0 
	out GIMSK,r16

	cbi PORTB,3			; PIN0 - Зажечь	

loop1:	rcall Delay
	sbis PINB,2
	rjmp loop1

fin: 
					; Вывод в PORTB 
	nop
	ldi r16,0x60			; Разрешить прерывания по входам порта B и INT0 
	out GIMSK,r16
	nop
	ldi r16,0x60			; Игнорировать другие прерывания
	out GIFR,r16
	nop
	reti
; 200 mks
Delay:
ldi r18,20
	d2: ldi r19,32
		d3: nop
			dec r19
		brne d3
		nop
	dec r18
	brne d2
	nop
ret

