і
МИКРОКОНТРОЛЛЕРЫ
і
Сразу же необходимо дать пояснения по только что на-
писанному участку. “Странная” последовательность из коман-
ды
jmp
(переход) и 15 команд
пор
(нет операции) нужна из-
за того, что первые 16 слов памяти программ зарезервиро-
ваны в микроконтроллере КР1878ВЕ1 для специальных це-
лей, а именно -
для хранения команд перехода на обра-
ботчики прерываний.
В нашей первой программе мы с пре-
рываниями работать не будем, так что в принципе без ко-
манд
jmp
и
пор
в начале программы можно было бы обой-
тись, но к такому стилю программирования лучше не привы-
кать: зарезервированная область - “неприкасаемая”, и вос-
пользоваться ею для хранения команд программы можно
только в самом крайнем случае (в практике автора такой “са-
мый крайний случай” возникал
всего один раз).
Заодно даем
пояснения и по командам:
1. Команда
jmp
- команда
безусловного перехода
дальнейшем все пояснения даются к тем строкам програм-
мы, которые помечены тем же номером, что и даваемое по-
яснение: например, в данном случае, -
<1>).
После ее вы-
полнения микроконтроллер будет выполнять не следующую
по порядку команду, а ту, на которую указала команда
jmp.
Именно командами переходов изменяется порядок выпол-
нения программы микроконтроллером (в литературе для
обозначения изменения порядка выполнения команд исполь-
зуется специальный термин -
передача управления).
Для
записи указаний на команды и данные в программе на ас-
семблере используется механизм
меток.
Меткой называ-
ется любая комбинация латинских букв и цифр, обязатель-
но начинающаяся с буквы, которая стоит перед кодом ко-
манды и отделяется от него двоеточием. В нашем только
что разобранном куске программы таких меток две: метка
Start
и метка
begin.
Именно метка
begin
и указана в коман-
де перехода, т.е. после выполнения команды
jmp
управле-
ние будет передано на команду, помеченную меткой
begin
(зто - команда
Idr).
2. Команда
пор
- самая простая команда: она
ничего не
делает.
Ее используют обычно для двух целей - занять мес-
то в программе (поскольку команда
пор
ничего не делает,
она ничего и не напортит, поэтому вставлять ее можно в лю-
бое место программы), или задержать работу процессора на
некоторое время (несмотря на то, что команда
пор
ничего
не делает, процесорнеє время она отнимает не хуже любой
другой команды).
3. Команда
Idr
- команда
загрузки сегментного регист-
ра.
Поскольку мы собираемся работать с регистром конфи-
гурации порта В, находящимся по адресу 1 Ah, в один из ре-
гистров сегмента (например, #D) необходимо загрузить ад-
рес начала сегмента, в котором этот регистр расположен.
Адреса сегментов в программе определяются следующим
простым правилом: если младшая шестнадцатиричная циф-
ра нужного адреса - число от
0
до
7,
то адрес начала сегмен-
та, где он расположен, образуется из нужного адреса, в ко-
тором младшую цифру заменяют
нулем.
Если же младшая
шестнадцатиричная цифра нужного адреса-число от8 до Р
(напоминаем - в шестнадцатиричной системе счисления бук-
вой Р обозначается число 15), то адрес начала сегмента об-
разуется из нужного адреса заменой младшей цифры на
восьмерку. В
данном случае, поскольку адрес регистра кон-
фигурации порта
В
равен 1АИ, мы заменяем А на 8, поэтому
в команде 1бг и используется число 18И. Обратите внимание
также на порядок записи операндов команды - сначала в
команде записывается
“куда”,
а затем, через запятую,
- “что”
или
“откуда”.
4.
Все последующие команды
то у |
заносят в регистр кон-
фигурации порта В комбинации битов, необходимых для на-
стройки порта. Сами комбинации битов задаются непосред-
ственно в команде. О назначении каждого из этих битов мы
говорили в предыдущей статье. Конструкция
%й2
указыва-
ет ячейку, адрес который образован содержимым сегмент-
ного регистра #Р (сейчас там находится число 18И) и смеще-
нием
2 :
18И + 2 = 1АИ
(не
20! - это шестнадцатиричная систе-
ма счисления), т.е. это - как раз адрес регистра конфигура-
ции порта В.
Почти каждая строчка в программе заканчивается
ком-
ментарием.
Комментарий в ассемблере начинается симво-
лом (;) и продолжается до конца строки (отметим сразу осо-
бенность компилятора 1езэа - строчки в программе вместе с
комментариями не должны быть длиннее 128 символов!).
Комментарии в программе на ассемблере - признак хоро-
шего стиля программирования: дело в том, что ассемблер -
один из наиболее трудных языков, по которому бывает очень
сложно понять логику работы программы. Комментарии как
раз и призваны облегчить понимание программы, поэтому
“правилом хорошего тона” (которое обычно соблюдается в
среде программистов, но, к сожалению, очень часто нару-
шается радиолюбителями) является комментирование
каждой
строчки программы (кроме совсем уж очевидных).
Нередки случаи, когда человек, написавший плохо откоммен-
тированную программу на ассемблере, не в состоянии ра-
зобраться в своей же собственной программе всего через
месяц-другой после ее написания! Не уподобляйтесь этому
человеку!
Итак, порт В у нас подготовлен к работе, и теперь мы
можем начать мигать светодиодом:
Idr
#B,OOh
<1> Сегмент В - рабочие регистры портов
movl
%Ь2,00000000b
<2> Сначала выключаем лмнии порта В (лог.0)
Idr
#A,4Oh
Сегмент А - адрес начала ОЗУ микроконтроллера
$3: movl
%a0,20h
<3>Счетчик внешнего цикла.
$2: movl
%al, 0
Счетчмк внутреннего цикла.
$1:
subl
%al, 1
Вычесть счетчмк внутреннего цикла
jnz
$1
Внутренний цикл еще не закончен
subl
%a0,1
Вычесть счетчик внешнего цикла.
jnz
$2
Внешний цикл еще не закончен.
btgl
%Ь2,00000001b
<4> Инвертировать сигнал на линии в
to]
jmp
$3
<5> Продолжить бесконечный цикл.
. end
<6>
I
43
Радиолюбитель - 0 7 /2 0 0 5 |
предыдущая страница 46 Радиолюбитель 2005-07 читать онлайн следующая страница 48 Радиолюбитель 2005-07 читать онлайн Домой Выключить/включить текст