Выбрать главу

         clr Time0

         clr Time1

         clr Time2

; Задание тестовых точек включения (после отладки схемы убрать)

         ldi r30,$05

         sts $60,r30

         ldi r30,$00

         sts $61,r30

         ldi r30,$10

         sts $62,r30

         ldi r30,$07

         sts $63,r30

         ldi r30,$00

         sts $64,r30

         ldi r30,$00

         sts $65,r30

         ldi r30,$0F

         sts $66,r30

         ldi r30,$00

         sts $67,r30

         ldi г30,$10

         sts $68,r30

         clr Flags

         sei

UnlessLoop:

         rcall GetByte; Прием сообщения говорящего о начале данных

         cpi TheByte, 'T'

         brne UnlessLoop

         rcall GetByte

         cpi TheByte,'i'

         brne UnlessLoop

         rcall GetByte

         cpi TheByte,'m'

         brne UnlessLoop

         rcall GetByte

         cpi TheByte,'e'

         brne UnlessLoop

         rcall GetByte

         cpi TheByte,'r'

         brne UnlessLoop

         clr Time0; Обнуление счетчиков времени

         clr Time1

         clr Time2

         ldi r28,$60

         ldi r29,0

LoopRX:

         rcall GetByte:; Чтение байта данных

         St Y+,TheByte; Сохранение считанного байта

         cpi r28,END_DATA_AREA

         brlo LoopRX

         rjmp UnlessLoop

         ser Time0 ; Обнуление счетчиков времени

         ser Time1

         ser Time2

     ldi r28,$10

     out TCNT1L,r28

     ldi r28,$7A

     out TCNT1H,r28

; Процедура чтения байта с UАRТ

; Программа все свое свободное время находится внутри нее

GetByte:

         wdr; Сброс сторожевого таймера

         inc TimeA; Увеличение асинхронного счетчика времени

         brne Early

         inc TimeB

         brne Early

         cbi PORTB,7 ; Выключение секундного светодиода

Early:

         sbrs Flags,0

         rjmp NoBell

         mov temp,TimeB; Звуковой сигнал включен

         andi temp.$E7

         breq NoBell

         sbis PORTB,6; Инвертирование состояния вывода PB.6

         rjmp NoCBI

         cbi PORTB,6

         rjmp NoBell

NoCBI: sbi PORTB.6

NoBelclass="underline"

         sbis USR,RXC

         rjmp GetByte

         in TheByte,UOR

         ret

; Протокол управления таймером

; Формат загрузки расписания управления каналами от компьютера

; * Настройки порта 9600 8N1

; * Загрузка производится одним блоком, состоящим из 41-й записи

; * Перед блоком с записями надо отправить строку Timer

; * Каждая запись состоит из 3 байтов, сначала передается младший байт времени

; включения, затем средний, затем байт, состоящий из двух частей: младшие

; 4 бита — это самая старшая тетрада времени, бит 4 — это состояние, в которое

; будет переведен канал, и оставшиеся 3 бита — это номер канала. Если номер

; канала равен 7, то будет обнулен внутренний счетчик времени таймера и

; выполнение программы начнется сначала

; * Время считается с момента загрузки новой программы в секундах

. EXIT

4. Технические характеристики

Максимальное количество нагрузок, поддерживаемое программой — 7, но оно может быть меньше, в зависимости от конкретной реализации схемы. Седьмой канал, в отличие от остальных, при срабатывании выдает не постоянное напряжение единицы, а импульсы звуковой частоты. Это позволяет использовать его, например, в качестве будильника. Допустимая мощность нагрузок тоже определяется схемой, например если используются симисторы КУ208, установленные на радиатор, то она составляет 1 кВт на каждый канал.

Память микроконтроллера, установленного внутри таймера, позволяет хранить расписание, состоящее из 41-го (для AT90S2313) события. Максимальное время от загрузки расписания до выполнения события не может быть больше 220 секунд (немного больше 7 дней). Точность задания времени события 1 секунда.