.include "d:\avr\avrasm\appnotes\tn2313def.inc"

.def     Temp=R16
.def     Temp1=R17
.def     Temp2=R18
.def     Temp3=R19
.def     Temp4=R20
.cseg
.org 0
	rjmp start	//по reset прыжок в начало программы
,org INT0 		
	rjmp int_int0	//по int 0 прыжок на обработчик

.org 20	//размещение тела программы
start:	//тело программы
          ldi Temp,RamEnd       ;инициализация стека
          out SPL,Temp

          ldi Temp,0b11111111   ;настройка портов
          out DDRB,Temp

// настройка прерывания int0
	ldi Temp,0b00000000	
	out DDRD,Temp
	out PORTD,Temp		//порт D настроен на вход
	// в MCUCR надо выставить 2 младших бита, триггер срабатывания прерывания
	// 00 - низкий уровень, 01 - зарезервировано, 10 - по спаду, 11 - по фронту
	ldi Temp,0b000000xx
	out MCUCR,Temp	//установка триггера
	ldi Temp,0b01000000	
	out GIMSK,Temp	//разрешение прерывания int0
	ldi Temp,0b01100000
	out GIFR,Temp	//сброс флагов прерываний
// конец настройки прерывания int0	
	sei //разрешение прерываний	


Begin:    ldi Temp,0b00001101   ;вывод на индикацию
          rcall mig1            ;вызов подпрограммы задержки

          ldi Temp,0b00001100   ;вывод на индикацию
          rcall mig1            ;вызов подпрограммы задержки

          ldi Temp,0b00001101   ;вывод на индикацию
          rcall mig1           ;вызов подпрограммы задержки
          
	  ldi Temp,0b00001100   ;вывод на индикацию
          rcall mig2            ;вызов подпрограммы задержки

          ldi Temp,0b00001110   ;вывод на индикацию
          rcall mig1            ;вызов подпрограммы задержки

          ldi Temp,0b00001100   ;вывод на индикацию
          rcall mig1            ;вызов подпрограммы задержки

          ldi Temp,0b00001110   ;вывод на индикацию
          rcall mig1            ;вызов подпрограммы задержки


          ldi Temp,0b00001100   ;вывод на индикацию
          rcall mig2            ;вызов подпрограммы задержки

          rjmp Begin            ;поехали по новой!


;****************************************************
;Задержка

mig1:    out PortB,Temp

          ldi Temp1,0
          ldi Temp2,70
          ldi Temp3,1

Loop:     dec Temp1
          brne Loop

          dec Temp2
          brne Loop

          dec Temp3
          brne Loop

          ret

mig2:    out PortB,Temp

          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,5

Loop2:     dec Temp1
          brne Loop2

          dec Temp2
          brne Loop2

          dec Temp3
          brne Loop2

          ret

int_int0:
	//размещение обработчика прерывания int0
	/****************************/
	  обработчик прерывания int0			
	/****************************/
	reti //возвращение из обработчика с разрешением прерываний
