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

  Ячейки с адресами 0 + 7 и 24 + 31 образуют два банка регистров общего назначения. Выбор банка осуществляется по состоянию триггера номера банка RBF, а регистра внутри банка — по трехбитному коду адреса регистра в банке N{2:0} (режим прямой регистровой адресации).

  К любой ячейке ОЗУ (в том числе и ячейкам банка регистров) можно обратиться по их полному адресу в режиме косвенной регистровой адресации по содержимому регистров R0 или R1 выбранного банка регистров.

  В отличие от МП580, в котором стековая память располагается вне микропроцессора и имеет, практически, неограниченный объем (до 64 Кбайт), стек КР816 содержит всего 16 ячеек и обеспечивает запись восьми двухбайтных слов, необходимых для возврата на основную программу после завершения подпрограммы или обработки прерывания. Каждое слово содержит значение адреса возврата PC(11:0} и старшую тетраду слова состояния программы PSW. Напомним, что в МП580 PSW характеризовало состояние аккумулятора и регистра флажков (PSW = F.A).

  К1816 биты PSW имеют другой смысл: PSW{2:0} (SP{2:0} — указатель стека (адреса отсчитываются от нижней границы стека для двух соседних ячеек (см. рис. 2.2)); PSW{3} = 1 — разряд забит единицей; PSW{4} = RBF — номер банка регистров; PSW{5} = FO - флаг пользователя. PSW{6} = AC(adjust carry) - дополнительный флаг переноса; PSW{7} = C - флаг переноса.

  Слово состояния программы хранится в регистре состояния программы и изменяется либо в процессе выполнения команд программы, либо при возврате на основную программу (только старшая тетрада PSW)

  Флажки пользователя (Fl, RBF, CNTF, INTF) не поместившиеся в регистре PSW, фиксируются триггерами регистра дополнительных флажков. Восьмиразрядный таймер-счетчик считает поступающие из вне через Т1 сигналы и генерирует временные задержки без отвлечения АЛУ от выполнения основной программы.

  Переключение режимов таймера осуществляется программно. Содержимое счетчика считывается или загружается с помощью аккумулятора. При инкрементном переполнении счетчика (FF -> 00) устанавливается флаг переполнения TF и счет продолжается. Переполнение, если есть на то разрешение, вызывает прерывание программы, которое обслуживается подпрограммой прерывания по адресу 07H.

  В режиме генерации временных задержек счетчик запитывается от делителя основной тактовой частоты Fbq на 480.

  При Fbq = 6 МГц квант задержки составляет 80 мкс. Задержки более 80x256=20480 мкс формируются программными средствами. Одноуровневая схема прерываний обеспечивает приоритет прерывания (внешнее прерывание INT — старший, флаг таймера TF — младший) и программное маскирование прерываний. МикроЭВМ КР1816 работает аналогично МП580. Инициализация работы КР1816 происходит при подаче импульса SR длительностью порядка 50 мкс. При этом осуществляются следующие действия:

  • программный счетчик сбрасывается в О (PC = 0);
  • указатель стека сбрасывается в О (SP = 0);
  • выбирается нулевой банк регистров (RBF = 0);
  • выбирается нулевой банк программной памяти (MBF = 0);
  • блокируется внешнее прерывание (INTF=0);
  • порты Р1 и Р2 устанавливаются в режим приема;
  • останавливается таймер/счетчик;
  • сбрасываются флаги F0 и F1.

  Выполнение программы начинается с команды нулевого адреса. Каждая команда занимает от одного до двух байт программной памяти и выполняется внутри цикла команды. Этот цикл делится на машинные циклы (цикл обращения к памяти/цикл генерации ALE), длительность которых составляет 15 периодов сигнала синхронизации Tbq. Это соотношение помогает подсчитывать время выполнения программы и формировать калиброванные временные задержки.

  Программа выполняется до тех пор, пока не будут сформированы коды всех управляющих сигналов. После этого микроЭВМ переходит в режим ожидания, выход из которого происходит только в случае либо повторной инициализации программы, либо действия одного из внешних или внутренних сигналов прерывания. При входе в программу по вектору внешнего прерывания управление передается команде по адресу ООЗН, а по вектору прерывания по таймеру — команде по адресу 007Н.