Автор работы: Пользователь скрыл имя, 11 Апреля 2011 в 12:22, реферат
В настоящее время среди всех 8-разрядных микроконтроллеров - семейство MCS-51 является несомненным чемпионом по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии n-МОП.
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’
Как видно из
приведённых примеров, команды переходов
этого микроконтроллера позволяет
реализовать намного более
Косвенный переход JMP @A+DPTR в системе команд микроконтроллеров семейства MCS-51 обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентную оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла). Использование в этой команде указателя данных DPTR позволяет размещать таблицу переходов в любом месте памяти программ. Пример реализации команды выбора варианта:
BeginOpCase: ;Начало
команды выбора вариантов------
MOV DPTR, #JMP_TBL ;Задать
начальный адрес таблицы
MOV A, 33
;В этой ячейке хранится
CLR C
;Осуществить арифметический
RLC A
;(умножить на 2) т.к. команды переходов
занимают два байта
JMP @A+DPTR
;Перейти к выполнению
JMP_TBL:
;начало таблицы переходов по
содержимому переменной в
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