	.include "c:\avr\avrasm\appnotes\tn2313def.inc"

	.def	temp	=r16
	.def	temp1	=r17
	.def	temp2	=r18
	.def	temp3	=r19
	.def	temp4	=r20
	
	.CSEG
	.org 0	
		RJMP	Reset		; Прерывание Reset 		
		rjmp	INT_0		; Внешнее прерывание Int0	
		RETI			; Внешнее прерывание Int1
		RETI			; Таймер/счётчик 1 захват
		RETI			; Таймер/счётчик 1, совпадение, канал A
		RETI			; Таймер/счётчик 1, прерывание по переполнению
		RETI			; Таймер/счётчик 0, прерывание по переполнению
		RETI			; Прерывание UART приём завершён
		RETI			; Прерывание UART регистр данных пуст
		RETI			; Прерывание UART передача завершена
		RETI			; Прерывние по компаратору
		RETI			; Прерыание по изменению на любом контакте
		RETI			; Таймер/счётчик 1, совпадение, канал B
		RETI			; Таймер/счётчик 0, совпадение, канал A
		RETI			; Таймер/счётчик 0, совпадение, канал A

Reset:					;тело программы
          	ldi Temp,RamEnd		;инициализация стека
          	out SPL,Temp
;***********************************************
; Настройка портов
;***********************************************

		ldi Temp,0b11111111	;Порт B На вывод
          	 out DDRB,Temp
		 out PORTB,Temp
		ldi Temp,0b00000000	;Порт D на ввод
		 out DDRD,Temp
		 out PORTD,Temp

;***********************************************
; Настройка прерывания INT_0
;***********************************************       

					
					
		ldi Temp,0b00000011	; в MCUCR надо выставить 2 младших бита, триггер срабатывания прерывания
					; 00 - низкий уровень, 01 - зарезервировано, 10 - по спаду, 11 - по фронту
		 out MCUCR,Temp		;установка триггера

		ldi Temp,0b01000000	
		 out GIMSK,Temp		;разрешение прерывания int0

		ldi Temp,0b01100000	;сброс флагов прерываний
		 out EIFR,Temp		
		sei			;Разрешение глобального прервания

;***********************************************
; Основная программа
;***********************************************

		
op2:		rjmp op2


;***********************************************
; Обработка прерывания INT_0
;***********************************************


INT_0:
		RCALL wt3
		in   temp4,PIND
		sbrc temp4,2
		rjmp m1
		rjmp m2
m1:		rjmp OP 
m7:
		RCALL wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m3
		rjmp m4
m3:		cbi PORTB,1
		ret
m9:		RCALL wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m5
		rjmp m6		
m5:		cbi PORTB,0
		ret
		

m2:		sbi PORTB,0
		sbi PORTB,1
		sbi PORTB,2
		sbi PORTB,4
		sbi PORTB,5
		sbi PORTB,6
		sbi PORTB,7
		reti

m4:		sbi PORTB,1
		sbi PORTB,2
		rjmp m8

m6:		sbi PORTB,2
		rjmp m10	


;***********************************************
; подпрограммы
;***********************************************
Op:		


		rcall m7
m8:		cbi PORTB,7
		rcall m9
m10:		cbi PORTB,6
		cbi PORTB,4
		rcall wt
		sbi PORTB,4
		rcall wt
		cbi PORTB,4
		rcall wt
		sbi PORTB,4
		rcall wt
		cbi PORTB,4
		rcall wt
		sbi PORTB,4

		rcall wt2

		cbi PORTB,5
		rcall wt
		sbi PORTB,5
		rcall wt
		cbi PORTB,5
		rcall wt
		sbi PORTB,5
		rcall wt
		cbi PORTB,5
		rcall wt
		sbi PORTB,5


		reti

;***********************************************
; Задержка
;***********************************************

wt:  		ldi Temp1,4
		ldi Temp2,65
		ldi Temp3,1

Loop:		dec Temp1
		brne Loop

		dec Temp2
		brne Loop

		dec Temp3
		brne Loop

		ret

Wt2:		ldi Temp1,0
		ldi Temp2,0
		ldi Temp3,5

Loop2:		dec Temp1
		brne Loop2

		dec Temp2
		brne Loop2

		dec Temp3
		brne Loop2

		ret
wt3:
		ldi Temp1,180
		ldi Temp2,2

Loop3:		dec Temp1
		brne Loop3

		dec Temp2
		brne Loop3

		ret

wt4:		
		ldi Temp1,65
		ldi Temp2,1

Loop4:		dec Temp1
		brne Loop4

		dec Temp2
		brne Loop4
	

		ret