- •Логічна організація однокристалевих мікроконтролерів сімейства кр1816ве51.
- •P37 – rd – вихід сигналу зчитування із зовнішньої пам'яті даних;
- •3 Архітектура мікроконтроллера Збільшена структурна схема мк показана на рис.2, а модель для програміста на рис.3.
- •Режим 1 роботи т/с
- •Режим 2 роботи т/с
- •Режим 3 роботи т/с
- •Блок послідовного інтерфейсу переривань
- •4 Системи команд
- •5 Приклади програмування
- •5.3.2 Обчислення квадратного корня
4 Системи команд
Система команд МК містить 111 команд, що мають довжину 1, 2 або 3 байта і виконуються за один, два або чотири (множення або ділення) машинних цикла. При задаючій частоті fr=12 МГц продовжуваність циклу складає 1 мкс.
На рис. 10 наведено 13 форматів команд МК. Перший байт містить код операції (КОП), другий та третій – адреси операндів або безпосередні операнди.
Система команд наведена в табл. 2. В таблиці на рис. 10 використовуються позначення:
#d – безпосередній операнд (8-розрядне двійкове число);
#d16 – безпосередній операнд (16-розрядне двійкове число);
ad – прямо адресуєма 8-розрядна адреса комірки РПД або регістрів спеціальних функцій (можуть зустрітися abs-адреса отримувача і add-адреса джерела);
ad11, ad16 – відповідно 11- та 16-розрядна адреса;
bit(у графі “Пояснення” може зустрічатись позначення b) – адреса бітів;
re1 – 8-розрядне зміщення зі знаком;
Rn – регістр із номером n(0-7);
@Ri – операнд, косвенно адресуємий через Ri при і=0,1 (комірки РПД або зовнішньої пам'яті даних);
(X) – уміст елемента Х;
((X)) – уміст за адресою, що міститься в елементі Х;
(X)[15-8] – група розрядів елемента Х;
Операції:
+ додавання;
- віднімання;
* множення;
/ ділення;
OR логічне додавання (АБО);
AND логічне множення (І);
XOR “ВИКЛЮЧАЮЧЕ АБО”;
/X інверсія X.
В кодах команд через r, i, позначені двійкові розряди номера регістра, a[j] – розряди адреси, A[j] – розряди акумулятора.
В першій колонці таблиці 2.2 наведено мнемоніка команди й час її виконання в числі машинних циклів. В другій колонці наведено код операції і номер формату (рис. 2.10), який має відповідна команда. В колонці “Пояснення” під ВПД розуміється зовнішня пам'ять даних об'ємом 256 байт, а під розширеною ВПД – пам'ять об'ємом до 64 Кбайт.
Система команд мікроконтролера КМ1816ВЕ51 Таблиця 2
Мнемоніка Число циклів |
Код операції Формат № |
Поясненя |
Команди передачі даних | ||
MOV A, Rn Циклів 1 |
11101rrr Формат 1 |
Пересилка в акумулятор із регістру; (А)(Rn) |
MOV A, ad Циклів 1 |
11100101 Формат 3 |
Пересилка в акумулятор прямоадресуємого байта;(A)(ad) |
MOV A, @Ri Циклів 1 |
1110011i Формат 1 |
Пересилка в акумулятор байта з РДП;(A)((Ri)) |
MOV A, #d Циклів 1 |
01110100 Формат 2 |
Завантаження в акумулятор константи; (A)#d |
MOV Rn, A Циклів 1 |
11111rrr Формат 1 |
Пересилка в регістр з акумулятора; (A)#d |
MOV Rn, ad Циклів 2 |
10101rrr Формат 3 |
Пересилка в регістр прямоадресуємого байта; (Rn)(ad) |
MOV Rn, #d Циклів 1 |
01111r Формат 2 |
Завантаження в регістр константи; (Rn)#d |
MOV ad, A Циклів 1 |
11110101 Формат 3 |
Пересилка за прямою адресою акумулятора; (ad)(A) |
MOV ad, Rn Циклів 2 |
10001rrr Формат 3 |
Пересилка за прямою адресою регістра; (ad)(Rn) |
MOV add, ads Циклів 2 |
10000101 Формат 9 |
Пересилка прямоадресуємого байта за прямою адресою; (add)(ads) |
MOV ad, @Ri Циклів 2 |
1000011i Формат 3 |
Пересилка байта із РДП за прямою адресою; (ad)((Ri)) |
MOV ad, #d Циклів 2 |
01110101 Формат 7 |
Пересилка за прямою адресою константи; (ad)#d |
MOV @Ri, A Циклів 1 |
1111011i Формат 1 |
Пересилка в РПД з акумулятора; ((Ri))(A) |
MOV @Ri, ad Циклів 2 |
1010011i Формат 3 |
Пересилка в РПД прямоадресуємого байта; ((Ri))(ad) |
MOV @Ri, #d Циклів 1 |
0111011i Формат 2 |
Пересилка в РПД константи; ((Ri))#d |
MOV DPTR, #d16 Циклів 2 |
10010000 Формат 13 |
Завантаження покажчика даних; (DPTR)#d16 |
Продовження
Таблиці 2 Циклів 2 |
10010011 Формат 1 |
Пересилка в акумулятор байта з пам'яті програм; (A)((A))+(DPTR) |
MOV A, @A+PC Циклів 2 |
10000011 Формат 1 |
Пересилка в акумулятор байта з пам'яті програм; (PC)(PC)+1; (A)((A)+(PC)) |
MOVX A, @Ri Циклів 2 |
1110001i Формат 1 |
Пересилка в акумулятор байта з ВПД;(A)((Ri)) |
MOVX A, @DPTR Циклів 2 |
11100000 Формат 1 |
Пересилка в акумулятор байта з розширеної ВПД; (A)((DPTR)) |
MOVX @Ri, A Циклів 2 |
1111001i Формат 1 |
Пересилка в ВПД з акумулятора; ((Ri))(A) |
MOVX @DPTR, A Циклів 2 |
11110000 Формат 1 |
Пересилка в розширену ВПД з акумулятора; ((DPTR))(A) |
PUSH ad Циклів 2 |
11000000 Формат 3 |
Завантаження в стек; (SP)(SP)+1; ((SP))(ad) |
POP ad Циклів 2 |
11010000 Формат 3 |
Витягування зі стека; (ad)((SP)); (SP)(SP)-1 |
XCH A,Rn Циклів 1 |
11001rrr Формат 1 |
Обмін акумулятора з регістром; (A)(Rn) |
XCH A, ad Циклів 1 |
11000101 Формат 3 |
Обмін акумулятора з прямоадресуємим байтом; (A)ad |
XCH A, @Ri Циклів 1 |
1100011i Формат 1 |
Обмін акумулятора з байтом з РПД; (A)((Ri)) |
XCHD A, @Ri Циклів 1 |
1101011i Формат 1 |
Обмін молодшої тетради акумулятора з молодшою тетрадою байта РПД; (A[3-0])((Ri[3-0])) |
Арифметичні команди | ||
ADD A, Rn Циклів 1 |
00101rrr Формат 1 |
Складання акумулятора з регістром; (A)(A)+(Rn) |
ADD A, ad Циклів 1 |
00100101 Формат 3 |
Складання акумулятора з прямоадресуємим байтом; (A)(A)+(ad) |
ADD A, @Ri Циклів 1 |
0010011i Формат 1 |
Складання акумулятора з байтом з РПД; (A)(A)+((Ri)) |
ADD A, #d Циклів 1 |
00100100 Формат 2 |
Складання акумулятора з константою; (A)(A)+#d |
ADDC A, Rn Циклів 1 |
00111rrr Формат 1 |
Складання акумулятора з байтом з РПД; (A)(A)+(Rn)+(C) |
ADDC A, ad Циклів 1 |
00110101 Формат 3 |
Складання акумулятора зпрямоадресуємим байтом та переносом; (A)(A)+(ad)+(C) |
ADDC A, @Ri Циклів 1 |
0011011i Формат 1 |
Складання акумулятора з байтом з РПД і переносом; (A)(A)+((Ri))+(C) |
ADDC A, #d Циклів 1 |
00110100 Формат 2 |
Складання акумулятора з константою й переносом; (A)(A)+#d+C |
DA A Циклів 1 |
11010100 Формат 1 |
Десяткова корекція акумулятора: якщо ((A[3-0])>9 або (AC)=1), то (A[3-0])(A[3-0])+6; якщо ((A[7-4])>9 або (C)=1), то (A[7-4])(A[7-4])+6 |
SUBB A, Rn Циклів 1 |
10011rrr Формат 1 |
Віднімання з акумулятора регістра й запозичення; (A)(A)-(Rn)-(C) |
Продовження
Таблиці 2 Циклів 1 |
10010101 Формат 3 |
Віднімання від акумулятора прямоадресуємого байта й запозичення; (A)(A)-(ad)-(C) |
SUBB A, @Ri Циклів 1 |
1001011i Формат 1 |
Віднімання від акумулятора байта РПД і запозичення; (A)(A)-((Ri))-(C) |
SUBB A, #d Циклів 1 |
10010100 Формат 2 |
Віднімання з акумулятора константи та запозичення; (A)(A)-#d-(C) |
INC A Циклів 1 |
00000100 Формат 1 |
Інкремент акумулятора; (A)(A)+1 |
INC Rn Циклів 1 |
00001rrr Формат 1 |
Інкремент регістра; (Rn)(Rn)+1 |
INC ad Циклів 1 |
00000101 Формат 3 |
Інкремент прямоадресуємого байта; (ad)(ad)+1 |
INC @Ri Циклів 1 |
0000011i Формат 1 |
Інкремент байта в РПД; ((Ri))((Ri))+1 |
INC DPTR Циклів 2 |
10100011 Формат 1 |
Інкремент покажчика даних; (DPTR)(DPTR)+1 |
DEC A Циклів 1 |
0010100 Формат 1 |
Декремент акумулятора; (A)(A)-1 |
DEC Rn Циклів 1 |
00011rrr Формат 1 |
Декремент регістра; (Rn)(Rn)-1 |
DEC ad Циклів 1 |
00010101 Формат 3 |
Декремент прямоадресуємого байта; (ad)(ad)-1 |
DEC @Ri Циклів 1 |
0001011i Формат 1 |
Декремент байта в РПД; ((Ri))((Ri))-1 |
MUL AB Циклів 4 |
10100100 Формат 1 |
Множення акумулятора на регістр В; (B).(A)(A)*(B) |
DIV AB Циклів 4 |
10000100 Формат 1 |
Ділення акумулятора на регістр В; (A).(B)(A)/(B) |
Логічні команди | ||
ANL A, Rn Циклів 1 |
01011rrr Формат 1 |
Логічне І акумулятора та регістра; (A)(A) AND (Rn) |
ANL A, ad Циклів 1 |
01010101 Формат 3 |
Логічне І акумулятора та прямоадресуємого байта; (A)(A) AND (ad) |
ANL A, @Ri Циклів 1 |
0101011i Формат 1 |
Логічне І акумулятора й байта з РПД; (A)(A) AND ((Ri)) |
ANL A, #d Циклів 1 |
01010100 Формат 2 |
Логічне І акумулятора й константи; (A)(A) AND #d |
ANL ad, A Циклів 1 |
01010010 Формат 3 |
Логічне І прямоадресуємого байта й акумулятора; (ad)(ad) AND (A) |
ANL ad, #d Циклів 2 |
01010011 Формат 7 |
Логічне І прямоадресуємого байта й константи; (ad)(ad) AND #d |
ORL A, Rn Циклів 1 |
01001rrr Формат 1 |
Логічне АБО акумулятора й регістра; (A)(A) OR (Rn) |
ORL A, ad Циклів 1 |
01000101 Формат 3 |
Логічне АБО акумулятора і прямоадресуємого байта; (A)(A) OR (ad) |
ORL A, @Ri Циклів 1 |
0100011i Формат 1 |
Логічне АБО акумулятора й байта з РПД; (A)(A) OR ((Ri)) |
Продовження
Таблиці 2 Циклів 1 |
01000100 Формат 2 |
Логічне АБО акумулятора й константи; (A)(A) OR #d |
ORL ad, A Циклів 1 |
01000010 Формат 3 |
Логічне АБО прямоадресуємого байта й акумулятора; (ad)(ad) OR (A) |
ORL ad, #d Циклів 2 |
01000011 Формат 7 |
Логічне АБО прямоадресуємого байта й константи; (ad)(ad) OR #d |
XRL A, Rn Циклів 1 |
01101rrr Формат 1 |
Виключаюче АБО акумулятора та регістра; (A)(A) XOR (Rn) |
XRL A, ad Циклів 1 |
01100101 Формат 3 |
Виключаюче АБО акумулятора та прямоадресуємого байта; (A)(A) XOR (ad) |
XRL A, @Ri Циклів 1 |
0110011i Формат 1 |
Виключаюче АБО акумулятора й байта із РПД; (A)(A) XOR ((Ri)) |
XRL A, #d Циклів 1 |
01100100 Формат 2 |
Виключаюче АБО акумулятора й константи; (A)(A) XOR #d |
XRL ad, A Циклів 1 |
01100010 Формат 3 |
Виключаюче АБО прямоадресуємого байта й акумулятора; (ad)(ad) XOR |
XRL ad, #d Циклів 2 |
01100011 Формат 7 |
Виключаюче АБО прямоадресуємого байта й константи; (ad)(ad) XOR #d |
CLR A Циклів 1 |
11100100 Формат 1 |
Скид акумулятора; (А)0 |
CPL A Циклів 1 |
11110100 Формат 1 |
Інверсія акумулятора; (А)/(А) |
RL A Циклів 1 |
00100011 Формат 1 |
Зсув акумулятора вліво циклічний; (A[j+1])(A[j]) для j=0-6; (A[0])(A[7]) |
RLC A Циклів 1 |
00110011 Формат 1 |
Зсув акумулятора вліво через перенос; (A[j+1])(A[j]) для j=0-6; (A[0])(C), (C)(A[7]) |
RR A Циклів 1 |
00000011 Формат 1 |
Зсув акумулятора вправо циклічний; (A[j])(A[j+1]) для j=0-6; (A[7])(A[0]) |
RRC A Циклів 1 |
00010011 Формат 1 |
Зсув акумулятора вправо через перенос; (A[j])(A[j+1]) для j=0-6; (A[7])(C), (C)(A[0]) |
SWAP A Циклів 1 |
11000100 Формат 1 |
Обмін містами тетрад в акумуляторі; (A[0-3])(A[4-7]) |
Команди операцій з бітами | ||
CLR C Циклів 1 |
11000011 Формат 1 |
Обнуління переносу; (С)0 |
CLR bit Циклів 1 |
11000010 Формат 4 |
Обнуління біта; (b)0 |
CPL C Циклів 1 |
10110011 Формат 1 |
Інверсія переносу; (С)/(С) |
CPL bit Циклів 1 |
10110010 Формат 4 |
Інверсія біта; (b)/(b) |
SETB C Циклів 1 |
11010011 Формат 1 |
Установка переносу; (С)1 |
Продовження
Таблиці 2 Циклів 1 |
11010010 Формат 4 |
Установка біта; (b)1 |
ANL C, bit Циклів 2 |
10000010 Формат 4 |
Логічне І біта та переносу; (C)(C) AND (bit) |
ANL C, /bit Циклів 2 |
10110000 Формат 4 |
Логічне І інверсія біта й переносу; (С)(С) AND (/bit) |
ORL C, bit Циклів 2 |
01110010 Формат 4 |
Логічне АБО біта й переносу; (C)(C) OR (bit) |
ORL C, /bit Циклів 2 |
10100000 Формат 4 |
Логічне АБО інверсії біта й переносу; (С)(С) OR (/bit) |
MOV C, bit Циклів 2 |
10100010 Формат 4 |
Пересилка біта в перенос; (C)(bit) |
MOV bit, C Циклів 2 |
10010010 Формат 4 |
Пересилка переносу в біт; (bit)(C) |
Команди передачі керування | ||
LJMP ad16 Циклів 2 |
00000010 Формат 12 |
Довгий перехід у повному об'ємі пам'яті програм; (РС)ad16 |
AJMP ad11 Циклів 2 |
a[10]a[9] a[8]00001 Формат 6 |
Абсолютний перехід усередині сторінки в 2 Кбайт; (PC)(PC)+2; (PC[10-0])ad11 |
SJMP re1 Циклів 2 |
10000000 Формат 5 |
Короткий перехід усередині сторінки в 256 байт; (PC)(PC)+2; (PC)(PC)+re1 |
JMP @A+DPTR Циклів 2 |
01110011 Формат 1 |
Косвенний перехід; (PC)(A)+(DPTR) |
JZ re1 Циклів 2 |
01100000 Формат 5 |
Перехід, якщо акумулятор дорівнює нулю; (PC)(PC)+2; якщо (A)=0, то (PC)(PC)+re1 |
JNZ re1 Циклів 2 |
01110000 Формат 5 |
Перехід, якщо акумулятор не дорівнює нулю; (PC)(PC)+2; якщо (A)<>0, то (PC)(PC)+re1 |
JC re1 Циклів 2 |
01000000 Формат 5 |
Перехід, якщо перенос установлено; (PC)(PC)+2; якщо (C)=1, то (PC)(PC)+re1 |
JNC re1 Циклів 2 |
00110000 Формат 5 |
Перехід, якщо перенос установлено;(PC)(PC)+2; якщо (C)=0, то (PC)(PC)+re1 |
JB bit,re1 Циклів 2 |
00010000 Формат 11 |
Перехід, якщо біт установлено; (PC)(PC)+3; якщо (b)=1, то (PC)(PC)+re1 |
JNB bit, re1 Циклів 2 |
00010000 Формат 11 |
Перехід, якщо біт не встановлено; (PC)(PC)+3; якщо (b)=0, то (PC)(PC)+re1 |
JBC bit, re1 Циклів 2 |
11011rrr Формат 11 |
Перехід, якщо біт встановлено й обнуленя цього біта; (PC)(PC)+3; якщо (b)=1, то (PC)(PC)+re1; (b)0 |
DJNZ Rn, re1 Циклів 2 |
11010101 Формат 5 |
Декремент регістра й перехід, якщо не нуль; (PC)(PC)+2; (Rn)(Rn)-1; якщо (Rn)<>0, то (PC)(PC)+re1 |
DJNZ ad, re1 Циклів 2 |
11010101 Формат 8 |
Декремент прямоадресуємого байта й перехід, якщо не нуль; (PC)(PC)+2; (ad)(ad)-1; Якщо (ad)<>0, то (PC)(PC)+re1 |
Продовження
Таблиці 2 Циклів 2 |
10110101 Формат 8 |
Порівняння акумулятора зпрямоадресуємим байтом і перехід, якщо не дорівнює; (PC)(PC)+3; якщо (ad)<(A), то (PC)(PC)+re1, (C)0; якщо (ad)>(A), то (PC)(PC)+re1,(C)1 |
CJNE A, #d, re1 Циклів 2 |
10110100 Формат 10 |
(PC)(PC)+3; якщо #d<(Rn), то (PC)(PC)+re1, (C)0; якщо #d>(Rn), то (PC)(PC)+re1, (C)1 |
CJNE Rn, #d, re1 Циклів 2 |
10111rrr Формат 10 |
Порівняння байта з РПД з константою й перехід, якщо не дорівнює; (PC)(PC)+3; якщо #d<((Ri)), то (PC)(PC)+re1, (C)0; якщо #d>((Ri)), то (PC)(PC)+re1, (C)1 |
LCAL ad16 Циклів 2 |
00010010 Формат 12 |
Довгий виклик підпрограми; (PC)(PC)+3, (SP)(SP)+1, ((SP))(PC[7-0]),(SP)(SP)+1, ((SP))(PC[15-8]),(PC)ad16 |
ACALL ad11 Циклів 2 |
a[10]a[9] a[8]10001 Формат 6 |
Абсолютний виклик підпрограми в межах сторінки в 2 Кбайт; (PC)(PC)+2, (SP)(SP)+1, ((SP))(PC[7-0]), (SP)(SP)+1, ((SP))(PC[15-8]), (PC)[10-0]ad11 |
RET Циклів 2 |
00100010 Формат 1 |
Поверненя з підпрограми; (PC[15-8])((SP)), (SP)(SP)-1, (PC[7-0])((SP)), (SP)(SP)-1 |
RETI Циклів 2 |
00110010 Формат 1 |
Повернення з переривання; (PC[15-8])((SP)), (SP)(SP)-1, (PC[7-0])((SP)), (SP)(SP)-1 |
NOP Циклів 1 |
00000000 Формат 1 |
Немає операції; (PC)(PC)-1 |
В таблиці 3 наведено команди, що впливають на установку прапорців PSW (х – прапорець дорівнює 0 або 1).
Нижче наводиться опис особливостей деяких команд.
Арифметичні команди
При операції MUL помножаються цілі беззнакові (уміст акумулятора на вміст регістра В). Старший байт добутку поміщається в регістр У, молодший в акумулятор. Прапорець переповнення встановлюється, якщо результат перевищує 255 (0FFh).
Таблиця 3
Мнемоніка |
Прапорці |
Мнемоніка |
Прапорці | ||||
C |
OV |
AC |
C |
OV |
AC | ||
ADD |
x |
x |
x |
CLR C |
0 |
|
|
ADDC |
x |
x |
x |
CPL C |
x |
|
|
SUBB |
x |
x |
x |
ANL C, bit |
x |
|
|
MUL |
0 |
x |
|
ANL C, /bit |
x |
|
|
Таблиця 3.
Продовження
|
0 |
x |
|
ORL C, bit |
x |
|
|
DA |
x |
|
|
ORL C, /bit |
x |
|
|
RRC |
x |
|
|
MOV C, bit |
x |
|
|
RLC |
x |
|
|
CJNE |
x |
|
|
SETB C |
1 |
|
|
|
|
|
|
Команди ділення DIV ділить цілі беззнакові числа. Ділене розміщається в акумуляторі, дільник – в регістрі В. ціла частина частки розміщується в А, а остача – в регістрі В. прапорці С та OV обнуляються. Виключення становить лише той випадок, коли дільник дорівнює нулю, тут прапорець переповнення встановлюється.
При виконанні команд додавання (ADD) або додавання з переносом (ADDC) встановлюються прапорці С та АС (при виникненні переносів відповідно із розрядів 7 і 3). Пропорець С при додаванні чисел без знаку вказує на появу переповнення. Біт OV встановлюється, якщо є перенос із біта 6 і немає переносу з біта 7. При додаванні чисел із знаком біт OV вказує на від'ємну суму при додаванні додатних операндів або на додатну суму двох від'ємних доданків.
В командах “віднімання з запозиченням” прапорці С та АС установлюються, якщо необхідне запозичення для бітів 7 та 3. Біт OV при відніманні чисел зі знаком свідчить про від'ємний результат при відніманні від'ємного числа з додатного або про додатній результат при відніманні додатного числа з від'ємного.
Команда десяткової корекції DA корегує в акумуляторі результат додавання (командами ADD та ADDC) двох змінних, що представлені у двійково-десятичному форматі. Мета операції отримати дві двійково-десяткові цифри. Команда виконує двійково-десяткове перетворення шляхом складання вмісту А з числами 06, 60h, 66h у відповідності від висхідного стану А та прапорців С, АС. Команда DA використовується лише після операції додавання і не може використовуватись, наприклад, після операції віднімання, а також виконувати просте перетворення шістнадцятирічного числа у двійково-десяткове.
Команди передачі даних
Команда завантаження покажчика даних завантажує DPTR 2-байтною константою з 2-го та 3-го байтів команди. При цьому другий байт команди пересилається в DPH, третій – в DPL.
Зчитування даних із пам'яті програм виконується командами MOVC. Адреса зчитуємого байта обчислюється як сума вмісту А (число без знака) і одного з двох 16-розрядних регістрів (DPTR або РС).
Мається два типа команд MOVX обміну із зовнішньою пам'яттю даних. Перший з них забезпечує доступ до 256 коміркам ВПД, при чому адреса розміщується в регістрах R1 або R0 поточного байта регістрів. Другий забезпечує доступ до розширеної ВПД, котра може містити до 64 Кбайт пам'яті. Адреса в цьому випадку розміщується в регістрі-покажчику даних DPTR.
Логічні команди
Ці команди виконують операції І, АБО, ВИКЛЮЧАЮЧЕ АБО і записують результат у байт призначення. Є також команди циклічного й арифметичного зсуву вправо та вліво.
Команди операцій з бітами
Працюють із бітом переносу і будь-якими іншими бітами, що дозволяють пряму адресацію. Наприклад, якщо С=0, розряд порту Р1.0=0, то виконання команди ORL С, /Р1.0 приведе до встановлення біта С.
Команди передачі керування
Указана група містить команди умовного та безумовного переходу, виклику та повернення з програм. До команд безумовного переходу відносяться:
-- довгий перехід LGMP, який дозволяє виконувати передачу керування в межах усієї пам'яті програм (до 64 Кбайт). Команда містить 3 байта. Для економії пам'яті, якщо це можливо, використовують наведені нижче команди, що мають меншу довжину;
-- абсолютний перехід AJMP для переходу в межах сторінки розміром 2048 байт, для чого в коді команди задаються 11 молодших розрядів адреси;
-- короткий перехід SJMP у межах –128/+127 байт відносно адреси команди, що слідує за SJMP. Для такого переходу в другому байті команди задається зміщення re1 – ціле число зі знаком. Такий само метод адресації використовують і всі команди умовного переходу.
-- косвенний перехід JMP @A+DPTR дозволяє виконати перехід за адресою, спочатку невідомою й обчислюємою програмою. Приклад використання цієї команди наведено нижче.
Команди умовних переходів дозволяють виконувати розгалудження за наступними умовами: уміст А дорівнює нулю (JZ), не дорівнює нулю (JNZ); перенос дорівнює нулю (JNC), не дорівнює нулю (JC); адресуємий біт дорівнює нулю (JNB), не дорівнює нулю (JB, JBC).
Команди DJNZ виконує декремент указаної комірки і виконує розгалудження, якщо результат не дорівнює нулю. У протилежному випадку виконується перехід до наступної команди. Адреса переходу визначається додаванням вмісту лічильника команд, збільшеного на 2, із зміщенням. Цю команду зручно використовувати для організації циклів.
Команда “порівняння й перехід, якщо не дорівнює” CJNE порівнює значення двох операндів і виконує розгалудження, якщо вони не рівні. Обидва операнди є цілими беззнаковими. В залежності від співвідношення операндів установлюється (обнуляється) біт С (табл. 2).
Для звернення до підпрограми використовуються команди ACALL (абсолютний виклик) і LCALL (довгий виклик). Ці команди на відміну від команд переходу AJMP, LJMP зберігають у стеку адресу звороту в основну програму. Для повернення з підпрограми використовується команда RET, після виконання якої програма продовжує виконання з команди, що йде за LCALL або ACALL.
Для повернення з підпрограми обробки переривань використовується команда RETI. Її відмінність від команди RET у тому, що вона дозволяє переривання обслуженого рівня. Якщо при виконанні команди RETI знайдено переривання з таким само чи меншим рівнем пріоритету, одна команда основної програми виконується до обробки такого переривання. Це властивість системи переривань можна використовувати для організації покрокового виконання програми, зручного при відладці контролерів.