В начале программы опрашиваются DIP-переключатели. В случае нажатия одновременно нескольких DIP-переключателей регистр суммируется. По умолчанию выполняется подпрограмма включения при освещенности помещения и выключения через полчаса после уменьшения-освещенности до минимума. Уровень освещенности проверяется каждые 2,5 мс. Если помещение освещено, то программа переходит к этапу включения вентилятора.
Проверяется нулевое состояние сети и включается семистор, после чего опять проверяется освещенность помещения. В том случае, если ' освещенность упала до минимума, запускается таймер отсчета времени в соответствии с комбинацией DIP-переключателей. Программа переходит в подпрограмму отсчета количества минут.
Минуты устанавливаются как сумма регистров DIP-переключателей. В этот момент вентилятор работает независимо от освещенности комнаты, и отсчитывается время. По окончании отсчета семистор выключает вентилятор. Программа переходит в начало и выполняется заново.
Программа на ассемблере представлена в листинге 5.1, а шестна-дцатеричный код — в листинге 5.2. Соответствующие файлы ventil4 . asm и ventil4 .hex находятся на прилагаемом к книге компакт-диске в папкеПрограммы - Вентилятор. Листинг 5.1. Программа управления вентилятором
.include "C:\Program Files\Atmel\AVR Studio\Appnotes\tn26def. inc"
;Азтор: Кразченко А.З.
;Дата: 25.09.2007
;Версия: 1.1.2
;Имя файла: Ventil.asm
.■Микроконтроллер: AVR tiny26.
/Тактовая частота: 4мГц
104
Глава 5
Листинг 5.1. Продолжение
;Питание: стабилизированное 5 3
list |
|||||
def |
digl |
= |
rl8 |
Рабочий |
регистр |
def |
dig2 |
r20 |
Рабочий |
регистр |
|
def |
tmp |
= |
r21 |
Общий регистр |
|
def |
tp |
= |
r22 |
Регистр |
времени |
def |
tmpl |
= |
rl6 |
Рабочий |
регистр |
def |
tmp 2 |
= |
П9 |
Рабочий |
регистр |
def |
tmp3 |
= |
r2 6 |
Рабочий |
регистр |
def |
tmp4 |
= |
r27 |
Рабочий |
регистр |
def |
X |
= |
r25 |
Рабочий |
регистр |
def |
Y |
= |
rl7 |
Рабочий |
регистр |
def |
M |
= |
r23 |
Рабочий |
регистр |
def |
tt2 |
= |
r24 |
Рабочий |
регистр |
def |
dip |
= |
r28 |
Рабочий |
регистр |
def |
coc |
= |
r2 9 |
Рабочий |
регистр |
. cseg . org О
rjmp RESET
nop ;rjmp EXT_INT0 - прерывание не используется
nop ;rjmp EXT_PIN - прерывание не используется
nop ;rjmp TIME_CMPA - прерывание от таймера
nop ;rjmp TIME_CMPB - прерывание от таймера
nop ;гjmp TIME_OVFl - прерывание от таймера
nop ;rjmp TIME_OVF0 - прерывание от таймера
nop ;rjmp UCI_STRT - прерывание от USI
nop ;rjmp UCI_OVF - прерывание от USI
nop ;rjmp EE_RDY - прерывание от таймера
nop ;rjmp ANA_COMP- прерывание от компаратора
nop ;rjmp ADC - прерывание от АЦП
.org 20
;настройка порта В RESET: пор
clr tmp
out DDRB, tmp
out PORTB, tmp ;обнулить порт В
clr tmp
ldi tmp, S08 ;PB3 - выход
out DDRB, tmp
ldi tmp, 0Ы1111100 ;PA2-PA7 резисторы на зход
out PORTA, tmp ;подтяжка A
out DDRA, tmp
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |