Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория микропроцессорных систем АТ_Методическое...docx
Скачиваний:
8
Добавлен:
01.03.2025
Размер:
3.72 Mб
Скачать

2.1. Микроконтроллеры семейства 68нс12/912

В 1998 г. компания Motorola начала выпуск нового семейства 16-разрядных микроконтроллеров 68НС12. Эти микроконтроллеры имеют ряд специфических особенностей, которые обеспечили им эффективное применение в электронной ап­паратуре различного назначения. К числу таких особенностей относятся:

  • архитектурная совместимость с широко используемым семейством 8-разрядных микроконтроллеров 68НС11 (см. 1.3);

  • расширенный набор команд и способов адресации, обеспечивающих реализа­цию управления с использованием «нечеткой логики», поддержку языков высо­кого уровня и ряд других дополнительных возможностей;

  • улучшенные технические характеристики: высокая производительность, пони­женное энергопотребление, расширенный объем адресуемой памяти; наличие встроенных средств отладки, существенно упрощающих процесс раз­работки систем на базе этих микроконтроллеров.

В настоящее время семейство 68НС12/912 является основным промышленным стандартом компании Motorola в сфере 16-разрядных микроконтроллеров. Эти мик­роконтроллеры маркируются следующими условными обозначениями:

MC

68НС

9

12

xx

32

V

FU

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(8)

где отдельные группы символов имеют следующее назначение:

(1) - МС - серийное производство;

ХС - опытная серия; PC - опытные образцы;

(2) - 68НС - произведено компанией Motorola по HCMOS-технологии;

(3) - вид размещенной на кристалле памяти программ:

отсутствие цифры - масочное ПЗУ или без ПЗУ;

7 - электрически программируемое ПЗУ (однократно программируемое);

8 - ПЗУ с электрическим стиранием (ЭСППЗУ);

9 - Flash-память;

(4) - тип процессорного ядра: НС12;

(5) - серия микроконтроллера (например, A, D, DT);

(6) - объем внутренней памяти в килобайтах;

(7) - диапазон рабочих температур:

отсутствие буквы 0...70 °С;

I 0...85°С;

С -40...85 °С;

V -40...105°С;

М -40...125 °С;

(8) - тип корпуса (FU, PV и др.).

В 2002 г. начался выпуск нового поколения этого семейства - 68HCS12/912, в котором реализовано значительное повышение производительности (максималь­ная тактовая частота до 40 МГц) и увеличение объема внутренней Flash-памяти (до 256-512 Кбайт). Эти микроконтроллеры маркируются условными обозначениями:

MC

9

S12

xx

256

V

FU

(1)

(2)

(3)

(4)

(5)

(6)

(7)

где отдельные группы символов имеют следующее назначение:

(1) - МС - серийное производство;

ХС - опытная серия;

PC - опытные образцы;

(2) - вид размещенной на кристалле памяти программ:

отсутствие цифры - масочное ПЗУ;

9 - Flash-память;

(3) - тип процессорного ядра: S12;

(4) - серия микроконтроллера (например, А, С, DT);

(5) - объем внутренней памяти в килобайтах;

(6) - диапазон рабочих температур:

отсутствие буквы 0...70 °С;

I 0...85°С;

С -40...85 °С;

V -40... 105 °С;

М -40... 125 °С;

(7) - тип корпуса (PV, FU и др.).

Микроконтроллеры семейства 68НС12 имеют модульную структуру, которая реализуется из набора отдельных функциональных модулей, взаимодействующих с помощью стандартизованной межмодульной шины. Процессор CPU12 взаимодей­ствует с этими модулями, обращаясь к их регистрам, которые после запуска микро­контроллера расположены в первых 512 позициях адресного пространства.

Набор периферийных модулей включает следующие устройства.

Параллельные порты имеют 8 линий ввода-вывода и служат для обмена дан­ными с внешними устройствами. Микроконтроллеры семейства 68НС12/912 содер­жат от 8 до 12 портов, из которых 1 или 2 выполняют только ввод данных, а остальные являются двунаправленными. Выводы большинства портов могут ис­пользоваться для выполнения альтернативных функций, обеспечивая передачу ад­реса и данных при обращении к внешней памяти, передачу входных и выходных сигналов для других устройств - последовательных портов SCI, SPI, таймера, АЦП, ШИМ, контроллеров шин. Функционирование портов описано в 2.1.6.

Таймерные модули TIM и ЕСТ содержат 16-разрядный счетчик, имеющий 8 каналов, которые могут работать в режиме захвата или совпадения. Модуль ЕСТ, используемый в моделях 68НС12ВЕ32, 68HC912D60, 68HC912DG128, является мо­дифицированным вариантом модуля TIM с улучшенными характеристиками. В состав модулей TIM и ЕСТ входит также 16-разрядный счетчик событий. Выводы таймерного модуля совмещены с выводами параллельного порта Т. Описание этих модулей дается в 2.1.9.

Модули АЦП, которые входят в состав всех микроконтроллерах данного се­мейства, имеют 8 входов AN7-0 для приема аналоговых сигналов. В большинстве моделей реализуется аналого-цифровое преобразование поступающих сигналов с разрешением 10 бит, только в модели 68НС812А4 используется 8-битовый АЦП. Аналоговые входы AN7-0 совмещены с выводами порта AD, который может слу­жить для ввода данных. В моделях 68HC912D60, 68HC912DG128 используется два отдельных модуля АЦП и два параллельных порта ввода данных AD0, AD1 (см. рис. 2.1). Описание работы 10-битового модуля АЦП приведено в 2.1.10.

Модуль формирования ШИМ-сигналов входит в состав всех моделей, кроме 68НС812А4. Модуль имеет 4 выходных канала, на которые выдаются импульсные сигналы заданной скважности. Значения скважности Q задаются для каждого кана­ла отдельно с помощью 8-битовых регистров. Таким образом обеспечивается реализация 255 различных значений Q. Попарно объединив регистры модуля, можно по­лучить до 65 536 значений скважности ШИМ-сигналов, но при этом используются только два выходных канала. Функционирование модуля ШИМ описано в 2.1.9.

Модули последовательного асинхронного и синхронного интерфейса SCI, SPI обеспечивают протоколы последовательного обмена аналогично соответст­вующим модулям в семействах 8-разрядных микроконтроллеров (см. гл. 1). Выводы этих модулей совмещены с выводами порта S, которые могут использоваться для параллельного ввода-вывода данных. Модели 68НС812А4, 68HC912D60, 68HC912DG128 содержат два порта SCI, которые соединены специализированной шиной MI-bus, обеспечивающей возможность их совместной работы в системе. Особенности функционирования этих модулей рассмотрены в 2.1.8.

Специализированные интерфейсные модули BDLC, CAN, I2C, которые вхо­дят в состав различных моделей микроконтроллеров (см. табл. 2.1), реализуют по­следовательный обмен в соответствии с протоколами J1850, CAN 2.0А/В, I2C.

В системах и устройствах микроконтроллеры могут работать в автономном (Single-Chip) или расширенном (Expanded) режимах (см. 2.1.4). В автономном ре­жиме микроконтроллер использует для хранения программ и данных только внут­реннюю память. В расширенном режиме к микроконтроллеру подключается внешняя память, обмен с которой производится по 8- или 16-разрядной системной шине данных. Во всех моделях, кроме 68НС812А4, для такого обмена используется мультиплексированная шина. При этом 8-разрядные порты ввода-вывода А и В слу­жат для выдачи 16 разрядов адреса-данных A/D15-0 (при 8-разрядной системной шине для пересылки байта данных D7-0 используется порт А), порт Е - для переда­чи сигналов управления обменом.

В модели 68НС812А4 при обращении к внешней памяти (расширенный режим) используются раздельные шины адресов и данных. При этом 8-разрядные порты ввода-вывода А и В служат для выдачи 16 разрядов адреса ADDR15-0, порты С и D - для пересылки 16 разрядов данных DATA15-0 (при 8-разрядной шине исполь­зуется только порт С), порт Е - для передачи сигналов управления обменом. Таким образом, в расширенном режиме количество портов для обмена данными с внеш­ними устройствами значительно сокращается. Микроконтроллеры 68НС812А4 при работе в расширенном режиме обеспечивают возможность увеличения адресного пространства до 4 Мбайт памяти команд и 1 Мбайт памяти данных.

Микроконтроллеры семейства 68НС12/912 реализуют также четыре различных специальных режима, которые используются на стадиях отладки программы и тес­тирования кристалла (см. 2.1.4).

В качестве примера на рис. 2.1 представлена структура микроконтроллера 68HC912D60, который является типичным представителем рассматриваемого се­мейства. Микроконтроллер содержит 16-разрядный процессор CPU12, Flash-память объемом 60 Кбайт, ЭСППЗУ емкостью 1 Кбайт, ОЗУ данных емкостью 2 Кбайт. Для обмена данными с внешними устройствами используется 9 параллельных пор­тов А, В, Е, G, H, P, S, T, PCAN. Ввод данных может выполняться через порты AD0, AD1, выводы которых служат также в качестве аналоговых входов АЦП-0 и АЦП-1.

Рис. 2.1. Структура микроконтроллера 68HC912D60

Порты А, В можно использовать для организации мультиплексированной 8- или 16-разрядной внешней системной шины (расширенный режим), к которой подклю­чается внешняя память емкостью до 64 Кбайт (см. 2.1.7). При реализации 16-раз­рядной шины на выводы портов А, В поступают мультиплексированные адреса-данные AD15-0, при 8-разрядной шине адрес А15-0 выдается на выводы портов А, В, а данные D7-0 - на выводы порта А. В расширенном режиме при обращении к внешней памяти формируются также выходные сигналы управления обменом: R/W# - сигнал чтения-записи, DBE# - сигнал разрешения передачи данных, LSTRB# - строб-сигнал пересылки младшего байта данных. Эти сигналы поступа­ют на соответствующие выводы порта Е. Цикл обмена (запись или чтение) выпол­няется за один период тактовых импульсов, поступающих на вывод ECLK порта Е.

Для последовательного обмена данными служат два связных порта SCI-0, SCI-1 и периферийный порт SPI (см. 2.1.8), выводы которых совмещены с выводами па­раллельного порта S. В состав микроконтроллера входит также модуль CAN-контроллера, обеспечивающий интерфейс с последовательной шиной CAN (см. 2.1.11).

В состав микроконтроллера входят также таймерный модуль ЕСТ (см. 2.1.9), выво­ды которого совмещены с выводами порта А, модуль ШИМ (см. 2.1.9), имеющий 4 вы­ходных канала PW3-0, совмещенных с выводами порта Р, и два 10-разрядных аналого-цифровых преобразователя (см. 2.1.10), которые имеют по 8 аналоговых входов, со­вмещенных с выводами параллельных портов ввода данных AD0, AD1.

Различные служебные функции, реализуемые в процессе работы микрокон­троллера, выполняются устройствами, входящими в состав модуля интеграции LIM. Этот модуль обеспечивает выполнение таких функций, как:

  • генерация необходимых тактовых сигналов;

  • начальный запуск и конфигурация микроконтроллера;

  • реализация прерываний при поступлении внешних запросов XIRQ#, IRQ#, внутренних запросов от процессора и периферийных устройств, а также перио­дических прерываний;

  • интерфейс с внешней системной шиной в расширенном режиме;

  • контроль функционирования микроконтроллера с помощью сторожевого тай­мера и монитора тактовых сигналов;

  • отладка выполняемых программ с помощью режима BDM (Back-ground Debug Mode) и аппаратной установки контрольных точек.

Выполнение этих функций описывается в 2.1.3-2.15 и 2.1.12 данной главы.

Отдельные выводы модуля LIM служат для передачи сигналов, обеспечиваю­щих реализацию его функций:

EXTAL, XTAL - выводы для подключения кварцевого резонатора;

XFC - вывод для подключения конденсатора фильтра низких частот;

RESET# - вход-выход сигнала запуска;

BKGD - вывод для последовательной передачи команд и данных при отладке программы в режиме BDM.

Ряд сигналов модуля LIM поступает на выводы порта Е:

XIRQ#, IRQ# - входы внешних запросов прерывания;

R/W#, DBE#, LSTRB# - выходы сигналов управления обменом по внешней шине;

ECLK - выход тактовых импульсов;

MODA, MODB - входы сигналов, задающих в процессе запуска режим работы микроконтроллера;

IPIPE0, IPIPE1 - выходы сигналов, указывающих текущее состояние процессо­ра (используются в процессе отладки системы);

TAGLO# - сигнал выборки команды в режиме отладки BDM (используется для контроля работ процессора в специальном режиме);

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

Генератор тактовых импульсов (ГТИ), входящий в состав модуля LIM, обеспе­чивает формирование импульсов с частотой Ft для тактирования работы процессора и периферийных устройств. Импульсы с частотой Ft поступают на выход ECLK. порта Е и служат для синхронизации других устройств системы.

Микроконтроллеры 68НС12/912 работают при напряжении питания Vп = 5,0 В с максимальной тактовой частотой Ft = 8 МГц. Ряд моделей имеют модификации, работающие при пониженном напряжении Vп = 3,3 В.

Микроконтроллеры имеют два режима работы с пониженным энергопотребле­нием - ожидания и останова, как и семейство 68НС11/711.

Режим ожидания реализуется при поступлении команды WAI, которая вызы­вает запись в стек содержимого регистров процессора и останавливает его работу. При этом продолжают функционировать ГТИ и периферийные устройства: таймер, последовательные порты, АЦП. В этом режиме потребление мощности снижается в несколько раз. Выход из режима ожидания происходит по внешнему сигналу RESET# =0 или сигналу запуска от блока контроля функционирования, а также при поступлении внешнего (XIRQ#, IRQ#) или внутреннего запроса прерывания.

Режим останова реализуется после выборки команды STOP, которая произво­дит запись в стек содержимого регистров процессора, а затем прекращает работу ГТИ, останавливает процессор и все периферийные блоки. При этом потребляемый ток уменьшается до десятков микроампер. Возврат в рабочий режим происходит при поступлении сигнала запуска RESET# =0 или внешнего запроса прерывания на вход IRQ# или XIRQ#.

Для возврата из режимов ожидания и останова можно также использовать сиг­налы KWi (см. рис. 2.1), поступающие на выводы некоторых параллельных портов, запрограммированных соответствующим образом (см. 2.1.5).

При выходе из режима останова требуется время, чтобы ГТИ установил необ­ходимые параметры формируемых тактовых импульсов. Поэтому нормальное функционирование микроконтроллера начинается после задержки, которая состав­ляет 4096Tt, где Tt = 1/Ft - длительность одного такта. Если используется стабиль­ный внешний генератор тактовых импульсов, то эту задержку можно исключить, установив в регистре INTCR значение бита DLY=0 (см. 2.1.3).

В табл. 2.2 приведены значения потребляемых токов в рабочем режиме, режи­мах ожидания и останова при напряжении питания Vп = 5 В и различных значениях тактовой частоты Ft для ряда моделей микроконтроллеров 68НС12/912.

Таблица 2.2. Значения потребляемого тока в различных режимах функционирования

для микроконтроллеров семейства 68НС12/912

Микроконтроллеры 68HCS12 являются следующим поколением семейства 68НС12, которое отличается более совершенной технологией изготовления (разре­шающая способность 0,25 мкм вместо 0,5 мкм для семейства 68НС12) и использо­ванием нового варианта Flash-памяти. В результате существенно повышена макси­мальная тактовая частота (до 25 МГц в выпускаемых моделях, 33-40 МГц в после­дующих разработках) и увеличена емкость внутренней Flash-памяти (до 256 Кбайт в выпускаемых моделях, 512-1024 Кбайт в последующих разработках).

Программный код CPU 12 снизу вверх совместим с кодом 68НС11 на уровне ис­ходного текста. Поэтому разработчики, применяющие в качестве элементной базы популярное 8-разрядное семейство 68НС11/711, могут перейти на 16-разрядные микроконтроллеры 68НС12/912, используя имеющиеся средства программирования и ранее разработанное программное обеспечение.

Способы адресации. Процессор CPU12 поддерживает все способы адресации, используемые семейством 68НС11/711, и реализует 7 дополнительных вариантов индексной адресации. Обеспечиваются следующие способы адресации:

  • регистровая (операнд располагается в одном из регистров процессора);

  • непосредственная (8- или 16-разрядный операнд содержится в команде);

  • прямая (8- или 16-разрядный адрес операнда задается в команде);

  • относительная (адрес образуется путем сложения содержимого программного счетчика PC и заданного в команде 8- или 16-разрядного смещения (использу­ется только в командах ветвления);

  • индексная (адресом операнда является содержимое регистров IX, IY, SP или PC);

  • индексная со смещением (адрес операнда образуется путем сложения содер­жимого регистров IX, IY, SP или PC с заданным в команде 5-, 9- или 16-разрядным смещением);

  • индексная со смещением, расположенным в аккумуляторе А, В или D (ад­рес операнда образуется путем сложения содержимого заданных регистров IX, IY, SP или PC с 8- или 16-разрядным содержимым одного из аккумуляторов);

  • индексная с предекрементом (адрес операнда определяется содержимым ука­занного в команде регистра IX, IY или SP, которое перед выборкой операнда уменьшается на заданное в команде число от 1 до 8);

  • индексная с преинкрементом (адрес операнда определяется содержимым ука­занного в команде регистра IX, IY или SP, которое перед выборкой операнда увеличивается на заданное в команде число от 1 до 8);

  • индексная с постдекрементом (адрес операнда определяется содержимым указанного в команде регистра IX, IY или SP, которое после выборки операнда уменьшается на заданное в команде число от 1 до 8);

  • индексная с постинкрементом (адрес операнда определяется содержимым указанного в команде регистра IX, IY или SP, которое после выборки операнда увеличивается на заданное в команде число от 1 до 8);

  • косвенно-индексная с 16-разрядным смещением (адрес операнда располага­ется в ячейке памяти с адресом, который получается путем сложения содержи­мого заданных регистров IX, IY, SP или PC с 16-разрядным смещением);

  • косвенно-индексная со смещением, заданным в регистре D (адрес операнда располагается в ячейке памяти с адресом, который получается путем сложения со­держимого заданных регистров IX, IY, SP или PC с содержимым регистра D).

Значения 5-, 8-, 9- и 16-разрядных смещений, заданных в команде, являются числами со знаком. Значения смещений, хранящихся в аккумуляторах, представля­ются числами без знака.

Система команд. Процессор CPU12 выполняет набор из 208 команд над опе­рандами, расположенными в регистрах и ячейках памяти. Система команд CPU12 является расширенным набором команд семейства 68НС11 и включает в себя ко­манды пересылки данных, команды арифметических и логических операций, срав­нения и сдвигов, битовые команды, команды управления программой и управления процессором, а также дополнительные группы команд для обработки табличных данных и реализации «нечеткой логики».

Команды CPU12 содержат от 1 до 6 байт. Первые 1 или 2 байта содержат код операции и определяют способ адресации, в последующих байтах могут размещать­ся операнд (непосредственная адресация), адрес (прямая адресация) или смещение.

Ниже дается обзор команд, выполняемых процессором CPU12, полный состав которых содержится в приведенных таблицах (по соответствующим группам). До­полнительные команды, введенные в микроконтроллерах семейства 68НС12/912, отмечены в таблицах символом *. Краткое описание этих команд приводится в дан­ном разделе. Остальные команды выполняются аналогично соответствующим ко­мандам семейства 68НС11/711, которые описаны в 1.3.2. В таблицах в скобках по­сле мнемокода команд, адресующих выбираемый из памяти операнд, указывается символ opr, который при записи на языке Ассемблера заменяется символом, опре­деляющим способ адресации:

$addr - 8- или 16-разрядное значение адреса addr в шестнадцатеричной форме при прямой адресации;

X (Y, SP или PC) - указывает регистр IX (IY, SP или PC), используемый при индексной адресации;

А (В или D), X (Y, SP или PC) - указывает аккумулятор А (В или D) и индекс­ный регистр IX (IY, SP или PC), используемые при индексной адресации со смеще­нием, содержащимся в аккумуляторе;

d, +X (+Y или +SP), d, -X (-Y или -SP) - задает значение инкремента или дек­ремента d (от 1 до 8) и указывает регистр IX (IY или SP), используемый при ин­дексной адресации с преинкрементом (+) и предекрементом (-);

d, Х+ (Y+ или SP+), d, Х- (Y- или SP-) - задает значение инкремента или декре­мента d (от 1 до 8) и указывает регистр IX (IY или SP), используемый при индекс­ной адресации с постинкрементом (+) и постдекрементом (-);

d, X (Y, SP или PC) - задает 5-, 8-, 9- или 16-разрядное смещение d и указывает регистр IX (IY, SP или PC) при индексной адресации со смещением;

[d, X], [d, Y], [d, SP] или [d, PC] - задает 16-разрядное смещение d и указывает регистр IX, IY, SP или PC при косвенно-индексной адресации со смещением;

[D, X], [D, Y], [D, SP] или [d, PC] - указывает регистры IX, IY, SP или PC, ис­пользуемые при косвенно-индексной адресации со смещением в регистре D;

#Im - задает 8-разрядное значение операнда Im, используемого при непосредст­венной адресации.

Операнд, выбираемый из памяти, обозначается в таблицах команд симво­лом (М).

Команды пересылки (табл. 2.4) осуществляют загрузку операндов из памяти в регистры, запись содержимого регистров в память или передачу между регистра­ми. В эту группу введены дополнительные команды пересылки между ячейками памяти, обмена между регистрами, знакового расширения и обращения к стеку. Ко­манды MOVB и MOVW производят пересылку 8- и 16-разрядных операндов из ячейки памяти с адресом M1 в ячейку с адресом М2.

Таблица 2.4. Команды пересылки

При пересылке может использоваться прямая, индексная или непосредственная адресация. Команды PSHC, PSHD и PULC, PULD выполняют загрузку в стек и за­пись из стека содержимого регистров CCR и D. Взаимный обмен содержимым ме­жду регистрами А, В, D, IX, IY, SP, CCR выполняется с помощью команды EXG. При обмене между 8- и 16-разрядными регистрами в 8-разрядный регистр записы­вается младший байт 16-разрядного содержимого, а содержимое 8-разрядного реги­стра поступает в младший байт 16-разрядного регистра. При этом старший байт 16-разрядного регистра принимает значение $FF, если этот регистр указан в качестве r1, или $00, если он указан в качестве r2. Команда SEX осуществляет пересылку со­держимого 8-разрядного регистра А, В или CCR, указанного в качестве r1, в младший байт 16-разрядного регистра D, IX, IY или SP, указанного как r2. При этом все биты старшего байт этого регистра принимают значение старшего (знако­вого) разряда 8-разрядного регистра (знаковое расширение). Таким образом произ­водится преобразование 8-разрядного числа в 16-разрядное с сохранением знака.

Команды арифметических операций (табл. 2.5) выполняют сложение и вычи­тание содержимого двух регистров или регистра и ячейки памяти с учетом или без учета признака переноса, а также производят коррекцию результата после сложения двоично-десятичных чисел.

Таблица 2.5. Команды арифметических операций и сравнения

В эту группу входят команды, выполняющие инкремент или декремент операн­да и изменяющие его знак. Эти команды аналогичны соответствующим командам микроконтроллеров семейства 68НС11/711. Существенно расширен набор команд умножения и деления. Введены команды умножения 16-разрядных операндов со знаком и без знака EMUL, EMULS. Получаемое при этом 32-разрядное произве­дение хранится в регистрах IY (старший байт) и D (младший байт). Команды деле­ния дополнены операциями деления 16-разрядных операндов со знаком IDIVS, а также операциями деления 32-разрядного операнда на 16-разрядный без знака и со знаком: EDIV, EDIVS.

Дополнительно введена команда EMACS, которая реализует операцию умно­жения с накоплением, широко используемую при цифровой обработке сигналов. Умножаются два 16-разрядных операнда, которые расположены в ячейках памяти, адресуемых содержимым регистров IX, IY. Произведение суммируется с 32-разряд­ным числом, которое выбирается из четырех ячеек памяти. Адрес младшего байта этого числа задается в команде (прямая адресация). Результат операции заносится в эти же ячейки памяти (накопление результатов).

Команды сравнения (см. табл. 2.5) выполняют установку признаков N, Z, V, С в регистре CCR в соответствии с результатом вычитания содержимого двух опе­рандов, хранящихся в регистрах-аккумуляторах или регистре и ячейке памяти. Ко­манды тестирования устанавливают значения признаков N, Z в соответствии с содержимым ячейки памяти или регистра-аккумулятора. В число команд этой группы добавлена команда CPS, которая производит сравнение содержимого адресуемой ячейки памяти и указателя стека SP.

Команды логических операций (табл. 2.6) реализуют побитовые операции И, ИЛИ, Исключающее ИЛИ над содержимым регистра и ячейки памяти, инвертиро­вание содержимого регистра или ячейки памяти.

Таблица 2.6. Команды логических операций и сдвигов

В набор команд для семейства 68НС12/912 добавлены команды ANDCC, ORCC ло­гических операций И, ИЛИ над содержимым регистра признаков CCR и непосредст­венно заданной константы. Эти команды используются для установки необходимых значений признаков в регистре CCR. Команды побитового тестирования BITA, BITB устанавливают признаки N, Z в соответствии с результатом логической операции И над содержимым регистра-аккумулятора А или В и адресуемой ячейки памяти.

Команды сдвига (см. табл. 2.6) выполняют одноразрядные арифметические, логические и циклические сдвиги содержимого регистров-аккумуляторов или ячей­ки памяти. Все команды этой группы аналогичны соответствующим командам мик­роконтроллеров семейства 68НС11/711.

Таблица 2.7. Установка значений признаков

При выполнении команд пересылок, арифметических и логических операций, сдвигов происходит изменение значений признаков в регистре CCR. В табл. 2.7 из­менение признаков Н, N, Z, V, С показано такими символами:

«+» - установка значения по результату операции;

«-» - значение остается неизменным;

«0», «1» - установка соответствующих значений признаков 0 или 1;

«х» — неопределенное (произвольное) значение признака.

Команды битовых операций BCLR, ВSET (табл. 2.8) обеспечивают установку в 0 или 1 бита в ячейке памяти, адресуемой с помощью прямой или индексной (со смещением или без смещения) адресации. Номер устанавливаемого бита задается непосредственным операндом Im. Команды установки признаков (табл. 2.8) вы­полняют установку требуемого значения признаков С, I, V в регистре CCR. Все эти команды выполняются аналогично соответствующим командам микроконтроллеров семейства 68НС11/711.

Таблица 2.8. Команды битовых операций и установки признаков

Команды табличной интерполяции TBL, ETBL (табл. 2.9) представляют но­вую группу команд, введенных в семейство 68НС12/912. Эти команды вычисляют значение линейной функции Y на отрезке между точками X1 и Х2, который делится на 256 интервалов. Содержимое регистра В задает номер интервала, для которого определяется значение функции:

Y = X1 +(В х (Х2-Х1)/256).

Для выборки операндов X1, Х2 в этих командах используются различные виды индексной адресации (кроме адресации с 9- и 16-разрядным смещением).

Команда TBL вычисляет 8-разрядное значение функции Y, используя 8-разряд­ные значения аргументов X1, Х2. Операнд X1 выбирается из ячейки памяти, адрес которой М задан в команде, операнд Х2 - из следующей ячейки памяти с адресом М+1. Результат Y, округленный до целого числа, записывается в регистр А.

Команда ETBL использует 16-разрядные значения X1, Х2 и вычисляет 16-раз­рядное значение Y. При этом операнд X1 выбирается из двух ячеек памяти с адре­сами М и М+1 (в команде задается адрес младшего байта М), операнд Х2 - из двух следующих ячеек памяти с адресами М+2, М+3. Округленный до целого числа ре­зультат Y поступает в регистр D.

Данные команды позволяют определять значения функции Y, аппроксимиро­ванной линейными отрезками. Операнды X1, Х2, определяющие значения Y в ко­нечных точках отрезков, хранятся в памяти в виде таблицы. Промежуточные значе­ния функции Y на этих отрезках определяются путем интерполяции, которая производится с помощью команд TLB, ETLB. По результатам вычисления Y уста­навливаются признаки N, Z в регистре CCR, признак С может принять произволь­ное значение (0 или 1).

Команды нахождения максимума и минимума (табл. 2.9) позволяют выбрать минимальное или максимальное из двух чисел без знака, которые расположены в аккумуляторе А и ячейке памяти с адресом М, заданным в команде или аккумуля­торе D и паре ячеек памяти с адресами М, М+1.

Для адресации памяти используются все виды индексной и косвенно-индексной адресации. Выбранное число располагается в аккумуляторе или ячейке памяти. Ко­манды MINA, MINM, МАХА, МАХМ выполняют сравнение и выбор 8-разрядных операндов, команды EMINA, EMINM, ЕМАХА, ЕМАХМ - 16-разрядных операндов. При этом значения признаков в регистре CCR (см. табл. 2.7) устанавливаются в со­ответствии с результатом сравнения операндов (вычитания А-(М) или D-(M:M+1)).

Таблица 2.9. Команды табличной интерполяции и нахождения максимума-минимума

Команды «нечеткой логики» обеспечивают выполнение ряда специфических операций, которые позволяют эффективно реализовывать на базе микроконтролле­ров семейства 68НС12/912 системы управления различными объектами с использо­ванием методов «нечеткой логики» (fuzzy logic).

Этот вариант математической логики предполагает использование логических переменных, имеющих несколько возможных значений в диапазоне от «истинно» до «ложно». Таким образом вводятся промежуточные значения переменных, кото­рые имеют вероятностный характер, обозначая «более истинные» или «менее ис­тинные» события. Обработка этих нечетких переменных производится с помощью комплекта логических правил вида «если ... то», которые определяют нечеткие значения выходных переменных в зависимости от набора используемых входных переменных. Различные правила могут давать разные значения для одной и той же переменной. Поэтому на последнем этапе обработки для каждой переменной опре­деляется среднее значение с использованием весовых коэффициентов. Это значение преобразуется в конечный результат, который представляется в виде двоичного числа,

Таким образом, для обработки поступающих данных с использованием «нечет­кой логики» необходимо задать:

  • набор функций, позволяющих преобразовать поступающие данные в значения нечетких переменных;

  • комплект правил, с помощью которых производится обработка полученных входных переменных в нечеткие значения выходных переменных;

  • набор функций для обратного преобразования нечетких выходных переменных в двоичную форму представления.

Все эти функции и правила должны храниться в памяти микроконтроллера, об­разуя необходимую базу знаний для управления определенными объектами или процессами с помощью «нечеткой логики». Для создания такой базы знаний и оп­ределения значений весовых коэффициентов обычно используются экспертные оценки специалистов в области проектирования и эксплуатации объектов, которые должны управляться данной системой.

Используя хранящуюся в памяти базу знаний, процессор решает задачи управ­ления с использованием «нечеткой логики», выполняя 3 основные процедуры:

  • фаззификацию - преобразование поступивших данных в значения нечетких входных переменных с помощью соответствующих трапецеидальных функций, параметры которых выбираются из базы знаний;

  • обработку нечетких входных переменных с помощью комплекта логических правил, выбираемых из базы знаний;

  • дефаззификацию - преобразование полученных нечетких выходных перемен­ных в двоичные значения результатов обработки.

Группа команд «нечеткой логики» (табл. 2.10) включает 4 команды, выпол­няющие данные процедуры.

Таблица 2.10. Команды «нечеткой логики»

Команда MEM производит фаззификацию, выполняя преобразование 8-разряд­ных данных в значения нечетких входных переменных Y, которые могут иметь зна­чения от $00 («абсолютно ложно» - логический 0) до $FF («абсолютно истинно» - логическая 1). Таким образом обеспечивается возможность использования 256 сте­пеней истинности входных переменных. Присвоение нечеткого значения Y произ­водится для каждой входной переменной X в соответствии с функцией преобразо­вания, определенной в используемой базе знаний. Задаваемые функции Y = f(X) имеют форму трапеции, которая определяется четырьмя 8-разрядными параметра­ми- положениями начальной (Р1) и конечной (Р2) точек, наклоном передней (S1) и задней (S2) сторон (см. рис. 2.2). Величина наклона задается целым числом, кото­рое получается округлением результата деления:

S1 =256/(P1s-P1), S2 = 256/(Р2 - P2s),

где P1, P1s, P2, P2s - значения X для соответствующих вершин трапеции. Значения S1 и S2 = $00 указывают на вертикальное положение передней или задней стороны трапеции (бесконечный наклон). При S1=$00 точке Р1 соответствует величина Y=$FF, при S2=$00 точке Р2 соответствует Y=$FF. Параметры P1, P2, S1, S2 хра­нятся в памяти в виде таблицы функций фаззификации, которая адресуется содер­жимым индексного регистра IX. Каждая функция определяется 4 байтами в этой таблице, которые имеют адреса (IX) - значение P1, (IX+1) - значение Р2, (IX+2) -значение S1, (IX+3) - значение S2. Значение нечеткой переменной Y определяется в соответствии с поступившими входными данными, которые загружаются в акку­мулятор А. Полученное значение Y записывается в ячейку памяти, адрес которой содержится в регистре IY. На рис. 2.2 показаны примеры определения Y для четы­рех значений входных данных Х1=$10, Х2=$38, ХЗ=$50, Х4=$78 при использова­нии функции фаззификации с параметрами P1=$20, P2=$80, S1=$08, S2=$10.

Рис. 2.2. Примеры преобразования входных данных в значения нечетких переменных при использовании различных функций фаззификации

После выполнения команды MEM содержимое регистра IX автоматически инкрементируется на 4, а содержимое IY - на 1, адресуя следующую функцию фаззи­фикации и следующую позицию для размещения нечетких входных переменных в соответствующих таблицах базы знаний. Путем последовательного выполнения этой команды производится заполнение таблицы нечетких входных переменных, которые затем обрабатываются с помощью логических правил, имеющихся в базе знаний.

Обработка полученных нечетких входных переменных производится с помо­щью команд REV и REVW. Алгоритм обработки задается комплексом логических правил, которые хранятся в памяти и последовательно выбираются процессором при выполнении данных команд. Используемые логические правила имеют вид:

Если Y1 And Y2 And Y3 ... And Ym, то Z1, Z2, Z3... Zn,

где Y1...Ym - значения нечетких переменных, которые получены при выполнении фаззификации и хранятся в таблице входных переменных; Z1.. .Zn - значения полу­чаемых результатов операции, которые записываются в формируемую таблицу вы­ходных переменных. Символ And обозначает операцию «Нечеткое И», результатом выполнения которой является минимальное из значений входных нечетких пере­менных. Это значение присваивается выходным переменным Z1...Zn непосредст­венно в полученном виде или после умножения на весовой коэффициент.

Программа обработки реализуется путем последовательного выполнения пра­вил, хранящихся в базе знаний. Если разные правила дают различные значения для одной и той же выходной переменной Zi, то ей присваивается максимальное из по­лученных значений. Эта процедура реализуется логической операцией «Нечеткое ИЛИ»:

Zi(1) Or Zi(2) Or ...Or Zi(k) = Zi,

где Zi(j) - значения выходной переменной Zi, полученной при выполнении j-ro ло­гического правила; Or - символ операции «Нечеткое ИЛИ». Таблица значений не­четких переменных Zi, сформированная после выполнения всего комплекса задан­ных правил, является результатом обработки данных с использованием «нечеткой логики».

Комплекс необходимых логических правил содержится в памяти в виде масси­ва, адресуемого содержимым регистра IX. Каждое правило задается перечислением адресов используемых входных переменных Y и адресов получаемых выходных пе­ременных Z. Списки входных и выходных адресов разделяются символом-разделителем. Другой разделитель ставится в конце списка правил, указывая на за­вершение процедуры обработки. Таким образом, элементами хранящегося в памяти массива логических правил являются адреса используемых переменных (входных и выходных) и символы-разделители.

Команда REV обеспечивает обработку нечетких переменных без использования весовых коэффициентов. Предварительно в регистр IX загружается адрес первого элемента массива используемых правил, в регистр IY - базовый адрес таблицы, где хранятся входные переменные X и в которую будут записываться результаты Z. В аккумулятор А необходимо загрузить число $FF, а в регистре CCR установить значение признака V=0 (для этого достаточно выполнить команду LDAA $FF).

Элементами массива правил являются 8-разрядные смещения, задающие поло­жение входных и выходных переменных в таблице, адресуемой с помощью регист­ра IX. После перечня смещений, определяющих расположение всех входных пере­менных X, используемых в данном правиле, следует разделитель $FE, после которого дается перечень смещений для размещения в таблице получаемых значе­ний выходных переменных. Последующий разделитель $FE указывает на начало перечисления входных переменных для нового правила. Разделитель $FF ставится в конце массива правил, вызывая завершение выполнения команды. При такой ор­ганизации в массиве может содержаться произвольное число правил, в каждом из которых можно указывать любое количество входных и выходных переменных.

При поступлении команды REV процессор выбирает из массива правил первый элемент (смещение) для адресации первой входной переменной, затем выбирает из таблицы эту переменную и сравнивает ее значение с содержимым аккумулятора А. Минимальное из этих значений заносится в А, т. е. реализуется операция, анало­гичная выполняемой по команде MINA (см. табл. 2.9). Затем содержимое IX авто­матически инкрементируется на 1, адресуя следующую входную переменную для первого правила, после выборки которой снова выполняется операция определения минимума. Таким образом в аккумуляторе А, в котором хранятся промежуточные результаты, оказывается минимальное из значений входных переменных, указанных в данном правиле (операция «Нечеткое И»). Когда из массива правил выбирается разделитель $FE, то это указывает на конец списка входных переменных. После этого процессор выбирает из массива смещения, задающие расположение результа­та, и заносит по соответствующим адресам содержимое аккумулятора А. Выборка очередного разделителя $FE указывает на окончание выполнения очередного пра­вила. После этого в А загружается число $FF и процессор последовательно выбира­ет входные переменные, смещения которых заданы в следующем правиле. При по­ступлении разделителя $FE накопленное в А минимальное значение записывается в позиции размещения результата, определенные в этом правиле.

При размещении результата выполнения каждого правила реализуется опера­ция поиска максимального из значений, содержащихся в аккумуляторе А и адре­суемой ячейке памяти, которая служит для хранения данной выходной переменной. Это значение и заносится в ячейку памяти, как при выполнении команды МАХМ (см. табл. 2.9). Таким образом, таблица выходных переменных заполняется макси­мальными значениями переменных, полученных с помощью различных правил (операция «Нечеткое ИЛИ»). При этом для получения правильных результатов во все ячейки этой таблицы должно быть предварительно записано число $00.

Выполнение команды REV завершается, когда из массива правил будет выбран разделитель $FF. При этом в таблице выходных переменных, базовый адрес которой содержится в регистре IY, будут накоплены результаты обработки. В процессе выполнения этой команды признак V в регистре CCR указывает вид текущей про­цедуры: при выборке и обработке входных переменных значение V=0, при записи результатов для очередного правила - V=1. Поэтому значение V изменяется после выборки каждого разделителя $FE. После завершения команды в регистре CCR должно быть установлено V=1, другое значение этого признака указывает на нали­чие ошибок в массиве правил.

Команда REVW может выполнять обработку нечетких переменных с использо­ванием весовых коэффициентов или без них. При этом вид обработки определяется предварительной установкой значения признака С в регистре CCR: с введением ве­совых коэффициентов - С=1, без них - С=0. В регистр IX загружается адрес перво­го элемента массива логических правил, в регистр IY - адрес первого элемента таб­лицы весовых коэффициентов (если они используются). В аккумулятор А, который служит для промежуточного хранения результатов выполнения правил, предвари­тельно загружается число $FF, а в регистре CCR устанавливается значение призна­ка V=0 (с помощью команды LDAA $FF).

Команда REVW использует массив правил, элементами которого являются 16-разрядные абсолютные адреса входных и выходных переменных, их разделите­лем служит число $FFFE. Разделитель $FFFF в конце массива правил вызывает за­вершение выполнения команды.

Без использования весовых коэффициентов команда REVW выполняется анало­гично команде REV, определяя минимальные значения адресованных входных пе­ременных и располагая их по заданным адресам в таблице выходных переменных. При использовании весовых коэффициентов содержимое регистра А перед разме­щением в качестве результата выполнения очередного правила умножается на 8-разрядный весовой коэффициент Wi. Адрес коэффициента задается для каждого правила в таблице, адресуемой содержимым регистра IY. Старший байт полученно­го произведения записывается в таблицу выходных переменных. После выполнения очередного правила содержимое регистра IY инкрементируется на 1, адресуя весо­вой коэффициент для следующего правила. Значения признака V в регистре CCR служат для контроля процесса обработки, как и при выполнении команды REV.

Команда WAV осуществляет дефаззификацию, в результате которой произво­дится переход от нечетких значений выходных переменной к точным выходным значениям, требуемым для управления системой. В качестве исходных данных эта команда использует таблицу нечетких выходных переменных Zi, полученных в процессе обработки с помощью команд REV, REVW, и таблицу заданных 8-раз­рядных весовых коэффициентов Fi, определяющих степень влияния той или иной выходной переменной на конечный результат. При поступлении команды WAV производится вычисление суммы произведений Fi*Zi и суммы используемых весо­вых коэффициентов:

P = ....Fi*Zi, S = ...Fi,

где n указывает количество выходных переменных и коэффициентов (до 255), вы­бираемых из соответствующих таблиц при вычислении Р, S. Последующее деление полученных результатов с помощью команды EDIV (см. табл. 2.4) позволяет получить средневзвешенное значение выходного параметра Zw = P/S, которое использу­ется при решении задач управления объектами. Если для этого требуется несколько выходных параметров, то команды WAV и EDIV выполняются несколько раз с раз­личными значениями Zi, Fi, n.

При выполнении команды WAV в аккумулятор В загружается требуемое значе­ние n, в регистр IX - адрес первой выходной переменной, в регистр IY - адрес ве­сового коэффициента, заданного для этой переменной. После каждого вычисления полученные промежуточные значения Р и S сохраняются, содержимое регистров IX, IY автоматически инкрементируется на 1, адресуя в соответствующих таблицах следующую выходную переменную Zi и заданный для нее коэффициент Fi, содер­жимое аккумулятора В уменьшается на 1. Процесс вычисления заканчивается, когда содержимое В становится равным 0, при этом признак Z в регистре CCR принимает значение 1. Накопленное в процессе вычислений 24-разрядное значение суммы произведений Р заносится в пару регистров IX:D (16 младших разрядов в D, 8 стар­ших разрядов в IX), а 16-разрядное значение суммы весовых коэффициентов S -в регистр IY. Таким образом, полученные результаты готовы для выполнения по­следующей команды EDIV, вычисляющей значение выходного параметра Zw.

Необходимо отметить, что выполнение команд REV, REVW, WAV может по­требовать значительного времени. Поэтому допускается прерывание их выполнения при поступлении соответствующих запросов с автоматическим сохранением про­межуточных результатов в стеке. После обработки прерывания содержимое исполь­зуемых регистров автоматически восстанавливается и выполнение данных команд продолжается.

Команды управления программой (табл. 2.11) реализуют безусловный пере­ход, условные и безусловные ветвления по различным условиям, организацию цик­лов, вызов подпрограмм и реализацию программных прерываний, выход из подпро­граммы или процедуры обработки прерывания.

Значительная часть команд этой группы выполняется аналогично соответст­вующим командам микроконтроллеров 68НС11/711 с использованием ряда допол­нительных способов адресации, введенных для семейства 68НС12/912. Так, при выполнении команд JMP, JSR для определения адреса перехода ЕА могут использо­ваться любые варианты прямой, индексной и косвенно-индексной адресации, кото­рые обеспечивает процессор CPU12. В командах условного ветвления по значению заданного бита BRCLR, BRSET операнд выбирается с помощью различных вариан­тов прямой или индексной адресации. В качестве условий ветвления cc использу­ются такие же комбинации признаков, как для семейства 68НС11/711 (см. табл. 1.59).

Дополнительно введенные команды LBcc, LBRA реализуют условное и безус­ловное ветвление с использование 16-разрядного смещения со знаком rel16. Таким образом обеспечивается возможность перехода к любой позиции адресного про­странства объемом 64 Кбайт («длинное» ветвление). Команда LBRN реализует пе­реход к следующей команде программы. Эти команды имеют длину 4 байта (2 бай­та - код операции, 2 байта - смещение rel16).

Таблица 2.11. Команды управления программой

Команда CALL обеспечивает вызов подпрограммы, расположенной за предела­ми 64 Кбайт стандартного адресного пространства. Для адресации расширенной памяти емкостью до 4 Мбайт используется специальный регистр, который содержит старшие 8 разрядов формируемого при этом 24-разрядного адреса. Отметим, что из рассматриваемых в данном разделе микроконтроллеров семейства 68НС12/912 возможности адресации такого объема памяти реализуются только в модели 68НС812А4. Поэтому команды CALL и RTC выполняются только процессорами CPU12, входящими в состав микроконтроллеров 68НС812А4.

При выполнении команды CALL содержимое регистра PPAGE заносится в стек вместе с содержимым PC. В данной команде используется непосредственное или косвенное указание номера страницы, где располагается вызываемая подпрограмма. При непосредственном указании в поле операндов дается номер страницы page, ко­торый может иметь значения от 0 до 63. В этом случае символ opr задает способ оп­ределения 16-разрядного адреса ЕА, указывающего первую команду подпрограммы, с помощью прямой или различных вариантов индексной адресации. Если исполь­зуемый в команде CALL символ opr задает один из вариантов косвенно-индексной адресации, то значения адреса ЕА и номера страницы page выбираются из памяти. В этом случае из пары адресуемых в команде ячеек памяти выбираются старший и младший байты адреса ЕА, а из следующей за ними ячейки - номер требуемой страницы page. Возврат из подпрограммы при использовании расширенного адрес­ного пространства реализуется с помощью команды RTC, которая восстанавливает первоначальное содержимое регистров PPAGE и PC, загружая его из стека.

Введенные в семействе 68НС12/912 команды DBEQ, DBNE, IBEQ, IBNE, TBEQ, TBNE обеспечивают различные варианты реализации программных циклов. В качестве операнда cnt в этих командах указываются символы А, В, D,X, У или SP, определяющие 8- или 16-разрядные регистры А, В, D, IX, IY или SP, которые ис­пользуются в качестве счетчиков циклов. Смещение rel9 является 9-разрядным чис­лом со знаком, что обеспечивает переход в пределах от -256 до +255 позиций от те­кущего содержимого PC. Условием перехода к началу цикла окончания является равенство нулю (команды DBEQ, IBEQ, TBEQ) или неравенство нулю (команды DBNE, IBNE, TBNE) содержимого счетчика cnt. Команды TBEQ, TBNE обеспечивают выполнение цикла в соответствии с текущим содержимым регистра-счетчика. Команды DBEQ, DBNE предварительно производят декремент содержимого счет­чика на 1, а команды IBEQ, IBNE - инкремент содержимого счетчика на 1.

Программное прерывание выполняется с помощью команды SWI, которая зано­сит в стек содержимое регистров процессора и загружает в PC соответствующий вектор прерывания Ve, размещенный в таблице векторов по адресу $FFF6-F7 (см. 2.1.3). Дополнительная команда TRAP также сохраняет в стеке содержимое ре­гистров и загружает в PC вектор Ve, размещенный по адресу $FFF-F9, который служит для вызова обработчика прерывания при поступлении неправильного кода команды (см. 2.1.3). В качестве операнда tn в команде TRAP используются числа в диапазоне $30-39 или $40-FF, которые соответствуют значению второго байта в неправильных (неиспользуемых) кодах команд. Возвращение из программы-обработчика прерываний (исключений) обеспечивает команда RTI.

Команды управления процессором (табл. 2.12) переводят его в энергосбере­гающие режимы ожидания и останова (команды WAI, STOP, см. 2.1), а также обес­печивают отсутствие операций («пустая» команда NOP).

Следует отметить, что аналогично NOP отсутствие (пропуск) операции реали­зуют команды BRN и LBRN. Отличие состоит в том, что команда NOP обеспечива­ет задержку выполнения программы на один такт, a BRN и LBRN - на 2 и 4 такта. Путем комбинации этих команд и организации их циклического выполнения можно программно реализовать различные значения задержек.

Дополнительно введенная в семейство 68НС12/912 команда BGND обеспечива­ет перевод процессора в специальный режим отладки BDM (Background Debug Mode), который описан в 2.1.12.

Время выполнения большинства команд составляет от 1 до 6 тактов (в зависи­мости от используемого способа адресации). Более длительное время требуется для реализации команд деления IDIV, IDIVS, EDIV, EDIVS, FDIV и умножения с накоплением EMACS (11-13 тактов), табличной интерполяции TBL, ETBL (8 и 10 так­тов), вызова подпрограммы CALL (8-10 тактов), программных прерываний SWI, TRAP (9 и 10 тактов), ожидания WAI и останова STOP (9 и 10 тактов). Длитель­ность выполнения команд «нечеткой логики» REV, REVW, WAV зависит от объема используемой базы знаний.

Таблица 2.12. Команды управления процессором

Организация очереди команд. Особенностью процессора CPU12 является реализация внутренней очереди команд, в которую выбираются коды команд для их последующего выполнения. Организация очереди исключает потери времени на выбор очередной команды после выполнения предыдущей, что обеспечивает повы­шение производительности.

Очередь команд в CPU12 имеет две основные позиции, в которые поступают по 2 байта программного кода. Первые 2 байта загружаются в позицию 1 очереди. При выборке двух следующих байт программы первые 2 байта перемещаются из пози­ции 1 в позицию 2 очереди, откуда они выбираются для декодирования и исполне­ния. Вновь поступившие 2 байта занимают освободившуюся позицию 1. Дополни­тельный 16-разрядныЙ буфер команд располагается перед очередью. В него загружаются 2 вновь выбранных байта программного кода, если позиции 1 и 2 оче­реди заняты командами, выполнение которых еще не завершено. После выполнения команды, расположенной в позиции 2, в эту позицию перемещаются для исполне­ния два байта из позиции 1. В освободившуюся позицию 1 очереди поступают бай­ты программного кода из буфера команд. Таким образом, очередь команд содержит две основные позиции 1 и 2, в которых содержатся 4 байта выбранного программ­ного кода, и дополнительный буфер команд, где хранятся 2 следующих байта, ес­ли обе позиции очереди заняты командами, ждущими выполнения.

В каждом такте выполнения программы очередь команд имеет одно из четырех возможных состояний:

  • состояние 0: отсутствие перемещения программного кода в очереди (стацио­нарное состояние);

  • состояние 1: прием в буфер команд двух байт программного кода;

  • состояние 2: перемещение двух байт из позиции 1 в позицию 2 и загрузка в по­зицию 1 двух новых байтов программного кода с шины данных;

  • состояние 3: перемещение двух байт из позиции 1 в позицию 2 и загрузка в по­зицию 1 двух байт программного кода из буфера команд.

В процессе работы микроконтроллера информация о текущем состоянии очере­ди команд выдается на внешние выводы IPIPE1-0 и может использоваться для кон­троля его функционирования в процессе отладки программного обеспечения и ап­паратных средств системы. В каждом такте на эти выходы выдается код ЕХ, указывающий на начало выполнения следующей команды программы, и код DM, определяющий состояние очереди команд. Код ЕХ принимает соответствующее значение, когда в позицию 2 очереди команд поступает первый байт (код операции) новой команды программы и начинается ее выполнение. При этом ЕХ указывает, в каком байте - старшем (с четным адресом) или младшем (с нечетным адресом), размещается код операции новой команды.

Код ЕХ устанавливается на выводах IPIPE1-0 при поступлении отрицательного перепада тактового сигнала ECLK (начало очередного такта), код DM - при поло­жительном перепаде этого сигнала. Значения этих кодов приведены в табл. 2.13.

Таблица 2.13. Значения сигналов (коды EX, DM) на выводах IPIPE1-0