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

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

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

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

;Вектор прерываний
.org 0
	rjmp init			;Инициализация и обработка прервания по Reset

.org $5
	rjmp time			;Обработка прерывания по переполнению Timer0 (тип А)

;Блок инициализации
init:   

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

	ldi r16,$5			; Установить параметры делителя частоты (Timer 0)
	out TCCR0,r16		; TCCR0 = $5 => 1MHz/256/1024 = 4Hz

	ldi r16,(1<<1)		; Разрешить прерывания Timer0
	out TIMSK,r16

	ldi r16,$20			; Разрешить режим холостого хода
	out MCUCR,r16  

	ldi r16,$8			; Погасить LED
	out PORTB,r16

	ldi r19,0x00		; Дополнительный программный делитель частоты
    
	sei					; Разрешить прерывания  


loop2:	
	sleep				; Перейти в режим холостого хода
	rjmp 	loop2		; После обработки прерывания по переполнению Timer0
						; снова перейти в режим холостого хода
time:
	inc   	r19			; Увеличить значение счетчика
	cpi   	r19,2		
	brmi  	fin			; Если счетчик <2 то переход
	
 	swap   	r16			; Изменение значения требуемого бита 
	out   	PORTB,r16	; Вывод в PORTB 

	ldi   	r19,0		; Сброс счетчика
fin: 

	reti

