;
;	   hider file for ATtiny13 chip
;		version 1.00 KOBRA softvare
;		  for version2 assembler!
;------------------------------------------------------
;	revision history
;------------------------------------------------------
; 1.00	04_06_2011 original
;------------------------------------------------------
;
;	Projekt _______gensek
;	Filename ______gensek.asm
;	File version __
;	Autor _________BORIS KRUTITSKIY
;
;------------------------------------------------------
; основная конфигурация:
;
; CKDIV8=0 (по умолчанию внутр. rc-генератор 9,6 МГц
;            clkps 3-0 = 0011 /коэффициент деления=8/ )
;			изменение значения в слове конфигурации 
;			затрудняет дальнейшее репрограммирование ИС
;	предпочтительно изменение коэффициента в clkps 3-0 программой пользователя!!!
; SUT1:SUT0=10(умолч.max) определяет длительность задержки сброса
; CKSEL1:CKSEL0=10 (умолч.) внутр.r-c генератор 9,6МГц
; 	            01 внутр. r-c генератор 4,8МГц
; 	режим работы тактового генератора
;
;			ВНИМАНИЕ!!!
; В области сигнатуры ATtiny13A размещаются два байта 
; калибровочных констант для внутреннего RC генератора.
; Старший байт по адресу 0х00 содержит калибровочную константу
; для работы генератора на частоте 9.6 MHz. Данная константа 
; будет автоматически загружена в OSCCAL по окончании сигнала сброса.
; Автоматическая загрузка калибровочной константы
; для работы генератора на частоте 4.8 MHz НЕ ВЫПОЛНЯЕТСЯ!
; Чтение, хранение и загрузка калибровочной константы
; для работы внутреннего RC генератора на частоте 4.8 MHz
; должны выполняться прикладной программой.
; Калибровочная константа для работы генератора на частоте 4,8 MHz
; размещена в старшем байте поадресу 0х01 в области сигнатур.
;
; DWEN=1 отладка gebugWire запрещена (0-разрешена)
; EESAVE=1 общее сирание и EEPROM - 1 стирает, 0 не стирает
; SPIEN=0 последовательное программирование разрешено (1-запрещено)
; WDTON=1 WDT может быть выключен программно (0-всегда включен)
; SELFPRGEN=1 самопрограммирование (команда SPM) запрещено (0-разрешено)
; BODLEVEL1:BODLEVEL0=11 (выключена)
; 	порог срабатывания схемы BOR (обязательно восстановить то, что было до программирования, 
;если не предусмотренно иное значение согласно прикладной программы)
; RSTDISBL=1 вывод RST как вход сброса (0- только при наличии "высоковольтного программатора!!!)
; 
;конфигурационные ячейки могут быть записаны только при помощи
;программатора,а прочитаны как программатором,так и командой LPM.
;общее стирание ИС на содержимое конфигурационных ячеек не влияет
;------------------------------------------------------
		.nolist
		.include "tn13def.inc"
		.list
;------------------------------------------------------
; variable definitions 
;(таблица обьявленных имен)
;______________________________________________________
;таблица обьявленных имен - пользовательские константы
;
	.equ xk05s=5000 ; константа досчета для меандра 1s(0,5s/0,5s)
	.equ xkons_tim=120 ; константа для загрузки в OCR0A
	.equ xeirqt=0x04 ; разрешение прерывания по oc0a (for TIMSK0)
	.equ xledon=0b00000010 ; конастанта конфигурации для tccr0a
;______________________________________________________
;таблица обьявленных имен - переназначение регистров РОН
;
 .def	zero=r2
 .def	mrak=r3
 .def	ledon=r4
 .def	tcntl=r5
 .def	tcnth=r6
 .def	tmp=r16 ; универсальный временный регистр
 .def	tmp1=r17 ; второй универсальный временный регистр
 .def	flags=r18 ; флаги пользователя
 .def	cntl=r24 ; младший байт счетчика досчета
 .def	cnth=r25 ; старший байт счетчика досчета
;______________________________________________________
;таблица обьявленных имен - секция флагов пользователя
;
  .equ	led=pb0
;______________________________________________________
;таблица обьявленных имен - секция определенных данных (ОЗУ)
;
   .dseg
;______________________________________________________
 .cseg
		.org 0x000
	irq_res:
		rjmp init
		.org OC0Aaddr
	irq_t0:
		rjmp steps
;______________________________________________________
; обход блока векторов прерываний
;блок начальной инициализации кристалла
;______________________________________________________
;
;______________________________________________________
;
   .org (irq_res+int_vectors_size)
;______________________________________________________
;	инициализация системы
		init:	
	; задать режим работы порта ввода.вывода
 ldi tmp,0x80
 out acsr,tmp
 ldi tmp,0b11111110
 out portb,tmp ; деактивировать линию управления ключа
 ldi tmp,0b00010001
 out ddrb,tmp
 ldi tmp,low(ramend)
 out spl,tmp ;переустановка уазателя стека
; загрузить "быстрые константы"
 clr zero 
 clr mrak
 com mrak
 ; конфигурация таймера :
  ; режим СТС , OCR0A=120 , прерывание по OCF0A разрешено
 ldi tmp,xledon
 out tccr0a,tmp
 out tccr0b,zero
 out tcnt0,zero
 ldi tmp,120
 out ocr0a,tmp
 ldi tmp,xeirqt
 out timsk0,tmp
 ldi tmp,low(xk05s)
 mov tcntl,tmp
 mov cntl,tmp
 ldi tmp,high(xk05s)
 mov tcnth,tmp
 mov cnth,tmp
 ldi tmp,1
 out tccr0b,tmp ; запуск таймера
 sei
 	stop:
	 rjmp stop
;______________________________________________________
;
; данная подпрограмма не может быть более 100 команд!!!
	steps:
 sbiw cntl,1
 tst cnth
 brbs 1,point0
 reti ; rjmp conv_lout
 point0:
 tst cntl
 brbs 1,point1
 reti ; rjmp conv_lout
 point1:
 mov cntl,tcntl
 mov cnth,tcnth
	conv_lout:
	 sbis portb,led
	 rjmp f_led
	 cbi portb,led
	 reti
	  f_led:
	  sbi portb,led
	  reti
;______________________________________________________
;______________________________________________________
 .eseg
		.org eepromend
	.exit
