Общие принципы построения микроконтроллеров, страница 8

  Авторы надеются, что читатель достаточно хорошо знаком с теорией и техникой программирования микропроцессорных вычислителей,, изло­женными в учебных пособиях [2, 7, 8], поэтому ниже будут рассмотрены только те вопросы программирования, которые определяются специфи­кой архитектуры однокристальных микроконтроллеров.

  Разделение главной памяти на память программ CSEG и память данных DSEG. Извлечение текущей команды (точнее байта текущей команды) из памяти программ происходит по коду программного счет­чика и состоянию триггера номера банка MBF. Эта команда попадает в соответствующие регистры для выполнения. Имеются две команды, при помощи которых содержимое ячейки CSEG может быть скопировано на аккумулятор.

  Команда MOVP А @ А пересылает в аккумулятор содержимое ячейки CSEG текущей страницы, а команда MOVP3 А, @А — третьей страницы. Эти команды позволяют в программной памяти выделять ячейки для хранения либо отдельных констант, либо констант, организованных в таблицы. Если таких констант немного, то для их хра­нения можно выделить специальную (третью) страницу. При этом не надо забывать об организации перехода программы от второй страницы непосредственно к четвертой. Напомним, что переход от банка к банку осуществляется только программными средствами с использованием команд SEL МВО, SEL MB1

  При выполнении всех команд, кроме SEL МВО, SEL МВ1 происходит обращение к памяти данных DSEG или внутренним регистрам микроконтроллера.

  Для сокращения длины команд используются только три вида ад­ресации: прямая регистровая, косвенная регистровая и непосредствен­ная. Еще большей компактности команд удалось добиться за счет раз­деления прямоадресуемых регистров на два банка RB0 и RB1, номер которых фиксируется триггером номера банка RBF. Таким образом, прямой адрес регистра ограничивается в команде тремя битами. Изменение номера банка регистров происходит под воздействием команд SEL RB0, SRL RBI. Косвенная регистровая адресация организуется по содержимому четырех регистров: RO и R1 банка 0 и RO и R1 банка 1. Механизм непосредственной адресации такой же, как и в МП580. Прямая адресация в микроконтроллерах не используется, поскольку команды прямой адресации (типа STA ADR16, LDA ADR16) занимали бы два байта программной памяти, что недопустимо.

  В отличие от МП580, стековая память микроконтроллера ограни­чена восемью двухбайтными ячейками и расположена в фиксированной области памяти данных. Инициализация стека происходит авто­матически при включении питания или вручную при подаче сигнала начальной установки SR = 0. В отличие от МП580, обращение к стеку происходит только при выполнении команд вызова подпрограммы и возврата на основную программу. При этом записывается и считывается не только адрес возврата PC{11:0}, но и значение признаков RBF, F0,AC, C. Команд программного обращения к стеку (типа PUSH rp, POP rp)в микроконтроллере нет. При программировании микроконтроллера следует следить за тем, чтобы уровень вложенных программ не превышал восьми.

  Память данных DSEG может быть расширена за счет использования дополнительной БИС внешней памяти. Эта память находится в отдельном адресном пространстве, поскольку обращение к памяти происходит только при помощи двух специфических команд:

MOVX @Ri, A; i = 0,1

MOVX A, @Ri;

в которых код операции (буква X) указывает на используемое в команде внешнее адресное пространство.

  Сегментация памяти команд используется для уменьшения адреса перехода в команды условного перехода типа Jcon. При этом длина ко­манд сокращается до двух байт (код операции, код признака перехода, восьмиразрядный адрес перехода внутри текущей страницы CSEG. Такая команда, в отличие от команды МП580 Jcon ADR16, изменяет со­держимое программного счетчика только в его младших разрядах, организуя переход внутри текущей страницы, номер которой определяется старшими разрядами программного счетчика. Для организации условного перехода между страницами одного банка (что на практике встречается относительно редко) в программу добавляется команда безусловного перехода JMP address, в которой адрес перехода занимает 12 бит. Естественно, что обе команды должны находиться в одном сегменте CSEG. Заметим, что в микроконтроллере отсутствует механизм чтения текущего состояния триггера номера банка MBF программной памяти, что вызывает значительные трудности при программировании.