Александр Микушин - Занимательно о микроконтроллерах стр 28.

Шрифт
Фон

MOV 15, 25 ;Скопировать содержимое 25-ой ячейки в 15-ю ячейку

Таблицы символов (кодов), записанные в ПЗУ программы, могут быть скопированы в аккумулятор с помощью команд передачи данных с косвенной адресацией, например:

MOVC A, @A+DPT ;Скопировать символ в аккумулятор

Ячейка адресного пространства 64-килобайтного внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр-указатель данных DPTR, например:

MOVX A, @DPTR ;Скопировать число из внешней ячейки памяти с адресом, хранящимся в DPTR, в аккумулятор

Содержимое аккумулятора может быть обменено с содержимым рабочих регистров выбранного банка, например:

ХСН A, R0.

Битовые команды

Каждый бит из битового пространства внутренней памяти может быть установлен в 1, сброшен в 0 или инвертирован.

Эти операции можно выполнить при помощи следующих команд:

- установить бит (записать логическую единицу) - SETB;

- сбросить бит (записать логический ноль) - CLR;

- проинвертировать значение бита (изменить на противоположное) - CPL;

- записать бит во флаг переноса или считать из флага переноса - MOV.

По значениям бита могут быть реализованы переходы:

- если бит установлен (содержит логическую 1) - JB;

- если бит не установлен (содержит логический 0) - JNB;

- переход, если бит установлен со сбросом этого бита после выполнения команды (запись в этот бит 0) - JBC.

Между любым битом из битового пространства внутренней памяти и флагом переноса могут быть произведены логические операции "И" или "ИЛИ".

- "И" - ANL

- "ИЛИ" - ORL

Команды ветвления и передачи управления

Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-51 доступны следующие команды:

- безусловный переход: LJMP, AJMP, SJMP;

- вызов и возврат из подпрограммы: LCALL, ACALL, RET, RETI;

- переход в зависимости от результата проверки содержимого аккумулятора: JZ, JNZ, CJNE, JMP;

- переход в зависимости от значения флага переноса С: JC, JNC;

- переход в зависимости от значения любого бита в битовом пространстве: JB, JNB, JBC.

Команды 16-разрядных безусловных переходов и вызовов подпрограмм позволяют осуществить переход в любую точку адресного пространства памяти программ объемом до 64 Кбайт. Примеры команд:

LJMP Metka ;Переход к команде, расположенной по адресу обозначенному меткой 'Metka'

LCALL Podprogramma ;Вызов подпрограммы по адресу, обозначенному меткой 'Podprogramma'

Команды II-разрядных переходов и вызовов подпрограмм позволяют сократить объем программы, но при этом обеспечивают переходы только внутри сегмента программной памяти размером 2 Кбайт. Эти команды принципиально могут приводить к необнаруживаемым транслятором ошибкам, когда программный модуль размещается на двух соседних двух килобайтовых сегментах памяти.

AJMP Metka ;Переход к команде, расположенной по адресу обозначенному меткой 'Metka'

ACALL Podprogramma ;Вызов подпрограммы по адресу, обозначенному меткой 'Podprogramma'

В системе команд микроконтроллеров семейства MCS-51 имеются команды условных и безусловных переходов относительно начального адреса следующей команды в пределах от (PC)-127 до (PC)+127. Примеры команд:

SJMP Metka ;Переход к команде, расположенной по адресу, обозначенному меткой 'Metka'

JB P3.5, TstNxtUsl ;Если на выводе 6 порта РЗ нулевой потенциал,

ACALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой 'Podprogramma'

CJNE A, #5, TstNxtUsl ;Если в аккумуляторе содержится число 5,

ACALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой 'Podprogramma'

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

MOV А, 34 ;Если в переменной, хранящейся в ячейке внутренней

JNB ACC_7, TstEQ5 ; памяти с адресом 34, число меньше нуля,

CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой 'Podprogramma'

Александр Микушин - Занимательно о микроконтроллерах

Косвенный переход JMP @A+DPTR в системе команд микроконтроллеров семейства MCS-51 обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентную оператору case в языке программирования Pascal, но намного быстрее (за два машинных цикла). Использование в этой команде указателя данных DPTR позволяет размещать таблицу переходов в любом месте памяти программ. Пример реализации команды выбора варианта:

Александр Микушин - Занимательно о микроконтроллерах

Способы адресации операндов

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

Неявная адресация. При неявной адресации регистр-источник или регистр-приемник подразумевается в самом коде операции. Например:

03 RR А ;Сдвинуть содержимое аккумулятора вправо

D4 DA А ;Произвести десятичную коррекцию результата суммирования

Е8 MOV A, R0 ;В первом операнде использована неявная адресация, а во втором - регистровая

Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров, а также для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR и к флагу переноса С. Номер регистра записывается в трех младших битах команды. Например:

F8 MOV R0,А ;в первом операнде использована регистровая адресация, а во втором - неявная

Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (адреса 0:127) и к регистрам специального назначения (адреса 128…256). Адрес ячейки памяти помещается во второй байт команды. Например:

Е520 MOV A,20h ;во втором операнде использована прямая байтовая адресация, а в первом - неявная

8D15 MOV 15h,R6 ;в первом операнде использована прямая байтовая адресация, а во втором - регистровая

Прямая битовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20Н-2FH, и к отдельно адресуемым битам регистров специального назначения. Например:

D220 SETB 20h ;использована прямая битовая адресация

С215 CLR 15H ;использована прямая битовая адресация

Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей используются регистры R0, R1 выбранного банка регистров. Например:

Е6 MOV A,@R0 ;B первом операнде использована неявная адресация, а во втором - косвенно-регистровая

F7 MOV @R1,A ;B первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров-указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2.

Е2 MOVX A,@R0 ;B первом операнде использована неявная адресация, а во втором - косвенно-регистровая

F3 MOVX @R1,A ;B первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Если в качестве регистра-указателя используется 16-разрядный указатель данных (DPTR), то можно выбрать любую ячейку внешней памяти данных объемом до 64 Кбайт. (В некоторых моделях микроконтроллеров семейства MSC-51 таким образом можно обращаться к внутренней памяти данных объемом более 256 байт).

Е0 MOVX A,DPTR ;B первом операнде использована неявная адресация, а во втором - косвенно-регистровая

F0 MOVX DPTR,A ;B первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке