4
МИКРОКОНТРОЛЛЕРЫ
h
Обратите внимание на еще один
программистский трюк
- в подпрог-
рамме отключения красного нам так-
же необходимо и останавливать тай-
мер. В принципе можно было бы выз-
вать подпрограмму останова таймера
из подпрограммы отключения красно-
го - так мы делали в предыдущей ста-
тье цикла. Вместо этого мы
располо-
жим
подпрограмму останова тайме-
ра непосредственно
за
подпрограм-
мой отключения красного и дадим
подпрограмме отключения красного
возможность
попасть на нее есте-
ственным путем!
Отработав коман-
дой
хог
отключение красного, подпрог-
рамма отключения “плавно перейдет*'1
в подпрограмму останова таймера.
Теперь
i n i t seq:
.b yte
• b yte
• b yte
.b yte
in it _ p o r t :
i n i t B:
все необходимые описания:
; <1> Образ описателей автоматов. Порядок описаний:
; - маска для кнопки, - маска для светодиодов, - начальное состояние,
; - ноль
(терминальный символ), - мл.байт Задержки, - с т . байт задержки,
; - ноль и ноль (чтобы вирт.таймер не счи тал).
00000001b,
ООООООНЬ, 0, 0, 1000-{(1000/256) *256) ,
1000/256, 0, 0
ООООООЮЬ,
ООООНООЬ, 0, 0, 1500-((1500/256) *256) ,
1500/256, О, О
ОООООЮОЬ,
ООНООООЬ, 0, 0, 2500-((2500/256) *256) ,
2500/256, 0, 0
ООООЮООЬ,
ПООООООЬ, 0, 0, 2000-((2000/256) *256) ,
2000/256, 0, 0
; Образ описателей для портов и интервального таймера.
.b yte
00011011b
; Доступ к подрегистру 3 и далее (порт А)
.b yte
00011011b
Доступ к подрегистру 3 и далее
(порт В)
.b yte
00011011b
; Доступ к регистру конфигурации таймера
.b y te
ОООЮОООЬ
; Линия А [4 ] - выводная, остальные - ввод.
.b yte
11111111b
; Все линии порта В - выводиые.
.b y te
00000000b
; Счет - 16 битный без предцелителя, от генератора м /к.
.b y te
ОООЮОООЬ
; Линия А [4 ] - активный выход.
.b y te
11111111b .
; Все линии порта В - активный выход.
.b yte
00000000b
; Доступ к мл.байту регистра интервала.
.b y te
00001111b
; Для кнопок порта А резисторы нагрузки включены.
.b y te
00000000b
; Для порта В резисторы нагрузки не требуются.
.b y te
50
; Коэффициент деления = 50, чтобы
1 ти к = 1
мсек.
.b yte
00001111b
; Ждем прерываний при отпускании кнопок.
.b yte
00000000b
; Прерывания для порта В не требуются.
.b y te
00000000b
; Доступ к ст.байту регистра интервала.
.b y te
00001111b
; Ждем прерываний при нажатии кнопок.
.b y te
00000000b
; Прерывания для порта В не требуются.
.b y te
0
; Коэффициент деления = 50, чтобы
1 ти к = 1
мсек.
.b y te
ООЮООООЬ
; Разрешить прерывания от порта А в целом
.b y te
00000000b
; Прерывания от порта В в целом не требуются.
.b y te
00000000b
; Подготовить таймер (останов).
; Начальное состояние порта В: л о г.1 —
зеленые светодиоды.
.b yte
01010101b
auto ta b le :
; <2> Автоматная таблица.
b yte
8
; В таблице — 8 строк,
b y te
0,
TEFM_DOWN,
1,
EXE_ START20
b yte
1,
TEBM_TXMEOUT,
2,
EXE_ TURNON
b yte
1,
TERMJUP,
o,
EXE_ STOP
b yte
2,
TEFMJTCMEOUT,
3,
EXE_ TURNOFF
b yte
3,
TERMJDOWN,
1,
EXE START20
b yte
3,
TERMJUP,
4,
EXE_ START20
b y te
4,
TEBMJDOWN,
3,
EXE_ STOP
b yte
4,
TERM_TIMEOUT,
0,
EXE STOP
.end
Обратите внимание на следующие моменты:
1. В образе мы впервые примени-
ли
формулы.
Формулы позволяют
вычислять некоторые значения так,
чтобы был виден процесс вычисле-
ния. Можно, разумеется, заранее
48
У
разделить число 1000 на 256 на каль-
куляторе, и занести полученное зна-
чение (оно для нашего примера бу-
дет равно 3 - все вычисления по фор-
мулам в ассемблере округляются
до
ближайшего меньшего целого чис-
ла,
т.е. дробная часть результата про-
сто отбрасывается) в директиву
.byte.
Однако, если нам придется изменить
задержку с 1000 на 1200 мсек, мы
I Радиолюбитель - 0 2 /20 0 6
предыдущая страница 47 Радиолюбитель 2006-02 читать онлайн следующая страница 49 Радиолюбитель 2006-02 читать онлайн Домой Выключить/включить текст