;**** Создание импульсов с помощью T/C0 ***********************************
;*
;* Формирование на выводе 0 порта D импульсов (лог. 1) длительностью 20 мс 
;* с помощью T/C0 микроконтроллера AT90S1200.
;*
;* Тактовая частота микроконтроллера: 12 МГц.
;*  
;***************************************************************************
.nolist
.include "1200def.inc"
.list

.def	Work1	= r16	; Рабочий регистр
.equ	Time	= 235	; Количество тактовых импульсов таймера
.equ	Mux	= 5	; Mux0 = 5 для деления частоты на 1024

Reset:			; Сброс по включению питания
rjmp  Initial	; Адрес 000 – переход к части инициализации
reti	; Адреса 001 – 003 – прерывания (не используем)
reti	
reti	
Initial:
ldi   Work1,$01	; Загрузка направления передачи данных
out   DDRD,Work1	; Порт D: разряд 0 - выход, остальные - входы
Haupt:
ldi   Work1,250
Schleife:
nop
dec   Work1
brne  Schleife	; Символический цикл задержки
Impuls:
ldi   Work1,-Time	; Загружаем интервал для таймера
out   TCNT0,Work1	; Инициализируем счетчик
sbi   PortD,PD0	; Устанавливаем разряд 0 порта D в лог. 1
Beginn:
ldi   Work1,Mux	; Устанавливаем адрес Mux0
out   TCCR0,Work1	; Запускаем таймер, коэф. деления = 1024
Wait:
in    Work1,TIFR	; Извлекаем содержимое регистра TIFR
sbrs  Work1,TOV0	; Пропускаем следующую команду, если возникло переполнение таймера
rjmp  Wait	; Дальнейшее ожидание переполнения
cbi   PortD,0	; Порт D: разряд 0 сбрасываем в лог. 0
Ende:
ldi   Work1,1<<TOV0; Загружаем битовую позицию флага TOV0
out   TIFR,Work1	; Сбрасываем флаг TOV0
nop	; Символическое продолжение программы
