I
МИКРОКОНТРОЛЛЕРЫ
t
регистра - #В (для доступа к рабо-
чим регистрам портов и таймера) и
#Р (для доступа к управляющим ре-’
гистрам портов). Затем заносим чис-
ло 7 в счетчик переменной цикла (об-
ратите внимание - для переменной
цикла используется та же ячейка па-
мяти, что и в предыдущем цикле, -
из соображений экономии памяти).
Далее еще в одну ячейку памяти -
%а1
- заносим число 4: зачем - бу-
дет понятно позднее. Команда
гп оу
%сИ ,%б7 - это уже тело цикла (на-
стройка порта А). Любопытно, что
конструкция %б7 указывает теперь
уже на другую область программы,
а именно - пом еченную меткой
(пй_ро
11
(подумайте, почему). Следу-
ющая команда -
то у
%(12,%б7
- на-
стройка порта В. И, наконец, следу-
ющие три команды - настройка ин-
тервального таймера. Почему имен-
но три? Дело в том, что настройка
интервального таймера ведется через
два регистра - управляющий, распо-
ложенный по адресу 04И (вот откуда
взялось число 41), и рабочий, распо-
ложенный по адресу 05И. Вначале
мы загружаем в косвенный регистр
1Я0 адрес 04Ь. Затем с помощью
Следующий участок программы -
movl
%dl,00100000b
sst
00001000b
bish
%Ы ,00000001b
wait
jmp
$3
команды
mov %d6,%d7
выводим в
управляющий регистр таймера нуж-
ную информацию, а затем, с помо-
щью команды
btgl %а1,00000001 b,
инвертируем младший бит этого ад-
реса в ячейке
%а1,
в результате чего
вместо числа 4 у нас в ячейке
%а1
окажется число 5! В следующей ите-
рации цикла команда
mov %d6,%d7
выведет информацию уже по адресу
05h, т.е. в рабочий регистр таймера,
а затем команда
btgl
вновь инверти-
рует младший бит ячейки
%а1,
в ре-
зультате чего вместо числа 5 у нас
вновь окажется число 4! Именно ко-
манда
btgl
и дает нам такой адрес-
перевертыш, различный для четных
и нечетных итераций цикла - это оче-
редной
программистский трюк.
Ко-
манды же
subi
и
jnz
имеют традици-
онное назначение, т.е. организуют
работу цикла. Итого у нас получилось
11 команд + 21 байт образа = 43 бай-
та - вместо 46. Экономия, на первый
взгляд, не такая уж и значительная,
но у этого решения есть еще один
плюс - оно упорядочивает програм-
му. Теперь все особенности настрой-
ки портов, таймера и ячеек ОЗУ рас-
полагаются в программе в конце ее
текста, и при каких-либо изменени-
ях в них мы просто исправляем соот-
ветствующий байт в образе, не тро-
гая при этом текст самой программы.
Более того - при написании новой
программы мы можем просто “выд-
рать” из нашей программы кусок ини-
циализации и вставить его в новую
программу, изменив в нем только
таблицу образа настроек портов и
таймера.
3. Командой
ш о у
%Ь2,%67 мы
устанавливаем начальное состояние
линий порта В. Вместо нее, конечно
же, можно было бы применить коман-
ду
тоу|,
но с таким вариантом мы
имеем возможность, как и в цикле
инициализации портов, отделить
“мух” от “котлет” - программу от дан-
ных. Если нам потребуется, напри-
мер, поменять местами все красные
и зеленые светодиоды, мы просто
исправим байт, помеченный меткой
1пН_В, в конце программы, не трогая
текст самой программы.
4. И, наконец, командой
гп о у
%а0,%Ы
мы считываем текущее со-
стояние кнопок - оно нам понадобит-
ся для работы обработчика прерыва-
ний от порта А.
организация работы механизма прерывании:
; Разрешить прерывания от порта А.
; Включить иеханиэи работы
; маскируемых прерываний.
; Это — команда для отладки (зачеи - будет понятно
; позднее).
; Переход в состояние ожидания.
; Снова переход в состояние ожидания.
(Продолжение в N91/2006)
Как видите, он практически полностью повторяет такой же участок в предыдущей разобранной нами про-
грамме, поэтому на нем мы особо останавливаться не будем.
___________________________________
В слелуюшем голу релакиия прололжит публикацию цикла статей, посвяшенных применению микро-
контроллеров. Булет закончена вторая часть статьи про автоматное программирование. Лалее читатели
узнают, как реализуются в микроконтроллерах сложные арифметические операции (умножение, леление,
преобразования чисел). Отлельная статья булет посвяшена вопросам линамической инликаиии и работе с
матрицей клавиатуры. Из нее можно почерпнуть свеления, как организовать линамическую инликаиию
всего по трем проволам, как быстро и просто проанализировать нажатие и отпускание кнопок на клавиа-
туре, и как избавиться от необхолимости сверления и пропайки
десятков
перехолных отверстий лля
семисегментных инликаторов. Читатель сможет также узнать, как работать с энергонезависимой памятью
с той же скоростью, что и с ячейками ОЗУ. Отлельная статья булет посвяшена очень сложной теме
-
вопросам параллельного программирования лля микроконтроллеров (которая почти совершенно не
отражена в литературе). К кажлои статье цикла булут прилагаться примеры программ лля микроконтролле-
ра КР1878ВЕ1, чтобы читатель смог воспользоваться ими в своих конструкциях.
И, как всегла, релакиия и автор жлут ваших замечаний и предложений по статьям цикла.
40 |
I Радиолюбитель - 12/2005
предыдущая страница 37 Радиолюбитель 2005-12 читать онлайн следующая страница 39 Радиолюбитель 2005-12 читать онлайн Домой Выключить/включить текст