Состав семейства MCS-51

Автор работы: Пользователь скрыл имя, 11 Апреля 2011 в 12:22, реферат

Краткое описание

В настоящее время среди всех 8-разрядных микроконтроллеров - семейство MCS-51 является несомненным чемпионом по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии n-МОП.

Содержимое работы - 1 файл

MSC51.doc

— 589.00 Кб (Скачать файл)

  CJNE A,#5,TstLT5     ;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число 5,

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

TstLT5 ;------------------------------------------------------------------------------------------------------

  JNС TstGE5           ;Если в переменной, хранящейся  в ячейке внутренней памяти 34 занесено число, меньшее 5,

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

TstGE5 ;---------------------------------------------------------------------------------

  JC TstNxtUsl         ;Если в переменной, хранящейся  в ячейке внутренней памяти 34 занесено число, большее или  равное 5,

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

TstGT5 ;------------------------------------------------------------------------------------------------------

  CJNE A,#6,$+3        ;Если в переменной, хранящейся  в ячейке внутренней памяти 34

  JC TstNxtUsl         ;занесено число, большее 5,

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

;---------------------------------------------------------------------------------

  JNC TstNxtUsl        ;Если в переменной, хранящейся  в ячейке внутренней памяти 34 занесено число, меньшее или  равное 5,

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

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

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

BeginOpCase: ;Начало  команды выбора вариантов------------------------------------------------------

  MOV DPTR, #JMP_TBL ;Задать  начальный адрес таблицы переходов

  MOV A, 33          ;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу 

  CLR C              ;Осуществить арифметический сдвиг  аккумулятора вправо

  RLC A              ;(умножить на 2) т.к. команды переходов  занимают два байта 

  JMP @A+DPTR        ;Перейти к выполнению заданного в 33 ячейке кода

 

JMP_TBL:    ;начало таблицы переходов по  содержимому переменной в ячейке  памяти 33-----------------

     JMP Case0       ;Перейти к  выполнению кода по числу 0

     JMP Case1       ;Перейти к  выполнению кода по числу 1

     JMP EndCase     ;Это число в ячейке 33 в список разрешённых не входит

     JMP EndCase     ;Это число в  ячейке 33 в список разрешённых  не входит

     JMP Case4       ;Перейти к  выполнению кода по числу 4

EndCase:;------------------------------------------------------------------------------------------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Косвенно-регистровая  адресация по сумме базового и  индексного регистра (содержимое аккумулятора А) упрощает просмотр таблиц, записанных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или РС и содержимого А, например:

83    MOV A, @A+PC ;В первом операнде использована  неявная адресация, а во втором - косвенно-регистровая

93    MOV A, @A+DPTR ;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая. 

Непосредственная  адресация позволяет выбрать  из адресного пространства памяти программ константы, явно указанные в команде, например:

7414    MOV A, #14h      ;В первом операнде  использована неявная адресация, а во втором - непосредственная

902048  MOV DPTR, #2048h ;В первом операнде использована  неявная адресация, а во втором  – непосредственная 

Описание  машинных команд 

ACALL <addr 11> - абсолютный  вызов подпрограммы. 

Описание: вызывает подпрограмму, размещенную по указанному адресу <addr 11>. Команда увеличивает содержимое счетчика команд на 2 и затем помещает полученный результат в стек (младший байт первым). После это содержимое указателя стека SP увеличивается на 2. Т.к. в команде используется 11-разрядный адрес, полученный соединением пяти старших бит счетчика команд и второго байта команды, то подпрограмма должна начинаться в пределах той же 2K-байтной страницы. Команда не воздействует на флаги. 

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(SP) = (SP) + 1

((SP)) = (PC7-0)

(SP) = (SP) + 1

((SP)) = (PC15-8)

(PC10-0) = адрес  подпрограммы (метки)

Машинный код:

a10 a9 a8  1  0  0  0  1

a7  a6 a5 a4 a3 a2 a1 a0 

Пример:

адрес   команда   исходный текст

1000    7111      ACALL 311h 

Действие команды:

до команды    после команды

PC=1000       PC=0311

*SP=35        *SP=1002 

ADD A, <байт-источник> - сложение. 

Описание: складывает содержимое аккумулятора А с содержимым байта- источника. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. 

Для команды  сложения разрешены следующие режимы адресации: 

1) Первый операнд  - неявная, второй операнд - регистровая; 

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 0 1 0 1 r r r 

Пример:

адрес   команда   исходный текст

0000    2F        ADD A, R7 

Действие команды:

до команды    после команды

PC=0000       PC=0001

A=35          A=7A

R7=46         R7=46

C=0           C=0 

2) Первый операнд  - неявная, второй операнд - косвенно-регистровая; 

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + ((Ri)) , i=0,1

Машинный код:

0 0 1 0 0 1 1 i 

Пример:

адрес   команда   исходный текст

0010    26        ADD A, @R0 

Действие команды:

до команды    после команды

PC=0010       PC=0011

R0=15         R0=15

A=95          A=16

*15=81       *15=81

C=0           C=1 

3) Первый операнд  - неявная, второй операнд - прямая; 

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (A) + (direct)

Машинный код:

0 0 1 0 0 1 0 1

d d d d d d d d 

Пример:

адрес   команда   исходный текст

0012    2564      ADD A, 100 

Действие команды:

до команды    после команды

PC=0012       PC=0014

A=95          A=96

*100=01       *100=81

Информация о работе Состав семейства MCS-51