і
МИКРОКОНТРОЛЛЕРЫ
I
завершении операции записи байта.
Это - достаточно полезная возмож-
ность. Дело в том, что ЭСППЗУ - очень
“медленная" память: время чтения из
нее составляет около 400 мке (т.е. за
это время процессор мог бы выполнить
около 1000 полезных команд при мак-
симальной тактовой частоте), а время
записи - и того больше: аж 5 мс (около
10000 команд). Сигнал прерывания по-
зволяет не растрачивать понапрасну
ресурсы процессора при ожидании опе-
рации записи. Как им воспользовать-
ся, мы расскажем в одной из следую-
щих статей.
Бит 3 - вводной бит. Он указывает,
правильно ли была считана информа-
ция из ЭСППЗУ.
Бит 1 - бит запуска операции чте-
ния. Как только этот бит будет уста-
новлен (лог. 1), ЭСППЗУ начнет опе-
рацию чтения. Программа, анализируя
значение этого бита, должна дождать-
ся, когда он вновь вернется в лог. 0 -
это и будет означать конец операции
чтения.
Бит 0 - бит запуска операции запи-
си. Работа с ним в точности повторяет
работу с битом 1.
Способы адресации и система
команд микроконтроллера
С точки зрения программирования в
микроконтроллере присутствует адрес-
ное пространство данных размером
256 адресов, в котором находятся ячей-
ки ОЗУ и регистры различных внешних
устройств. Кроме ОЗУ и внешних уст-
ройств, в микроконтроллере есть:
- 8 регистров специального на-
значения;
- стек адресов возврата глубиной
8 элементов;
- стек данных глубиной 16 эле-
ментов.
Ни одна из этих сущностей не отно-
сится к адресному простансгву микро-
контроллера.
Регистры специального назначения
делятся на две группы:
1.
Первые четыре регистра обеспе-
чивают работу механизма сегментной
адресации микроконтроллера. При про-
граммировании микроконтроллера эти
регистры обозначаются в программе
как #А, #В,
# С и Ю
соответственно (эти
регистры можно задавать в программе
и таким способом: #0, #1, #2 и #3).
44 |----------------------------------------
2.
Последние четыре регистра яв-
ляются так называемыми регистрами
косвенного адреса и образуют две ре-
гистровые пары, иногда обозначаемые
как IR0 и IR1. Первую регистровую пару
образуют регистры #4 и #5, вторую -
регистры #6 и #7. Буквенных обозна-
чений для этих регистров не предус-
мотрено.
Механизм сегментной адресации
микроконтроллера является традици-
онным для многих микроконтроллеров
(во многих микроконтроллерах исполь-
зуется очень похожий на сегментную
адресацию механизм - так называе-
мые “банки"). Решение это во многом
вынужденное, и обусловлено оно огра-
ничениями, накладываемыми на раз-
мер команд микроконтроллера. Коман-
ды любого процессора (не только мик-
роконтроллера) состоят из нескольких
“участков” - в одном из них записыва-
ется код команды, то есть то, что имен-
но эта команда делает (например, код
команды сложения), в других участках
- адреса ячеек, которые, например,
надо сложить. Адресное пространство
блока данных микроконтроллера, напо-
минаем, содержит 256 различных ад-
ресов. Для того, чтобы указать в коман-
де один из этих адресов, потребуется
целых 8 бит! Адреса двух ячеек потре-
буют уже 16 бит (по 8 бит на каждую
ячейку), а размер памяти, отведенной
под одну команду в ПЗУ команд, все-
го-то 16 бит - на код команды просто
не останется места! В таких случаях
разработчики микроконтроллера посту-
пают одним из двух способов - либо
все-таки увеличивают размер комаед,
либо применяют какую-либо “хитрость”,
чтобы адреса ячеек не занимали в ко-
мандах столько места. Хитрость в дан-
ном случае и заключается во введении
механизма сегментной адресации.
Идея сегментной адресации состо-
ит в следующем. Все адресное про-
странство данных микроконтроллера
разбивается на участки одинакового
размера, называемые сегментами.
Размер сегмента для микроконтролле-
ра КР1878ВЕ1 -8байт. При таком спо-
собе адрес любого байта в адресном
пространстве определяется как адрес
начала сегмента плюс смещение нуж-
ного байта относительно начала сег-
мента. Казалось бы - в чем тут эконо-
мия? А экономия вот в чем - а£|^с на-
чала сегмента можно хранить не в са-
мой команде, а в одном из сегментных
регистров - нужно только указать в ко-
манде, из какого именно регистра этот
адрес взять. Поэтому адрес ячейки в
команде задается на напрямую (с по-
мощью 8-битового значения), а как но-
мер сегментного регистра плюс смеще-
ние нужной ячейки относительно того
сегмента, адрес которого находится в
этом сегментном регистре. Сегментных
регистров в процессоре всего четыре -
для того, чтобы задать его номер (от 0
до 3), достаточно всего двух бит. А по-
скольку размер каждого сегмента все-
го 8 байт, для указания смещения от-
носительно его начала (от 0 до 7) по-
требуется еще 3 бита. Все вместе - и
номер сегментного регистра, и смеще-
ние, займет в команде 5 бит вместо
прежних 8! Адреса двух ячеек займут
всего 10 бит, то есть из 16 бит команды
останется еще целых 6 бит для кода
команды. На рис. 1 показано, как выг-
лядит сегментная адресация на прак-
тике. Обратите внимание на термино-
логию-адрес, заданный в поле коман-
ды, называется логическим, а адрес,
полученный в результате отработки
механизма сегментной адресации -
ф изическим или исполнительным
(именно он поступает непосредствен-
но на адресные шины ОЗУ и внешних
устройств). Логические адреса ячеек
памяти задаются при программирова-
нии
контроллера
конструкцией
% <буквахциф ра>, напримещконст-
рукция %а5 обозначает ячейку; адрес
| Радиолюбитель - 0 6 /2 0 0 5
предыдущая страница 44 Радиолюбитель 2005-06 читать онлайн следующая страница 46 Радиолюбитель 2005-06 читать онлайн Домой Выключить/включить текст