.include "m8def.inc"

.def	temp = R16

.equ	CARRIER_DDR = DDRB
.equ	CARRIER_PORT = PORTB
.equ	CARRIER_PIN = PINB
.equ	CARRIER_LEAD = PB1

.equ 	fclk = 8000000							; fclk - рабочая частота микроконтроллера
.equ 	focna = 36000							; focna - нужная частота сигнала
.equ 	N = 1									; N - значение предделителя частоты
.equ 	OCR1A_VALUE = (fclk/(2*N*focna))-1

.CSEG

.ORG 0
RJMP	Reset
.ORG INT0addr
RETI
.ORG INT1addr
RETI
.ORG OC2addr
RETI
.ORG OVF2addr
RETI
.ORG ICP1addr
RETI
.ORG OC1Aaddr
RETI
.ORG OC1Baddr
RETI
.ORG OVF1addr
RETI
.ORG OVF0addr
RETI
.ORG SPIaddr
RETI
.ORG URXCaddr
RETI
.ORG UDREaddr
RETI
.ORG UTXCaddr
RETI
.ORG ADCCaddr
RETI
.ORG ERDYaddr
RETI
.ORG ACIaddr
RETI
.ORG TWIaddr
RETI
.ORG SPMRaddr
RETI

.ORG   INT_VECTORS_SIZE

; Stack Init ==========================================
Reset:   	
	ldi 	temp, LOW(RAMEND)		
	out 	SPL, temp	
	ldi		temp, HIGH(RAMEND)
	out 	SPH, temp
; End Stack Init ======================================
	 
; Internal Hardware Init  =============================
TimerCounter1Init:
	ldi		temp, (1<<CARRIER_LEAD)						; Настраиваем OC1A на выход, 
	out		CARRIER_DDR, temp							; остальные выводы - на вход									
	ldi		temp, ~(1<<CARRIER_LEAD)					; Устанавливаем 0 на OC1A, 
	out		CARRIER_PORT, temp							; остальные выводы подтягиваем к питанию

	ldi		temp, (1<<WGM12)|(1<<CS10)					; Режим работы таймера/счетчика1 - CTC
	out		TCCR1B, temp								; Значение предделителя частоты - 1
	ldi		temp, (1<<COM1A0)							; Переключение состояния OC1A при совпадении
	out		TCCR1A, temp								; значения счетчика TCNT1 со значением OCR1A
	
	ldi		temp, HIGH(OCR1A_VALUE)						; Загружаем значение для OCR1A
	out		OCR1AH, temp								
	ldi		temp, LOW(OCR1A_VALUE)						
	out		OCR1AL, temp								

	sei
; End Internal Hardware Init ==========================

Main:
	nop
	rjmp	Main