ПРОЦЕССОРНОЕ ЯДРО МК СЕМЕЙСТВА MCS-51

Центральный процессор МК семейства MCS-51 (далее CPU MCS-51) выполняет дей­ствия над 8-разрядными операндами. Программная модель CPU MCS-51 (рис. 4.35) со­держит шесть регистров. Все регистры, кроме счетчика команд PC, являются частью объединенного адресного пространства ОЗУ данных. Следовательно, для обращения к ним могут быть использованы как символьные имена этих регистров - АСС, В, PSW, SP, DPH, DPL, так и их абсолютные адреса - 0E0h, 0F0h, 0D0h, 81 h, 82h, 83h соответственно.

Аккумулятор АСС - 8-разрядный регистр, в котором хранятся операнды, результаты арифметических и логических операций. Сброс устанавливает все разряды АСС в «0».

 

Регистр В -дополнительный 8-разрядный регистр. Используется в операциях умно­жения и деления. В других командах может интерпретироваться как регистр общего на­значения, его абсолютный адрес указывается во втором байте команды. Сброс устанав­ливает все разряды В в «О».

Регистр-указатель данных DPTR - 16-разрядный регистр (DPH - старший байт, DPL - младший байт). Основное назначение регистра DPTR - участие в формирова­нии адреса при чтении данных (не команд) из области памяти программ, а также при обмене с внешним ОЗУ данных. Система команд предусматривает возможность обра­щения к отдельным байтам (DPH или DPL) регистра DPTR, что позволяет использовать эти регистры для хранения промежуточных результатов вычислений или как источник одного из операндов, указывая во втором байте команды абсолютный адрес DPH или DPL. Сброс устанавливает все разряды DPTR в 0.

Программный счетчик PC- 16-разрядный регистр, содержит адрес текущей коман­ды либо адрес операнда, используемого в текущей команде. После сброса МК программ­ный счетчик автоматически устанавливается в «0». Поэтому в МК с процессорным ядром MCS-51 любая программа пользователя должна начинаться с адреса 0000h.

Указатель стека SP- 8-разрядный регистр, содержит адрес верхушки стека. Архи­тектура процессорного ядра MCS-51 предполагает размещение области стековой памя­ти только в области внутреннего ОЗУ данных. Поэтому глубина стека ограничена объе­мом резидентного ОЗУ. Вызов подпрограммы использует 2 ячейки стека, прерывание-4 ячейки. При сбросе МК указатель стека устанавливается в состояние 07h, назначая область стека в первый банк регистров (регистр R7 нулевого банка имеет адрес 07h, при загрузке в стек содержимое указателя SP увеличивается на 1).

Регистр признаков PSW- 8-разрядный регистр, содержит 7 флагов условий: пере­носа С, дополнительного переноса АС, переполнения OV, четности Р, два флага RS1 :RSO для выбора текущего банка регистров, свободно программируемый пользователем флаг FO. Обратите внимание: в регистре признаков отсутствуют флаги нулевого результата Z и отрицательного результата N. Однако, если флаг N в архитектуре MCS-51 действительно отсутствует, то признак нулевого состояния аккумулятора (и только аккумулятора!) фор­мируется, но не запоминается и в регистре признаков не отображается. Поэтому при составлении прикладной программы пользователя команды условного перехода по при­знаку Z (JZ и JNZ) должны быть выполнены сразу после команды действия над операн­дами, этот признак формирующей. Краткое описание логики установки «незнакомых» флагов:

Р-флаг четности. Устанавливается в «1», если число единиц в аккумуляторе не­четное. При четном числе единиц в АСС сбрасывается. Все попытки принудительно ус­тановить флаг Р в состояние, которое не соответствует текущему состоянию аккумулято­ра АСС, будут безуспешными.

RS1:RSO-биты выбора банка регистров. Во избежание нежелательного изменения других битов регистра признаков рекомендуется производить модификацию номера банка с использованием команд битового процессора. Распределение регистров общего на­значения приведено в табл. 4.5.

Таблица 4.5

FO - флаг пользователя. Назначается пользователем по желанию. Изменение состоя­ния FO и ветвление по значению флага выполняются командами битового процессора.

Процессорное ядро MCS-51 может оперировать с тремя основными типами операн­дов: булевыми (1 бит), байтовыми (8 бит) и двухбайтовыми (16 бит). В операциях обмена тетрадами используется дополнительное представление информации полубайтами (4 бита). В МК с ядром MCS-51 используются следующие способы адресации:

• неявная (INH - Inherent);

• регистровая (REG - Register);

• непосредственная (IMM - Immediate);

• прямая (DIR - Direct);

• косвенная (IDIR - Indirect);

• относительная (REL - Relative).

К инструкциям с неявной адресацией относятся команды, которые не требуют для своего выполнения каких-либо операндов: RTI, NOP. Неявную адресацию имеют инструк­ции, которые содержат адрес операнда в коде команды, например, команда установки бита переноса SETB С или команды инкремента аккумулятора INC А и регистров INC Rn. Все команды с неявной адресацией имеют длину в 1 байт и состоят только из кода опера­ции. Обратите внимание: мнемоника команды содержит имя регистра в поле операнда (А, Rn). Но при кодировании команды это имя будет помещено в байт кода операции.

Код операции команды с непосредственной адресацией размещается в первом бай­те. Сразу же за кодом операции следует 1 байт данных. Эти данные не могут быть изме­нены в ходе выполнения программы, так как они расположены непосредственно в памя­ти программ, т. е. в ПЗУ. Большинство команд с непосредственной адресацией имеют длину в 2 байта. Условное обозначение операнда в мнемонике команды - #d8:

Примеры.

ADD A,#d8 ; Запись команды сложения ADD с непосредственной адресацией в общем виде.

ADD А,#3 ; Сложить содержимое аккумулятора АСС с числом 3,

; результат записать в АСС.

ORLA,#Oah ;Выполнить операцию поразрядного ИЛИ над содержимым АСС и

; шестнадцатеричным числом OAh. Результат записать в АСС.

Всего одна команда с непосредственной адресацией MOV DPTR,#d16 имеет трех­байтовый формат, поскольку выполняет загрузку данных в двухбайтовый регистр DPTR.

MOV DPTR,#3400h ; Загрузить в регистр-указатель число 3400h

В командах с регистровой адресацией один из операндов находится в одном из реги­стров общего назначения Rn = RO - R7 банка, номер которого определяется разрядами RSV.RSO регистра признаков PSW. Если команда производит действие над одним опе­рандом, то формат команды однобайтовый. Номер регистра Rn определяется тремя младшими битами байта кода операции.

Примеры.

MOV A,Rn ; Запись команды загрузки аккумулятора АСС из регистра Rn в общем виде.

MOV A.R5 ; Загрузить аккумулятор АСС операндом из регистра R5.

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

Примеры.

MOV ad.Rn ; Запись команды загрузки ячейки памяти с адресом ad из регистра Rn в общем

; виде.

MOV30h,R5 ; Загрузить ячейку памяти с адресом З0h операндом из регистра R5.
MOV R7,#06 ; Загрузить в регистр R7 число 6.

Команды с прямой адресацией имеют длину 2 байта. Первый байт предназначен для кода команды, второй байт содержит адрес ячейки резидентной памяти данных, где хранится операнд. Так как МК с ядром MCS-51 имеют адресное пространство внутрен­ней памяти данных 00h - 0FFh, то в использовании двухбайтового формата адреса нет необходимости. Условное обозначение адреса в мнемонике команды - ad.

Примеры.

ADD A,ad ; Запись команды ADD с прямой адресацией в общем виде.

ADD A,31 h ; Сложить содержимое аккумулятора АСС с содержимым ячейки

; резидентной памяти с адресом 31п. Результат поместить в АСС.

MOV add,ads ; Переслать содержимое ячейки памяти с адресом ads в ячейку

; памяти с адресом add. Например: MOV 10h,21 h.

Команды с косвенной адресацией имеют длину 1 байт. В этом байте расположен код операции. Адрес операнда находится в регистре Ro или R1 текущего банка, если обмен или операция производится с внутренним ОЗУ данных. Обратите внимание, в качестве источника адреса операнда могут использоваться только регистры Ro и R1 (общее обо­значение Ri), но не могут использоваться регистры R2 - R7.

Примеры.

ADD A, @RO ;Сложить содержимое аккумулятора АСС с содержимым ячейки памяти,

; адрес которой находится в регистре RO.

DEC @R1 ;Уменьшить на 1 содержимое ячейки памяти, адрес которой находится

; в регистре R1.

Косвенная адресация используется также для обращения к внешней памяти данных. Однако адрес ячейки внешней памяти должен быть двухбайтовым (см. рис. 4.3). Поэтому при использовании в качестве регистра-указателя RO или R1 старший байт адреса должен быть предварительно загружен в порт Р2. При обращении к внешней памяти данных в качестве регистра-указателя может быть также использован двухбайтовый регистр DPTR. Тогда предварительное формирование старшего байта адреса в Р2 не требуется. .

Примеры.

MQVX A, @RO ; Переслать в АСС содержимое ячейки внешней памяти данных,

; старший байт адреса которой находится в Р2, младший байт-

; врегистре RO текущего регистрового банка.

MOVXA,@DPTR ; Переслать в АСС содержимое ячейки внешней памяти данных,

; старший и младший байты адреса которой находятся в двух-

; байтовом регистре DPTR.

 

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

 

Примеры.

MOVC A, ©A+DPTR ; Переслать в АСС содержимое ячейки памяти программ, адрес

;которой вычисляется сложением двухбайтового значения
;регистра-указателя DPTR с однобайтовым беззнаковым

;операндом из аккумулятора. Эту же операцию можно ,

;интерпретировать, как чтение элемента с номером i, который
;задан в аккумуляторе, из таблицы с начальным адресом, который
; хранится в DPTR.

MOVCA,@A+PC ; Переслать в АСС содержимое ячейки из области памяти

; программ, адрес которой равен текущему значению счетчика

; команд PC плюс значение операнда в аккумуляторе.

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

Если условие, заданное типом используемой команды условного перехода, выполня­ется, то адрес следующей команды центральный процессор вычисляет путем сложения текущего адреса с кодом смещения. Если условие не выполняется, то МК переходит к выполнению следующей команды.

При написании программ нет необходимости вычислять абсолютные коды смещения
для команд условного перехода. Достаточно указать лишь метку, численное значение
кода смещения вычислит программа Ассемблер.

Примеры.

JZ rel ; Перейти по метке rel, если значение аккумулятора АСС равно 0.

DJNZ ad,rel ; Вычесть 1 из содержимого ячейки памяти с адресом ad и перейти

; по метке, если в ячейке не 0.