.include "D:\Temp\Prog\AVR\Avrasm\includes\m8def.inc"

.def 	T0=R16			;обозначаем 1-й РОН
.def 	T1=R17			;обозначаем 2-й РОН
.def 	T2=R18			;обозначаем 3-й РОН
.def 	T3=R19			;обозначаем 4-й РОН
.def 	T4=R20			;обозначаем 5-й РОН

.cseg				;начало программного сегмента
.org 0				;задаем начальный адрес (в данном случае равен 0)

rjmp	Reset			;Reset
rjmp	Int0			;Internal interrupt request 0	
rjmp	Int1			;Internal interrupt request 1
rjmp	OC2			;Timer/Counter2 Compare Match
rjmp	OVF2			;Timer/Counter2 Overflow
rjmp	ICP1			;Timer/Counter1 Capture Event
rjmp	OC1A			;Timer/Counter1 Compare Match A
rjmp	OC1B			;Timer/Counter1 Compare Match B
rjmp	OVF1			;Timer/Counter1 Overflow
rjmp	OVF0			;Timer/Counter0 Overflow
rjmp	SPI			;Serial transfer complete
rjmp	URXC			;USART, Rx Complete
rjmp	UDRE			;USART Data Register Empty
rjmp	UTXC			;USART, Tx Complete
rjmp	ADCC			;ADC conversion complete
rjmp	ERDY			;EEPROM Ready
rjmp	ACI			;Analog Comparator
rjmp	TWI			;2-wire serial interface
rjmp	SPMR			;Store Program Memory Ready

;Reset:
;Int0:
;Int1:
OC2:
OVF2:
ICP1:
OC1A:
;OC1B:
OVF1:
OVF0:
SPI:
URXC:
;UDRE:
UTXC:
ADCC:
ERDY:
;ACI:
TWI:
SPMR:

reti

;***********************************************************************
;Инициализация
;***********************************************************************


Reset:	ldi T0, 0b11111111 		;настройка портов
	out DDRD, T0

	ldi T0, 0b00000100		;разрешить прерываение компаратора B
	out TIMSK, T0

	ldi T0, 0b00000100		;тактовый сигнал = СК/256
	out TCCR1B, T0

	ldi T0, 0xF4			;Инициализация компаратора
	out OCR1BH, T0
	ldi T0, 0x24
	out OCR1BL, T0

	ldi T0, High(RamEnd)		;Инициализация стека (старший)
	out SPH, T0

	ldi T0, Low(RamEnd)		;Инициализация стека (младший)
	out SPL, T0

	ldi T1, 0b00000001		;Инициализация первого светодиода

	ldi T0, 0			;Обнуление Таймера
	out TCNT1H, T0
	out TCNT1L, T0

	Sei				;разрешить прерывания

;***********************************************************************
;Основной цикл
;***********************************************************************

Inf:	rjmp Inf			;бесконечный цикл

;***********************************************************************
;Обработчик прерывания компаратора
;***********************************************************************

OC1B:
	ldi T0, 0			;Обнуление таймера
	out TCNT1H, T0
	Out TCNT1L, T0

Shift:	cpi T1, 0b10000000		;сравнение значения с крайним
	breq Init			;если равно, то загрузить начальное значение
	lsl T1				;иначе логический сдвиг влево
	rjmp Output			;перейти на вывод в порт
	

Init:	ldi T1, 0b00000001		;загрузка начального значения

Output:	out PORTD, T1			;вспомогательная программа задержки

	reti				;выход из обработчика