/*
 * first_asm.asm
 *
 *  Created: 18.01.2013 19:46:42
 *   Author: 1
 */
.include "m328pdef.inc"
.def temp = r16
.def reg_led = r20
.equ START = 0

.org $000
;***Векторы прерываний***
	rjmp INIT
	rjmp STOP_PRESSED

;***Инициализация***
INIT: ldi reg_led, 0xFE
	ldi temp, $5F
	out SPL, temp
	ldi temp, $02
	out SPH, temp
	sec
	set
	ser temp
	out DDRB, temp
	out PORTB, temp
	clr temp
	out DDRD, temp
	ldi temp, 0x05
	out PORTD, temp
	ldi temp, (1<< INT0) 
	out EIMSK, temp      ;Разрешаем прерывание INT0
	ldi temp, 0x00 
	sts EICRA, temp      ;Прерывание по низкому уровню сигнала INT0
	sei

;***Ждем нажатия кнопки***
WAITSTART:
	sbic PIND, START
	rjmp WAITSTART

;***Переключаем светодиоды
LOOP: out PORTB, reg_led
	rcall DELAY
	ser temp
	out PORTB,temp
	brts LEFT
	sbrs reg_led,0
	set
	ror reg_led
	rjmp LOOP
LEFT:
	sbrs reg_led,7
	clt
	rol reg_led
	rjmp LOOP

;***Обработка прерывания (INT0) от кнопки STOP***
STOP_PRESSED:
WAITSTART_2:
	sbic PIND,START
	rjmp WAITSTART_2
	reti
;***Задержка***
DELAY:
	ldi r17,2
d1: ldi r18,2
d2:	dec r18
	brne d2
	dec r17
	brne d1
	ret



	