	.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			;Разрешение глобального прервания

;***********************************************
; Основная программа
;***********************************************

		

Op:		
		rjmp Op

;***********************************************
; Обработка прерывания INT_0
;***********************************************


INT_0:
		rcall wt3
		in   temp4,PIND
		sbrc temp4,2
		rjmp m1
		rjmp m2
m1:		cbi PORTB,0

		rcall wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m3
		rjmp m4
m3:		cbi PORTB,1

		rcall wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m5
		rjmp m6		
m5:		cbi PORTB,2

		rcall wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m7
		rjmp m8	
m7:		cbi PORTB,3

		rcall wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m9
		rjmp m10	
m9:		cbi PORTB,4

		rcall wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m11
		rjmp m12		
m11:		cbi PORTB,5

		rcall wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m13
		rjmp m14
m13:		cbi PORTB,6

		rcall wt4
		in   temp4,PIND
		sbrc temp4,2
		rjmp m15
		rjmp m16	
m15:		cbi PORTB,7
		rjmp m17

m2:		sbi PORTB,0
		sbi PORTB,1
		sbi PORTB,2
		sbi PORTB,3
		sbi PORTB,4
		sbi PORTB,5
		sbi PORTB,6
		sbi PORTB,7
		rjmp m17

m4:		sbi PORTB,1
		sbi PORTB,2
		sbi PORTB,3
		sbi PORTB,4
		sbi PORTB,5
		sbi PORTB,6
		sbi PORTB,7
		rjmp m17

m6:		sbi PORTB,2
		sbi PORTB,3
		sbi PORTB,4
		sbi PORTB,5
		sbi PORTB,6
		sbi PORTB,7
		rjmp m17

m8:		sbi PORTB,3
		sbi PORTB,4
		sbi PORTB,5
		sbi PORTB,6
		sbi PORTB,7
		rjmp m17

m10:		sbi PORTB,4
		sbi PORTB,5
		sbi PORTB,6
		sbi PORTB,7
		rjmp m17

m12:		sbi PORTB,5
		sbi PORTB,6
		sbi PORTB,7
		rjmp m17

m14:		sbi PORTB,6
		sbi PORTB,7
		rjmp m17

m16:		sbi PORTB,7

m17:		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,148
		ldi Temp2,2

Loop3:		dec Temp1
		brne Loop3

		dec Temp2
		brne Loop3

		ret

wt4:		
		ldi Temp1,18
		ldi Temp2,1

Loop4:		dec Temp1
		brne Loop4

		dec Temp2
		brne Loop4
	

		ret



