;*********************************
;  Таймер1    AT90S2313 4Mhz	 *
;*********************************

.device at90s2313
.nolist ; без листинга
.include "2313def.inc" ; в файле 2313def.inc присвоены удобные имена регистрам :)
.list

; Объявления переменных :
.def tmp=r16 ; главный временный регистр
.def fp=r19


.dseg ; сегмент данных оперативной памяти (всегда перед cseg)

.cseg ; сегмент кода.
.org 0 ; сегмент кода начинается с нулевой ячейки памяти.

;*** ПРЕРЫВАНИЯ AT90S2313 (всего 11) ***
rjmp RESET ; $000 Reset Handler - Обработка сброса
rjmp EXT_INT0 ; $001 IRQ0 Handler - Обработка IRQ0
rjmp EXT_INT1 ; $002 IRQ1 Handler - Обработка IRQ1
rjmp TIM_CAPT1 ; $003 Timer1 Capture Handler - Обработка захвата таймера 1
rjmp TIM_COMP1 ; $004 Timer1 Compare Handler - Обработка совпадения таймера 1
rjmp TIM_OVF1 ; $005 Timer1 Overflow Handler - Обработка переполнения таймера 1
rjmp TIM_OVF0 ; $006 Timer0 Overflow Handler - Обработка переполнения таймера 0
rjmp UART_RXC ; $007 UART RX Complete Handler - Обработка приема байта
rjmp UART_DRE ; $008 UDR Empty Handler - Обработка освобождения UDR
rjmp UART_TXC ; $009 UART TX Complete Handler - Обработка передачи байта
rjmp ANA_COMP ; $00a Analog Comparator Handler - Обработка аналогового компаратора

RESET: ;*** Начальные настройки : ***

ldi tmp,RamEnd	;инициализация стека
out SPL,tmp

; инициализация таймера 1 :
ldi tmp,0b00001101 ; ставим очистку по совпадению, частота СК/1024
out TCCR1B,tmp ; конфигурационный регистр

ldi tmp,0x00 ; OCR1AH (старший байт)
out OCR1AH,tmp ; запоминается во внутр. регистре TEMP
ldi tmp,0x14
out OCR1AL,tmp ; OCR1AH и OCR1AL записываются одновременно

ldi tmp,0b01000000; Разрешаем прерывание по переполнению и совпадению OCIE1A от Т/С1 (TIMSK - регистр прерыв. от Т/С)
out TIMSK,tmp

ldi tmp,0b00000000; Запрещаем прерывания от внешних вводов
out GIMSK,tmp

sei

MAIN: ; ОСНОВНОЙ БЛОК ПРОГРАММЫ :
;-----------------------------------------------------------------------------

	ldi tmp,255
	rcall delay

	ldi tmp,255
	rcall delay


	ldi tmp,255
	rcall delay


	ldi tmp,255
	rcall delay


rjmp MAIN
;-----------------------------------------------------------------------------

;ПОДПРОГРАММЫ :

EXT_INT0: ret
EXT_INT1: ret
TIM_CAPT1: ret
;TIM_COMP1: ret
TIM_OVF1: ret
TIM_OVF0: ret
UART_RXC: ret
UART_DRE: ret
UART_TXC: ret
ANA_COMP: ret


TIM_COMP1 : ; обработка прерывания совпадения Т/С1

	inc fp

ret

;------------------------------------------------------------------------------------------
;Delay - функция точной временной задержки с интервалом от 3 мкс. до 255 мкс. включительно.
;учитывает время выполнения ее вызова ldi tmp,Х и rcall Delay. Кварц 4 Мгц.
;Х = необходимая задержка в мкс. - 2

delay:
	dec tmp
	nop
	brne delay
	nop
ret
;------------------------------------------------------------------------------------------
