Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Система команд МК семейства mcs-51




Система команд MCS-51 включает 111 инструкций. Команды процессорного ядра MCS-51 имеют однобайтовый, двухбайтовый и трехбайтовый формат. Большинство команд (94) имеют формат один или два байта и выполняются за один или два машинных цикла. При тактовой частоте 12 МГц длительность машинного цикла составляет 1 мкс. Множе­ство команд делится на 5 традиционных групп, каждая из которых рассмотрена ниже. Распределение команд по группам приведено в табл. 4.6.

Таблица 4.6

Главная отличительная особенность системы команд ядра MCS-51 - наличие боль­шого числа двухадресных команд передачи данных. Операнды под управлением одной команды могут перемещаться не только между одним из регистров центрального про­цессора и ячейкой памяти, но и между двумя ячейками памяти, которые адресуются различными способами. Множество сочетаний возможных способов адресации опе­рандов в двухадресных командах обусловливает наличие 13 различных форматов ко­манд (рис. 4.36). Первый байт команды всегда содержит код операции (КОП). Второй и третий байты содержат либо адреса операндов, либо сам операнд.

 

 

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

Таблица 4.7

1 В зависимости от способа адресации и места расположения операнда можно выде­лить девять типов операндов, между которыми возможен обмен. Граф возможных опе­раций передачи данных показан на рис. 4.37. Аккумулятор АСС представлен на этом графе отдельной вершиной, поскольку многие команды используют неявную адресацию аккумулятора (символ А присутствует в мнемонике команды, в то время как поле адреса аккумулятора отсутствует). Команды передачи данных допускают также прямую адреса­цию аккумулятора. Для этого его абсолютный адрес 0E0h должен быть указан во втором или третьем байтах команды. Косвенная адресация по указателям @R0 и @R1 распрос­траняется только на адресное пространство 00h...7Fh внутреннего ОЗУ. Регистры специ­альных функций и регистры центрального процессора (диапазон адресов 8Fh - 0FFh) не могут быть адресованы косвенно.

Следует обратить внимание, что команды обращения к ячейкам внешней памяти (MOVX) и команды чтения из памяти программ (MOVC) отличаются от команд обмена с внутренним ОЗУ. Такое положение дел полностью соответствует теории: для обраще­ния к ячейкам с одинаковыми адресами, но в разных массивах памяти должны быть сгенерированы разные сигналы управления. Следовательно, должны использоваться разные команды.

 

 

Арифметические команды. Данную группу образуют 24 команды (табл. 4.8), кото­рые выполняют операции сложения (ADD и ADDC), вычитания (SUBB), инкремента и декремента (INC и DEC), умножения (MUL), деления (DIV) и десятичной коррекции (DAA). Команды сложения, вычитания, инкремента и декремента могут быть использованы с четырьмя различными способами адресации внутренней памяти. Команда инкремента выполняется также над двухбайтовым регистром DPTR. Арифметические действия с операндами из внешней памяти данных и памяти программ не производятся.

Команда умножения MUL выполняет операцию целочисленного беззнакового умно­жения. Сомножители расположены в регистрах АСС и В, двухбайтовое произведение в В:АСС. Время выполнения операции составляет 4 машинных цикла. Команда деления DIV выполняет целочисленное беззнаковое деление однобайтового делимого (АСС) на однобайтовый делитель (В). Целое частное расположено в АСС, остаток - в В. Время выполнения операции - 4 цикла.

Таблица 4.8

Логические команды и операции сдвига. Данную группу образует 25 команд. Вы­полняются операции логического И, ИЛИ, Исключающего ИЛИ, операции очистки и ин­версии аккумулятора, различные операции сдвига. Логические команды модифицируют только флаг7, команды сдвига -флаги С и Z. Типы инструкций данной группы приведе­ны в табл. 4.9 и 4.10.

 

Таблица 4.9

 

Команды битового процессора. Данную группу образуют 12 команд (табл. 4.11). Совокупность этих команд называют битовым процессором. Наличие команд битового процессора позволяет существенно сократить управляющие программы по объему кода и времени выполнения. Обратите внимание, что прямоадресуемые биты находятся только в части ячеек внутреннего ОЗУ и в регистрах специальных функций. Аккумулятор АСС, регистр В и регистор признков PSW также имеют побитный доступ (см. рис. 4.34).

Команды условного перехода по значениям отдельных битов JB и JNB могут быть отнесены как к группе команд битового процессора, так и к группе команд управления. Поэтому последние приведены в следующем разделе.

Команды передачи управления. Группа команд передачи управления является самой многочисленной группой. Она содержит 40 инструкций, которые делятся на две подгруппы:

1)команды условных и безусловных переходов (табл. 4.12);

2)команды вызова подпрограмм и обслуживания прерываний (табл. 4.13).

Таблица 4.10

 

Центральный процессор MCS-51 может использовать три команды условного пере­хода: традиционную трехбайтовую команду (длинный переход - LongJMP) и две двухбай­товые команды - AJMP и SJMP. При написании программ на языке Ассемблера допуска­ется употребление мнемоники JMP. Транслятор с языка Ассемблера выберет вариант с меньшим временем реализации.

Группа команд ветвления позволяет выполнить переходы по значениям бита перено­са С и флага нулевого результата в аккумуляторе Z, а также по значению прямоадресуемого бита. Особое внимание следует обратить на команды CJNZ и DJNZ. Первая (CJNZ) позволяет сравнить два операнда и перейти по метке в случае неравенства.Вторая(DJNS) предназначена для организации циклов: содержимое счетчика циклов уменьшается на единицу и осуществляется переход по метке,если результат не равен нулю.

 


 

 

Подобно командам безусловного перехода, центральный процессор MCS-51 име­ет две команды вызова подпрограмм: трехбайтовую LCALL и двухбайтовую ACALL. При составлении исходного текста прикладной программы можно использовать аббревиату­ру CALL. Транслятор с языка Ассемблера подставит необходимый код в зависимости от расположения вызываемой программы в кодовом сегменте.

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

Таблица 4.13

 

СИСТЕМА ПРЕРЫВАНИЙ

Система прерываний МК 8051 АН включает пять источников -два внешних и три внут­ренних. Внешние запросы поступают на входы INTO/P3.2 и INT1/P3.3, внутренние запро­сы формируются модулями таймеров Таймер 0 и Таймер 1, а также контроллером после­довательного интерфейса. В процессе формирования запроса на прерывание каждый источник запроса выставляет в «1» специальный флаг. Этот флаг вызовет генерацию запроса на прерывание, если прерывания от данного источника разрешены. В подпрог­рамме обслуживания прерывания флаг- источник запроса -должен быть сброшен. Если же прерывания от данного источника запрещены, то логика установки флага запроса не изменяется, но обслуживаться данный флаг должен только программно, без использова­ния аппаратных средств подсистемы прерывания.

Для формирования внешнего запроса на прерывание необходимо установить ак­тивный уровень сигнала на одном из входов: INTO/P3.2 или INT1/P3.3 (см. рис. 4.32). Распознавание микроконтроллером активного уровня сопровождается установкой триг­геров запроса внешних прерываний IEO и IE1 в регистре управления таймера TCON (см. табл. 4.19). Прерывания по входу INTO/P3.2 разрешает флаг ЕХО регистра разре­шения прерываний IE, по входу 1МТ1/РЗ.З-флагЕХ1 того же регистра (см. табл. 4.15). Каждый из входов - INTO/P3.2 или INT1/P3.3 - может быть программно настроен на один из двух режимов распознавания сигнала запроса:

1) Активным является низкий уровень сигнала. Он должен удерживаться на входе до начала обслуживания микроконтроллером данного запроса. Далее сигнал должен стать пассивным до завершения процедуры обслуживания. В противном случае триггер запро­са на прерывание будет установлен повторно. Описанная логика установки триггера внеш­него прерывания получила название статического режима распознавания запроса.

 

2) Активным является перепад сигнала с «1» на «0». Для распознавания запроса высокий и низкий уровни сигнала должны быть длительностью не менее одного машин­ного цикла каждый. По истечении одного машинного цикла после перепада сигнала внеш­него запроса с «1» на «0» устанавливается в «1» один из флагов ЕХ0 или ЕХ1. После этого уровень сигнала внешнего запроса может быть произвольным. Даже если он ос­тался низким после завершения процедуры обслуживания прерывания, то повторной установки флагов ЕХ0 или ЕХ1 не произойдет. Следующий запрос будет воспринят МК только если сигнал на входе INTO или INT1 установится в «1», а затем опять в «0». Опи­санная логика установки триггера запроса на прерывание носит название динамическо­го режима распознавания запроса.

Выбор режима распознавания внешнего запроса определяют биты IT0 и IT1 регистра TCON (см. табл. 4.19). Если выбран статический режим распознавания внешнего запро­са, то установленные триггеры ЕХО и ЕХ1 должны быть сброшены в подпрограмме об­служивания соответствующего прерывания. Для этой цели наиболее удобно использо­вать команды битового процессора: CLR ЕХ0 и CLR EX1. Если выбран динамический режим распознавания внешнего запроса, то триггеры ЕХ0 и ЕХ1 сбрасываются автома­тически при переходе на соответствующую подпрограмму прерывания.

Модули таймеров таймер 0 и таймер 1 используют для формирования запросов на прерывания триггеры переполнения TF0 иТР1 регистра TCON (см. табл. 4.19). При пере­ходе к выполнению соответствующей подпрограммы прерывания эти флаги сбрасыва­ются автоматически. Поэтому нет необходимости предусматривать специальные коман­ды для сброса флагов TF0 и TF1. Прерывания по переполнению таймера 0 разрешает флаг ЕТ0 регистра разрешения прерывания IE, по переполнению таймера 1 - флаг ЕТ1 того же регистра (см. табл. 4.15).

Модуль последовательного порта выставляет два флага, которые могут генериро­вать запросы на прерывание. Это триггеры TI и RI регистра SCON. Первый формируется по окончании передачи байта данных, второй - по окончании приема очередного байта. Флаги генерируют один общий запрос на прерывание. В подпрограмме обслуживания прерывания следует проанализировать, какой из триггеров вызвал формирование зап­роса на прерывание, и сбросить его. Если к моменту перехода на подпрограмму преры­вания установленными оказались сразу оба флага TI и RI, то удобно производить обслу­живание последовательного порта, прерываясь дважды. В первой подпрограмме преры­вания распознается один из флагов, например TI. Выполняются действия по загрузке нового байта в регистр данных последовательного передатчика и сбрасывается флагТ Ι. Первая подпрограмма прерывания завершается командой RETI. Так как флаг RI остал­ся в «1», то генерируется новый запрос на прерывание от последовательного порта и в соответствующей подпрограмме прерывания обслуживается блок приемника данного модуля. Перед завершением подпрограммы прерывания сбрасывается флаг RI. Преры­вания по запросу последовательного порта разрешает флаг ES регистра IE.

Все рассмотренные прерывания могут быть вызваны или отменены программой, по­скольку перечисленные флаги запросов программно доступны и могут быть установле­ны/сброшены программой так же, как и аппаратными средствами МК.

Сформированные посредством установки триггеров запросы на прерывание посту­пают в центральный процессор. Эти запросы могут быть приняты к обработке, если триг­гер ЕА регистра IE установлен в «1», или обработка запросов будет задержана до тех пор, пока триггер ЕА будет находиться в «0». Триггер ЕА устанавливается и сбрасывает­ся только программно. Таким образом, команда SETB ЕА эквивалентна команде «разре­шить прерывания», а команда CLR ЕА-команде «запретить прерывания». Если преры­вания центрального процессора разрешены, то МК завершает выполнение текущей ко манды, сравнивает уровни приоритетов в случае одновременного поступления несколь­ких запросов и формирует внутренними аппаратными средствами код команды LCALL. Двухбайтовый адрес команды LCALL соответствует вектору прерывания с наивысшим приоритетом. МК с ядром MCS-51 имеют фиксированные векторы прерывания. Абсо­лютные значения векторов прерывания для каждого из источников, соответствующие им триггеры запросов и флаги битов разрешения прерывания приведены в табл. 4.14.

Таблица 4.14

Запрос на прерывание не обслуживается центральным процессором и откладывает­ся на более позднее время в следующих случаях: ___ __ _

• текущий цикл не является последним циклом команды;

• выполняется процедура обслуживания прерывания с более высоким приоритетом;

• выполняется команда RETI, команды обращения к регистрам специальных

функций подсистемы прерывания IE и IP.

Если флаг прерывания был установлен, но не получил обслуживания, а к моменту снятия блокировки прерываний был сброшен, то запрос на прерывание теряется.

При появлении запросов от нескольких источников очередность их обслуживания определяется механизмом приоритетов. В МК с ядром MCS-51 реализована двухступен­чатая система приоритетов. Все запросы подразделяются на две группы: с высоким или с низким уровнем приоритета. Принадлежность к той или иной группе определяется значением битов регистра приоритетов IP (табл. 4.16). Если бит регистра IP равен 1, то соответствующий источник запроса относится к группе с высоким приоритетом, если 0 — то с низким. Действие механизма приоритетных прерываний в MCS-51 заключается в выборе одного из источников при одновременном появлении нескольких запросов, а также в принятии решения о прерывании подпрограммы обслуживания другого пре­рывания при поступлении нового запроса. При одновременном появлении нескольких запросов сначала обслуживаются запросы группы с высоким приоритетом, а затем группы с низким приоритетом. Внутри каждой группы распределение приоритетов фиксировано в соответствие с табл. 4.14. Механизм приоритетных прерываний использует два программ­но-недоступных триггера уровня обслуживаемого прерывания. Переход к подпрограмме обслуживания запроса сопровождается установкой триггера того уровня приоритета, к ко­торому относится запрос. При установленном триггере низшей группы запрос высшей группы вызовет прерывание подпрограммы обслуживания прерывания. Команда RETI в конце про­цедуры обслуживания сбрасывает триггер своего уровня. В этом отличие команды возвра­та из прерывания RETI от команды возврата из подпрограммы RET.

Процесс выполнения команды LCALL сопровождается загрузкой в стек содержимого счетчика команд PC (адрес следующей команды). Сохранение в стеке других регистров МК может быть выполнено в подпрограмме прерывания с использованием команды PUSH. В конце подпрограммы прерывания эти регистры должны быть восстановлены из стека командами POP. Однако следует иметь в виду, что программное сохранение в стеке регистров значительно увеличивает время реакции на прерывание. Минимальное время перехода к подпрограмме прерывания составляет 3 машинных цикла. Последней коман­дой каждой подпрограммы прерывания должна быть команда RETI, которая восстанав­ливает из стека адрес следующей команды прерванной программы и очищает флаг бло­кировки прерываний своего уровня.

Непосредственно к подсистеме прерывания относятся два регистра специальных функций:

IE - регистр разрешения прерываний;

IP - регистр приоритетов прерываний.

Форматы этих регистров приведены в табл. 4.15 и 4.16. Кроме этого, в обслуживании прерываний используются биты регистров управления таймерами TCON и портом пос­ледовательного ввода/вывода SCON.

 

Таблица 4.15

 





Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 1773 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Надо любить жизнь больше, чем смысл жизни. © Федор Достоевский
==> читать все изречения...

2355 - | 2039 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.