;Tiny 11 - Десятичный счетчик - секундомер.
;Пример подключения семисегментного индикатора
;со встроенным BCD декодером к ATTiny15
;
; Specify Device.
.include "tn15def.inc"	; Файл с описанием условных имен регистров и портов ввода/вывода


; Определение переменных
.cseg				;Сегмент кода (размещается во FLASH памяти).

;Вектор прерываний
.org 0
	rjmp init		;Переход на подпрограмму INIT
.org T0OVaddr
	rjmp ADC_Ready
.org ADCaddr
	rjmp ADC_Ready
;Инициализация      
init:  
	ldi r16,(1<<DDB1)+(1<<DDB2)+(1<<DDB3)+(1<<DDB4)
	; 1,2,3,4 биты  программируем на вывод:  00011110b
	out DDRB, r16   ; устанавливаем значение в PORTB
	ser r16
	out PORTB,r16

	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  

	cbi ADMUX,REFS1	; Опорное напряжение на PIN0/AREF
	sbi ADMUX,REFS0	;
	cbi ADMUX,MUX0	; Выбрать нулевой канал ADC0
	cbi ADMUX,MUX2
	cbi ADMUX,ADLAR
	sbi ADCSR,ADFR	; Разрешить циклический режим АЦП  
	sbi ADCSR,ADPS2	; Установить делитель частоты F(ADC)=F(clk)/16 ~ 60 kHz
	cbi ADCSR,ADPS1	; 
	cbi ADCSR,ADPS0	; 
	sbi ADCSR,ADIE	; Разрешить прерывание
	sbi ADCSR,ADEN	; Разрешить работу АЦП
	sbi ADCSR,ADSC	; Начать преобразование
	sei
loop: 
	sleep
	rjmp loop

ADC_Ready:
	in r16,ADCL	
	in r17,ADCH
	clr r18
loop1:
	subi r16,100
	sbci r17,0
	brmi setport
	inc r18
	rjmp loop1
setport: nop
	lsl r18
	mov r16,r18
	out PORTB,r16
reti

