Микроконтролери MCS-51: софтуерен модел, структура, команди. Микроконтролери MCS-51

Командната система OMEVM предоставя големи възможности за обработка на данни, осигурява изпълнението на логически, аритметични операции, както и контрол в реално време. Внедрена побитова, тетрадна (4 бита), байтова (8 бита) и 16-битова обработка на данни.

Семейство LSI MCS-51 - 8-bit OMEVM: ROM, RAM, регистри със специално предназначение, ALU и външни шини имат байтова организация. Двубайтовите данни се използват само от регистъра на указателя (DPTR) и програмния брояч (PC). Трябва да се отбележи, че регистърът на указателя на данни може да се използва като двубайтов регистър DPTR или като два еднобайтови регистъра със специално предназначение DPH и DPL. Програмният брояч винаги се използва като двубайтов регистър.

Наборът от команди OMEVM има 42 командни мнемоники за указване на 33 функции на тази система.

Синтаксисът на повечето инструкции на асемблерния език се състои от мнемонична функция, последвана от операнди, указващи методи за адресиране и типове данни. Различните типове данни или режими на адресиране се определят от зададените операнди, а не от промени в мнемоничната нотация.

Командната система може условно да се раздели на пет групи:

Има следните типове адресиране на операнд източник:

  • Индиректно регистрово адресиране чрез сбор от базови и индексни регистри

Таблица с обозначения и символи, използвани в командната система

Обозначение, символ Предназначение
А Батерия
Rn Регистри на текущо избраната регистърна банка
r Номерът на заредения регистър, посочен в командата
директен Директно адресируем 8-битов вътрешен адрес на местоположението на данните, който може да бъде вътрешно местоположение на RAM за данни (0-127) или SFR (128-255)
@rr Индиректно адресируемо 8-битово вътрешно RAM място за данни
данни8 8-битови незабавни данни, включени в CPC
данниH MSB (15-8) на незабавни 16-битови данни
данниL Ниски битове (7-0) на незабавни 16-битови данни
адрес11 11-битов адрес на дестинация
addrL Най-малко значимите битове от адреса на дестинацията
disp8 8-битов отместен байт със знак
малко Директно адресируем бит, чийто адрес съдържа CPC, разположен във вътрешната RAM памет или SFR
a15, a14...a0 Битове на адреса на местоназначението
(Х) Съдържанието на елемента X
((Х)) Съдържание на адреса, съхранен в елемент X
(X)[M] Разряд M елемент X

+
-
*
И
ИЛИ
XOR
Операции:
допълнения
изваждане
умножение
разделение
логическо умножение (операция И)
логическо добавяне (операция ИЛИ)
добавяне по модул 2 (XOR)
елемент X инверсия

Функционалната мнемоника е уникално свързана със специфични комбинации от методи за адресиране и типове данни. Общо 111 такива комбинации са възможни в командната система. Таблицата показва списък с команди, сортирани по азбучен ред.

Мнемоника функция Знамена
Екипът на ACALL Абсолютно извикване на подпрограма
Допълнение AC, C, OV
Допълнение с пренасяне AC, C, OV
Екип на AJMP Абсолютен преход
Логика "И"
Логическо "И" за променливи битове ° С
Сравнете и скочете, ако не е равно ° С
Екип CLR A Нулиране на батерията
Екип на CLR Нулиране на бит C, малко
CPL отбор А Инверсия на батерията
CPL екип Битова инверсия C, малко
Екип DA A Акумулаторна десетична корекция за добавяне AC, C
Екипът на DEC<байт> Намаляване
Отбор DIV AB дивизия C, OV
Екип DJNZ<байт>, <смещение> Намаляване и скок, ако е различно от нула
Екип I.N.C.<байт> Увеличаване
Екип INC DPTR Увеличение на показалеца на данни
Екипът J.B. , Прескачане, ако битът е зададен
Екип JBC , Разклонете, ако битът е зададен, и нулирайте този бит
Екипът J.C. Скачайте, ако е зададено носене
Команда JMP @A+DPTR Индиректен преход
Екип на JNB , Прескачане, ако битът не е зададен
Екип JNC Скок, ако не е зададен трансфер
Екип JNZ Прескачане, ако съдържанието на акумулатора е различно от нула
Отбор JZ Преминете, ако съдържанието на акумулатора е 0
Екип на LCALL дълъг разговор
Екип LJMP дълъг преход
Препращане на променлив байт
Изпращане на бит за данни ° С
Команда MOV DPTR,#data16 Заредете указател на данни с 16-битова константа
MOVC инструкция A,@A+( ) Преместване на байт от програмната памет
Изпращане на данни към външна памет (от външна памет).

ЛЕКЦИОНЕН ПЛАН

1. Въведение

2. Аритметични и логически инструкции

3. Команди за пренос на данни

4. Булеви операции

5. Инструкции за скок

1. Въведение

Командна система MCS-51поддържа единичен набор от инструкции, който е проектиран да изпълнява 8-битови алгоритми за управление на изпълнителни механизми. Възможно е да се използват бързи методи за адресиране на вътрешната RAM, извършване на битови операции върху малки структури от данни. Съществува разширена система за адресиране на еднобитови променливи като независим тип данни, което позволява използването на отделни битове в логически и контролни команди на булева алгебра.

Режими на адресиране : набор от инструкции MCS-51поддържа следните режими на адресиране. Директно адресиране: Операндът се определя от 8-битов адрес в инструкцията. Директното адресиране се използва само за долната половина на вътрешната памет за данни и регистрите SFR. индиректно адресиране: Инструкцията адресира регистъра, съдържащ адреса на операнда. Този тип адресиране се използва за външна и вътрешна RAM. Регистрите могат да се използват за указване на 8-битови адреси R0И R1избрана регистърна банка или указател на стека SP. За 16-битово адресиране се използва само регистърът на указателя на данни. ДПТР.

Инструкции за регистрация : регистри R0–R7текущата регистърна банка може да бъде адресирана чрез специфични инструкции, съдържащи 3-битово поле, указващо номера на регистъра в самата инструкция. В този случай в командата няма съответно поле за адрес. Операции с помощта на специални регистри: някои инструкции използват отделни регистри (например акумулаторни операции, ДПТРи т.н.). В този случай адресът на операнда изобщо не е посочен в инструкцията. Той е предварително определен от кода на операцията.

Непосредствени константи : константата може да бъде директно в командата зад кода на операцията.

Индексно адресиране : Индексираното адресиране може да се използва само за достъп до програмната памет и само в режим на четене. В този режим се преглеждат таблиците в програмната памет. 16-битов регистър ( ДПТРили програмен брояч) показва базовия адрес на желаната таблица, а акумулаторът показва входната точка към нея.

Набор от командиима 42 командни мнемоники за указване на 33 функции на тази система. Синтаксисът на повечето инструкции на асемблерния език се състои от мнемонична функция, последвана от операнди, указващи методи за адресиране и типове данни. Различните типове данни или режими на адресиране се определят от зададените операнди, а не от промени в мнемоничната нотация.

Командната система може условно да се раздели на пет групи: аритметични команди; логически команди; команди за трансфер на данни; битови инструкции за процесор; команди за разклоняване и прехвърляне. Обозначенията и символите, използвани в командната система, са дадени по-долу.

Таблица. Означения и символи, използвани в командната система

Обозначение, символ

Предназначение

Батерия

Регистри на текущо избраната регистърна банка

Номерът на заредения регистър, посочен в командата

директен

Директно адресируем 8-битов вътрешен адрес на местоположението на данните, който може да бъде вътрешно местоположение на RAM за данни (0-127) или регистър на специална функция SFR (128-255)

Индиректно адресируемо 8-битово вътрешно RAM място за данни

8-битов директенданни, включени в кода на операцията (COP)

данниH

MSB (15-8) на незабавни 16-битови данни

данниL

Ниски битове (7-0) на незабавни 16-битови данни

11-битов адрес на дестинация

addrL

Най-малко значимите битове от адреса на дестинацията

8-битов отместен байт със знак

Директно адресируем бит, чийто адрес съдържа CPC, разположен във вътрешната RAM памет за данни или специален функционален регистър SFR

a15, a14...a0

Битове на адреса на местоназначението

Съдържанието на елемента X

Съдържание на адреса, съхранен в елемент X

Разряд M елемент X


+

*
И
ИЛИ
XOR

Операции:
допълнения
изваждане
умножение
разделение
логическо умножение (операция И)
логическо добавяне (операция ИЛИ)
добавяне по модул 2 (XOR)
елемент X инверсия

Функционалната мнемоника е уникално свързана със специфични комбинации от методи за адресиране и типове данни. Общо 111 такива комбинации са възможни в командната система.

2. Аритметични и логически инструкции

Как да пример аритметична команда, операцията по добавяне може да се извърши чрез една от следните команди.

ДОБАВЯНЕА,7 Е 16 - добавете числото 7 към съдържанието на регистър А F 16 и запишете резултата в регистър A;

ДОБАВЯНЕА,@ Р0 - добавете към съдържанието на регистър А номера, чийто адрес (@ – търговски при ) се съхранява в регистъраР 0 (непряко адресиране) и съхранява резултата в регистър A;

ДОБАВЕТЕ A,R7- добавя към съдържанието на регистър А съдържанието на регистъраР 7 и запишете резултата в регистър А;

ДОБАВЕТЕ A, #127- добавете към съдържанието на регистър А число, чийто адрес на клетка за съхранение е 127 ( # - цифров символ) и запишете резултата в регистъра T- повторно А.

Всички аритметични инструкции се изпълняват в един машинен цикъл с изключение на инструкцията INC DPTR(изместване на показалеца на данни ДПТРдо следващия байт), изискващи два машинни цикъла, както и операции за умножение и деление, извършени в 4 машинни цикъла. Всеки байт във вътрешната памет за данни може да се увеличава и намалява без използване на акумулатора.

Инструкция MUL ABизвършва умножение (умножение) на данните в акумулатора с данните в регистър B, като поставя произведението в регистри A (долна половина) и B (горна половина).

Инструкция DIV ABдели (разделя) съдържанието на акумулатора на стойността в регистър B, оставяйки остатъка в B и частното в акумулатора.

Инструкция DA Aпредназначен за двоично-десетични аритметични операции (аритметични операции върху числа, представени в двоично-десетичен код). Не преобразува двоичен файл в двоичен десетичен, но дава правилния резултат само при добавяне на две BCD числа.

Пример логическа команда: логическата операция И може да се извърши чрез една от следните команди:

ANLА,7 Е 16 - логическо умножение на съдържанието на регистър А с числото 7 F 16 и резултатът се съхранява в регистър А;

ANLА,@ Р1 - логическо умножение на съдържанието на регистър А по номера, чийто адрес се съхранява в регистъраР 1 (индиректно адресиране) и съхранява резултата в регистър A;

ANL A,R6- логическо умножение на съдържанието на регистър А по съдържанието на регистъраР 6 и запаметете резултата в регистър А;

ANL A,#53 - логическо умножение на съдържанието на регистър A с число, чийто адрес на клетка за съхранение е 53 16, и запишете резултата в регистър A.

Всички логически операции върху съдържанието на акумулатора се извършват в един машинен цикъл, останалите - в два. Булевите операции могат да се извършват върху всеки от долните 128 байта на вътрешната памет за данни или върху всеки регистър SFR (специални функционални регистри) в режим на директно адресиране без използване на батерията.

Операциите за завъртане RL A, RLC A и т.н. преместват съдържанието на акумулатора с един бит надясно или наляво. В случай на ляво циклично изместване, най-малко значимият бит се премества в най-значимата позиция. В случай на дясно циклично изместване се случва обратното.

Операция СМЕНА Аизвършва обмен на младши и старши тетради в акумулатора.

3. Команди за пренос на данни

Екип MOV dest,srcпозволява прехвърляне на данни между вътрешни RAM клетки или област на специален регистър на функцията SFRбез използване на батерия. В този случай работата с горната половина на вътрешната RAM може да се извършва само в режим на индиректно адресиране и достъп до регистрите SFR– само в режим на директно адресиране.

Във всички микросхеми MCS-51стекът се поставя директно в резидентната памет на данните и расте нагоре. Инструкция НАТИСНЕТЕпърво увеличава стойността в регистъра на указателя на стека SPи след това избутва байтове данни в стека. Екипи НАТИСНЕТЕИ POPсе използват само в режим на директно адресиране (когато записват или възстановяват байт), но стекът е винаги наличен при индиректно адресиране през регистър SP. По този начин стекът може да използва и горните 128 байта памет за данни. Същите съображения изключват използването на стекови инструкции за адресиране на регистри. SFR.

Инструкциите за прехвърляне на данни включват 16-битова операция за прехвърляне MOV DPTR,#данни16, който се използва за инициализиране на регистъра на указателя на данни ДПТРкогато преглеждате таблици в програмната памет или за достъп до външна памет за данни.

Операция XCH A,байтизползва се за обмен на данни между акумулатора и адресирания байт. Екип XCHD A,@Riподобен на предишния, но само за по-ниски тетради, участващи в обмена на операнди.

За достъп до външната памет за данни се използва само индиректно адресиране. В случай на еднобайтови адреси се използват регистри R0или R1текущата регистърна банка, а за 16-битовите - регистърът на указателя на данни ДПТР. При всеки метод за достъп до външна памет за данни батерията играе ролята на източник или приемник на информация.

За достъп до таблици, намиращи се в паметта на програмата, се използват следните команди:

MOVC A,@A+ ДПТР ;

MOVC A,@A+ настолен компютър .

Съдържанието на съответния регистър на указателя на данни се използва като основен адрес на таблицата. ДПТРили настолен компютър(софтуерен брояч), а отместването се взема от А. Тези инструкции се използват изключително за четене на данни от програмната памет, а не за запис в нея.

4. Булеви операции

Микросхеми MCS-51съдържа булев процесор. Вътрешната RAM има 128 директно адресируеми бита. Специално функционално регистрационно пространство SFRможе също да поддържа до 128 битови полета. Инструкциите за битове изпълняват условни скокове, трансфери, нулиране, инверсии, И и ИЛИ операции.Всички посочени битове са налични в режим на директно адресиране.

Носете малко CFв специалния функционален регистър "дума за състоянието на програмата PSW' се използва като еднобитов булев акумулатор на процесора.

5. Инструкции за скок

Адресите на операциите за прескачане се обозначават на асемблер с етикет или реална стойност в пространството на програмната памет. Условните адреси на разклонения се сглобяват в относително отместване - знаков байт, добавен към програмния брояч настолен компютърако условието за преход е изпълнено. Границите на такива скокове са между минус 128 и 127 спрямо първия байт след инструкцията. В регистъра на специалната функция „дума за състоянието на програмата PSW» няма флаг за нула, така че инструкциите ДЖЕЙ ЗИИ JNZпроверете условието "равно на нула" като тестване на данните в акумулатора.

Има три вида безусловни инструкции за разклоняване: SJMP, LJMPИ AJMP– адреси на дестинация, които се различават по формат. Инструкция SJMPкодира адреса като относително отместване и заема два байта. Разстоянието за прескачане е ограничено до диапазон от минус 128 до 127 байта спрямо следната инструкция SJMP.

В инструкциите LJMPадресът на дестинация се използва като 16-битова константа. Командата е дълга три байта. Адресът на дестинацията може да бъде разположен навсякъде в програмната памет.

Екип AJMPизползва 11-битова адресна константа. Командата се състои от два байта. Когато тази инструкция се изпълни, долните 11 бита на брояча на адресите се заменят с 11-битовия адрес от инструкцията. Петте най-значими бита на програмния брояч настолен компютъростават непроменени. По този начин скокът може да бъде направен вътре в 2K-байтовия блок, който съдържа инструкцията, следваща инструкцията AJMP.

Има два вида инструкции за извикване на подпрограма: LCALLИ ОБАЖДАНЕ. Инструкция LCALLизползва 16-битовия адрес на извиканата подпрограма. В този случай подпрограмата може да се намира навсякъде в програмната памет. Инструкция ОБАЖДАНЕизползва 11-битов адрес на подпрограма. В този случай извиканата подпрограма трябва да се намира в същия 2K-байтов блок със следната инструкция ОБАЖДАНЕ. И двете версии на инструкцията изпращат адреса на следващата инструкция в стека и я зареждат в програмния брояч. настолен компютър съответната нова стойност.

Подпрограмата завършва с инструкцията RET, което ви позволява да се върнете към инструкцията след командата ОБАДЕТЕ СЕ. Тази инструкция изважда обратния адрес от стека и го зарежда в програмния брояч. настолен компютър . Инструкция РЕТИизползвани за връщане от рутинни процедури за прекъсване. Единствената разлика РЕТИот RETе това РЕТИИнформира системата, че обработката на прекъсването е приключила. Ако в момента на изпълнение РЕТИняма други прекъсвания, идентичен е RET.

Инструкция DJNZпредназначен за контрол на цикъла. За да стартирате цикъл н след като трябва да заредите в брояча байтове със стойността н и затворете тялото на цикъла с командата DJNZ, което показва началото на цикъла.

Екип CJNEсравнява двата си операнда като цели числа без знак и скача до адреса, посочен в него, ако сравнените операнди не са равни. Ако първият операнд е по-малък от втория, тогава битът за пренасяне CF настроен на "1".

Всички инструкции в сглобена форма заемат 1, 2 или 3 байта.

Intel е създателят на семейната архитектура MCS-51, която носи името си от първия представител на тази фамилия - микроконтролера 8051, пуснат през 1980 г., базиран на n-MOS технология. Добър набор от периферни устройства, гъвкав избор на външна или вътрешна програмна памет и достъпна цена гарантираха успеха на този микроконтролер на пазара. От гледна точка на технологията микроконтролерът 8051 беше много сложен продукт за времето си - в кристала бяха използвани 128 хиляди транзистора, което беше 4 пъти повече от броя на транзисторите в 16-битовия микропроцесор 8086. Този микроконтролер остава ядрото от семейството MCS-51 до днес.

Основните елементи на основната архитектура на семейството (8051 микроконтролерна архитектура) са:

8-битов ALU;

4 банки регистри, по 8 във всяка;

Вътрешна (резидентна) програмна памет 4 KB, имаща тип ROM или EPROM (8751);

Вътрешна (резидентна) памет за данни 128 байта;

21 регистъра със специални функции;

Булев процесор;

Два 16-битови таймера/брояча;

Контролер на сериен порт (UART);

Контролер за прекъсвания с две нива на приоритет;

Четири 8-битови I/O порта, два от които се използват като шина за адрес/данни за достъп до външна памет за програми и данни;

Вграден тактов генератор.

След това беше пуснат микроконтролерът 8052, който включваше увеличено количество резидентна памет за програми и данни, въведено от трети таймер и съответно разширен контролер за прекъсване.

Следващата фундаментална стъпка в развитието на MCS-51 беше прехвърлянето на производствената технология към CMOS (модификация 8xC51). Това направи възможно прилагането на режимите Idl (неактивен) и Power Down (ниска консумация), които осигуряват рязко намаляване на консумацията на енергия на кристала и отвориха пътя за използване на микроконтролер в летливи приложения, например в автономни устройства, захранвани от батерии.

И последният важен етап в развитието на MK 8051 от Intel беше пускането на микроконтролери 8xC51FA / FB / FC и 8xC51RA / RB / RC, които за краткост често се наричат ​​8xC51Fx и 8xC51Rx. Основната отличителна черта на тази група кристали е наличието на специализиран таймер / брояч (PCA). В допълнение, микроконтролерите 8xC51Rx допълнително съдържат таймер за наблюдение (WDT). Разгледайте по-подробно архитектурата и функционалността на PCA.

RSA включва:

16-битов таймер/брояч;

Пет 16-битови примерни и сравнителни модула, всеки свързан към различна линия на I/O порт на микроконтролера.

Таймерът/броячът обслужва всичките пет модула за проби и сравнение, които могат да бъдат програмирани да изпълняват една от следните функции:

16-битово семплиране на стойността на таймера на положителния фронт на външния сигнал;

16-битово семплиране на стойността на таймера по отрицателния фронт на външния сигнал;

16-битово вземане на проби от стойността на таймера на всеки фронт на външния сигнал;

16-битов програмируем таймер;

16-битово високоскоростно изходно устройство;

8-битова ШИМ.

Изпълнението на всички изброени функции става в PCA на хардуерно ниво и не натоварва централния процесор. Това ви позволява да увеличите общата пропускателна способност, да подобрите точността на измерванията и обработката на сигнала и да намалите времето за реакция на микроконтролера към външни събития, което е особено важно за системите в реално време. PCA, внедрен в 8xC51Fx (8xC51Rx), се оказа толкова

Обозначаване

Макс. честота (MHz)

ROM/EPROM (байт)

броячи

За щастие архитектурата на тези микроконтролери се е превърнала в индустриален стандарт, а самият PCA е многократно възпроизвеждан в различни модификации на MK 8051.

Някои характеристики на редица микроконтролери MCS-51, произведени от Intel, са дадени в таблица 1.1.

Първоначално тесните места на архитектурата MCS-51 бяха 8-битово базирано на батерии ALU и сравнително бавно изпълнение на инструкции (необходими са 12 цикъла за изпълнение на най-бързите инструкции).

Таблица 1.1

I/O

ADC входове x цифри

периферия,

особености

U любимец. (IN)

Опция за ниско напрежение

4 нива IRQ, clock out

4 нива IRQ, clock out

Версия за ниско напрежение 8xC51Fx

4 нива IRQ, clock out

4 нива IRQ, clock out

4 нива IRQ, clock out

периоди на тактова честота (MC синхронизираща честота)). Това ограничи използването на семейни микроконтролери в приложения, изискващи повишена производителност и сложни изчисления (16- и 32-битови). Въпросът за фундаменталната модернизация на архитектурата на MCS-51 стана спешен. Проблемът с модернизацията се усложнява от факта, че до началото на 90-те години вече са създадени много разработки в областта на софтуера и хардуера на семейството MCS-51, във връзка с което една от основните задачи за проектиране на Новата архитектура трябваше да реализира хардуерна и софтуерна съвместимост с разработки, базирани на MCS -51.

За решаването на този проблем беше създадена съвместна група от специалисти от Intel и Philips, но по-късно пътищата на тези две компании се разминаха. В резултат на това през 1995 г. се появиха две значително различни семейства: MCS-251/151 на Intel и MCS-51XA на Philips (вижте подраздел 1.2).

Основни характеристики на архитектурата MCS-251:

24-битово линейно адресно пространство, адресиране до 16 MB памет;

Архитектура на регистъра, която позволява регистрите да бъдат наричани байтове, думи и двойни думи;

Режим на адресиране на страници за по-бързо извличане на команди от външна програмна памет;

Опашка с инструкции;

Разширен набор от инструкции, включващ 16-битови аритметични и логически операции;

Разширено стеково адресно пространство (до 64 KB);

Изпълнение на най-бързата команда в 2 цикъла.

Наборът инструкции MCS-251 включва два набора инструкции - първият набор е копие на набора инструкции MCS-51, а вторият се състои от разширени инструкции, които се възползват от архитектурата MCS-251. Преди да използвате микроконтролера, той трябва да бъде конфигуриран, т.е. като използвате програмиста, "запишете" конфигурационните битове, които определят кой от наборите инструкции ще стане активен след включване на захранването. Ако инсталирате първия набор от инструкции, тогава в този случай MK от семейството MCS-251 ще бъде съвместим с MCS-51 на ниво двоичен код. Този режим се нарича двоичен режим. Ако първоначално инсталирате набор от разширени инструкции (режим на източника), тогава програмите, написани за MCS-51, ще изискват повторно компилиране на кръстосани инструменти за MCS-251. Source Mode ви позволява да използвате архитектурата MCS-251 с максимална ефективност и да постигнете най-висока производителност.

За потребители, фокусирани върху използването на микроконтролери MCS-251 като механичен заместител на MCS-51, Intel пуска микроконтролери MCS-151, които вече са програмирани в състояние на двоичен режим.

Някои характеристики на редица микроконтролери MCS-251/151 са дадени в таблица 1.1.

В момента Intel, насочена към пазара на процесори Pentium, ограничава производството на кристали MCS-51. По принцип за конкретен разработчик това може да остане незабелязано, освен ако не използва микроконтролери 8xC51GB и 80C152Jx, които нямат точни аналози сред продуктите на други компании. Що се отнася до всички други микроконтролери от фамилията MCS-51, всички те се копират многократно от други компании.

Основата на микроконтролера (виж фиг. 1) е 8-битова аритметична логическа единица (ALU). Паметта на МК е с харвардска архитектура, т.е. логически разделени: на програмна памет - PP (вътрешна или външна), адресирана от 16-битов брояч на команди (SC) и памет за данни - вътрешна (Resident data memory - RPD) 128 (или 256) байта, както и външна (External памет за данни – VPD) до 64 KB. Физически програмната памет е реализирана в ROM (само за четене), а паметта за данни е внедрена в RAM (данните могат да се записват и четат).

Приемането и доставянето на външни сигнали се осъществява чрез 4 осембитови порта Р0..Р3. При достъп до външна програмна памет (EPM) или памет за данни (VPD), портовете P0 и P2 се използват като мултиплексирана външна шина за адрес/данни. P3 порт линиите могат също да изпълняват алтернативни функции (вижте таблица 1).

16-битовият DPTR регистър формира VPD адреса или основния адрес на програмната памет в инструкцията за преобразуване на акумулатора. Регистърът DPTR може да се използва и като два независими 8-битови регистъра (DPL и DPH) за съхраняване на операнди.

8-битов вътрешен команден регистър (RK) получава кода на изпълняваната команда; този код се декодира от управляващата верига, която генерира управляващи сигнали (виж фиг. 1).

Достъпът до специални функционални регистри - RSF (SFR - на фиг. 1 те са оградени с пунктирана линия) е възможен само чрез директно адресиране на байтове в адресния диапазон от 128 (80h) и повече.


Постоянната памет за данни (RDD) в първите модели микроконтролери от семейството MCS-51 имаше капацитет от 128 байта. Долните 32 байта на RPD също са регистри с общо предназначение - RON (4 банки по 8 RON всяка). Програмата може да се прилага към един от 8-те RON на активната банка. Изборът на активната банка от RON се извършва чрез програмиране на два бита в регистъра за състоянието на процесора - PSW.


Таблица 1 - Разпределение на щифтовете на MCS-51

Pin No. Обозначаване Предназначение
1..8 P1 8-битов квази-двупосочен I/O порт
9 RST

Сигнал за нулиране (активно ниво - високо);

Сигналът RST нулира: компютъра и повечето специални функционални регистри (SFR), дезактивирайки всички прекъсвания и таймери; избира RON банка 0; записва "всички единици" на портове P0_P3, подготвяйки ги за въвеждане; записва код 07H в указателя на стека (SP);

10..17

8-битов квази-двупосочен I/O порт; след запис в съответния бит "1" - изпълнява допълнителни (алтернативни) функции:

Вход за сериен порт - RxD;

Изход на сериен порт - TxD;

Вход за външно прекъсване 0 - ~INT0;

Външен вход за прекъсване 1 - ~INT1;

Вход за таймер/брояч 0 - T0;

Таймер/брояч вход 1 - T1;

Строб изход. сигнал при запис към VPD - ~ WR;

Строб изход. сигнал при четене от VPD - ~ RD;

18, 19 X1, X2 Заключения за свързване на кварцов резонатор или LC верига;
20 GND Общо заключение;
21..28 P2 8-битов квази-двупосочен I/O порт; или изходен адрес A в режим на външна памет (VPP или VPD);
29 PME Струб за четене на външна програмна памет, издава се само при достъп до външен ROM;
30 ALE Адрес на външна памет (VPP или VPD);
31 EA Деактивирайки RPP, нивото "0" на този вход превключва MK към избор на команди само от пистата ;
39..32 P0 8-битов двупосочен I/O порт; при достъп до външна памет, той издава адреси A (които се записват във външен регистър от сигнала ALE) и след това обменя байт синхронно със сигнала ~PME (за команди) или ~WR,~RD (за данни в VPD) , при достъп до външна памет всички единици се записват в регистъра на порта P0, унищожавайки информацията, съхранена там;
40 Ucc Изход за захранващо напрежение

Превключването на банки на RON опростява изпълнението на подпрограми и обработката на прекъсвания, защото. не е необходимо съдържанието на RONs на главната програма да се прехвърля в стека при извикване на подпрограмата (достатъчно е да отидете в друга активна RON банка в подпрограмата).

Достъпът до RPD е възможен чрез индиректно или директно байт адресиране (директното байт адресиране позволява достъп само до първите 128 байта на RPD).

Разширената зона на RPD (за микроконтролери от фамилията MCS-52 и следващите фамилии) от адрес 128 (80h) до 255 (FFh) може да бъде адресирана само чрез метода на индиректно адресиране.

Таблица 2 - Блокови регистри на специални функции (s f r)

Мнемо код Име
0E0h *ACC Батерия
0F0h Регистрирайте разширител на батерията
0D0h *PSW Дума за състоянието на процесора
0B0h *P3 Порт 3
0A0h *P2 Порт 2
90ч *P1 Порт 1
80ч *P0 Порт 0
0B8h * IP Регистър за приоритет на прекъсване
0A8h *Т.Е Регистър на маска за прекъсване
99ч SBUF Буфер на сериен трансивър
98ч * SCON Контрол на сериен порт/Регистър на състоянието
89ч TMOD Регистър на режим таймер/брояч
88ч * TCON Контрол на таймер/брояч/Регистър на състоянието
8Dh TH1 Таймер 1 (висок байт)
8bh TL1 Таймер 1 (малък байт)
8ch TH0 Таймер 0 (висок байт)
TL0 Таймер 0 (малък байт)
83ч DPH Регистър на указателя на данни (DPTR) (висок байт)
82ч DPL Регистър на указателя на данни (DPTR) (малък байт)
81ч SP Регистър на указателя на стека
87ч PCON Регистър за контрол на мощността на потреблението

2. СОФТУЕРЕН МОДЕЛ MCS–51


ТИПОВЕ КОМАНДИ MCS–51

Почти половината от командите се изпълняват в 1 машинен цикъл (MC). При честота на кристален осцилатор 12 MHz времето за изпълнение на такава команда е 1 μs. Останалите команди се изпълняват в 2 машинни цикъла, т.е. за 2 ms. Само инструкциите за умножение (MUL) и деление (DIV) се изпълняват в 4 машинни цикъла.

По време на един машинен цикъл има два достъпа до програмната памет (вътрешна или външна) за четене на два байта от инструкцията или един достъп до външната памет за данни (EDM).

3. МЕТОДИ (МЕТОДИ) ЗА АДРЕСИРАНЕ НА MCS–51

1. РЕГИСТРОВО АДРЕСИРАНЕ - 8-битовият операнд се намира в RON на избраната (активна) банка от регистри;

2 ДИРЕКТНО АДРЕСИРАНЕ (означено със знака - #) - операндът се намира във втория (а за 16-битов операнд и в третия) байт на командата;

3 ИНДИРЕКТНО АДРЕСИРАНЕ (означено със знака - @) - операндът се намира в паметта за данни (RPD или VPD), а адресът на клетката от паметта се съдържа в един от RON на индиректното адресиране (R0 или R1); в командите PUSH и POP адресът се съдържа в указателя на стека SP; регистърът DPTR може да съдържа VPD адрес до 64K;

4 ДИРЕКТНО БАЙТОВО АДРЕСИРАНЕ – (dir) – използва се за достъп до RPD клетки (адреси 00h…7Fh) и специални функционални регистри SFR (адреси 80h…0FFh);

5 ДИРЕКТНО АДРЕСИРАНЕ НА БИТОВЕ - (бит) - използва се за достъп до отделно адресируеми 128 бита, разположени в RPD клетки на адреси 20H ... 2FH и до отделно адресируеми битове на специални функционални регистри (виж Таблица 3 и програмен модел);

6 ИНДИРЕКТНО ИНДЕКСНО АДРЕСИРАНЕ (обозначено със знака @) - опростява прегледа на таблиците в програмната памет, PP адресът се определя от сумата на базовия регистър (PC или DPTR) и индексния регистър (Battery);

7 НЕЯВНО (ВГРАДЕНО) АДРЕСИРАНЕ - кодът на инструкцията съдържа неявна (по подразбиране) препратка към един от операндите (най-често към Акумулатора).

4. ФОРМАТ ЗА ДУМА ЗА СЪСТОЯНИЕ НА ПРОЦЕСОР (PSW).

C - флаг за пренасяне (CARY) или заемане, също така функционира като "булев акумулатор" в битово управлявани инструкции;

AC – спомагателен (допълнителен) флаг за пренасяне – зададен на "1", ако командата за добавяне (ADD, ADDC) има пренасяне от тетрада от нисък ред към висок ред (т.е. от 3-ти бит до 4-ти бит);

F0 - потребителски флаг - зададен, нулиран и проверен от софтуера;

RS1 RS0 банка Адрес (dir)
0 0 0 00ч..07ч
0 1 1 08ч..0пт
1 0 2 10ч..17ч
1 1 3 18h..1Fh

RS1,RS0 – Избор на банка за регистриране:

OV - флаг за аритметично препълване; неговата стойност се определя от операцията XOR на входните и изходните пренасящи сигнали на най-значимия бит на ALU; една единствена стойност на този флаг показва, че резултатът от аритметична операция в допълващия код на двете е извън диапазона: –128…+127; при извършване на операцията за разделяне флагът OV се нулира, а в случай на деление на нула се задава; при умножение флагът OV се задава, ако резултатът е по-голям от 255 (0FFH);

Bit PSW - Резервиран, съдържа тригер, достъпен за запис или четене;

P - флаг за четност - представлява добавянето на броя на единичните битове в акумулатора към четно число; се формира от комбинационна схема (програмно достъпна само за четене).

Микроконтролерите MCS-51 нямат флаг "Z". Но в инструкциите за условен скок (JZ, JNZ), комбинираната верига проверява текущото (нулево или ненулево) съдържание на акумулатора.

Всички команди за прехвърляне и обмен на операнди могат да се извършват чрез акумулатора (виж фиг. 3). Освен това прехвърлянията от/към външна памет (програмна памет или памет за данни) могат да се извършват само чрез батерията.

Повечето трансфери могат да бъдат направени и чрез байт за напред (dir). Има дори прехвърляне от директория към директория (вижте Фигура 3).

Липсващите трансфери от RON към RON могат да бъдат реализирани като трансфери от RON към директния байт dir (като се има предвид, че RONs са разположени в началната област на резидентната памет за данни, чиито клетки могат да бъдат адресирани като dir).

Командите за обмен на XCH ви позволяват да изпращате байтове, без да разрушавате и двата операнда.

Аритметичните команди се изпълняват само в Акумулатора. Следователно първият операнд трябва първо да бъде поставен в акумулатора и след това да се добави или извади вторият операнд. Резултатът се поставя в Акумулатора.


Командата за изваждане SUBB се изпълнява само със заемане (т.е. флагът Cary също се изважда от резултата). Следователно, за да се изпълни инструкция за изваждане без заемане, е необходимо първо да се изпълни инструкцията Clear Flag C (CLRC).

Инструкцията за умножаване на еднобайтови операнди - MULAB - поставя резултат от два байта (16 бита): младият байт е в акумулатора, високият байт е в регистър B.

Резултатът от изпълнението на инструкцията за разделяне на еднобайтови операнди - DIVAB - се поставя: частното - Акумулатор, остатъкът - в регистър B.

Аритметичната инструкция INC добавя единица към избрания операнд. Аритметичната инструкция DEC изважда единица от избрания операнд. Инструкцията Accumulator Decimal Correction (DAA) ви помага да добавяте двоично кодирани десетични (BCD) числа, без да ги конвертирате в шестнадесетичен (hex) формат. Изходните операнди трябва да са във формат BCD, т.е. във всяка тетрада от един байт има само числа от 0 до 9 (не може да има шестнадесетични числа: A, B, C, D, E, F). Следователно един байт може да съдържа числа от 00 до 99 за опаковани BCD числа или числа от 0 до 9 за неопаковани BCD числа.

Командата DA A - десетична корекция извършва действия върху съдържанието на акумулатора след добавяне на BCD числата в процесора (числата са добавени според законите на шестнадесетичната аритметика), както следва (вижте примера):

· ако съдържанието на тетрада от нисък ред на акумулатора е по-голямо от 9 или флагът за допълнителен пренос е зададен (AC = 1), тогава 6 се добавя към съдържанието на акумулатора (т.е. липсващите шест цифри в шестнадесетичен формат);

· ако след това съдържанието на горния ред на акумулатора е по-голямо от 9 или е зададен флаг C, тогава числото 6 се добавя към горния ред на акумулатора.

Инструкцията за десетична корекция DA A не се използва след инструкцията за нарастване (INC), тъй като инструкцията за нарастване не засяга (променя) флаговете C и AC.

Логически команди:

Логическо "И" - ANL,

Логическо "ИЛИ" - ORL,

Логическата команда XOR - XRL - се изпълнява в акумулатора (както и аритметика), но е възможно да се изпълняват логически команди и в директния адресен байт (dir). В този случай вторият операнд може да бъде:

в батерията или

Непосредствен операнд в инструкция.

Инструкциите за ротация (RR A, RL A) и инструкциите за ротация през флага CARY (RRC A, RLC A) завъртат съдържанието на акумулатора с 1 бит. Битовите операнди се изпращат само чрез флага C.

Състоянието на системата за прекъсване се запитва в края на всеки машинен цикъл във фаза S5P2, с изключение на RETI инструкции и всички инструкции, които имат достъп до IE и IP регистрите. Необходими са 38 до 86 периода на честота fOSC от момента, в който заявката за прекъсване е ангажирана за обслужване на прекъсването, в зависимост от фазата на заявката и броя на машинните цикли на инструкцията, по време на които е получена заявката.

Когато прекъсването е реализирано хардуерно, се изпълнява инструкцията LCALL addr16, която гарантира, че текущото състояние на програмния брояч се съхранява в стека (запомняйки адреса за връщане) и преминава към началния адрес addr16 на съответната сервизна процедура. Всеки източник на заявка за прекъсване има свой собствен асоцииран

начален адрес (вектор на прекъсване):

Външно прекъсване INT0.

Прекъсване на таймера/брояча TC0.

Външно прекъсване INT1.

Прекъсване на таймера/брояча TC1.

Прекъсване на серийния порт.

2.7. Методи за адресиране и командна система на семейството MCS-51

Командната система на семейството MCS-51 е насочена към организиране на гъвкав вход/изход на данни през универсални портове P0...P3 и първична обработка на информация. Особено внимание се обръща на операциите с битове и прехвърлянето на управление по тяхната стойност. Инструкциите, които извършват такива операции, образуват голяма група и заедно със съответния хардуер образуват така наречения "булев процесор" като част от архитектурата MCS-51.

Командната система предоставя на програмиста възможността да използва повечето от операциите с пълен набор от методи за адресиране и софтуерно достъпни хардуерни ресурси.

2.7.1. Методи за адресиране

Всяка инструкция казва на процесора операцията, която трябва да се извърши, и методите за достъп до операндите. Командният код има няколко полета, които имат специфично функционално предназначение. Най-важните полета на всяка команда са кодът на операцията (COP), който определя действието на командата, и адресната част. Полетата на адресната част съдържат информация за адресите на операндите и резултата от операцията, а в някои случаи и информация за адреса на следващата инструкция.

Ако адресът сочи към номера на клетката от паметта, в която се намира операндът или където е въведен, тогава той се нарича директен адрес.

Методите за адресиране са набор от механизми за достъп до операнди. Някои от тях са прости, което води до компактен формат на инструкция и бърз достъп до операнда, но имат ограничено количество налични ресурси. Други ви позволяват да работите с всички налични ресурси в системата, но командата се оказва дълга,

въвеждането и изпълнението отнема много време. Наборът от методи за адресиране във всеки набор от инструкции е компромисна комбинация от известни механизми за адресиране, избрани от дизайнерите на архитектурата въз основа на набора от задачи, които трябва да бъдат решени.

По-долу са основните методи за адресиране, използвани във фамилията командна система MCS-51.

Неявно адресиране. Командата не съдържа изрични указания за адреса на операнда, участващ в операцията, или адреса, на който е поставен резултатът от операцията, но този адрес се подразбира. В командите акумулаторът най-често се адресира имплицитно като дестинация на резултата от операция. Например резултатът от добавянето на съдържанието на акумулатора (A) и регистъра R1 на текущата банка данни чрез инструкцията ADD A,R1 се записва в неявно адресирания акумулатор. Цялата указана инструкция заема един байт в паметта, докато адресът само на акумулатора (8Eh от SFR областта) съдържа един байт.

Директно адресиране. В адресното поле на командата съдържа

Не адресът на операнда живее, а самият операнд. Директното адресиране се обозначава със специалния знак # пред номера. Например командата MOV A,#15h зарежда шестнадесетичното число 15 (вторият байт на командата) в акумулатора. В командната система директното адресиране се означава като #data, където data е число

(данни = 00h...FFh).

Директно адресиране. Полето за адрес на инструкцията указва директния адрес на местоположението на паметта за данни, в което се намира операндът или където е записан. Например инструкцията MOV A,15h зарежда съдържанието на клетката DSEG на адрес 15h в акумулатора. Клетката с памет е адресируема директно, докато акумулаторът е адресиран имплицитно. В зависимост от местоположението на адресирания операнд директното адресиране се подразделя на регистрово директно адресиране и абсолютно адресиране.

Директно регистрационно адресиране. Полето за адрес на командата съдържа директния регистърен адрес на текущата регистърна банка. Във всяка банка има осем регистъра и за адресирането им е необходим трибитов директен адрес. В командната мнемоника адресируемият регистър се обозначава с Rn, където n=0...7. Всички полета на командата се побират в един байт. Такова адресиране се нарича кратко. Например MOV R4,R1.

Директно абсолютно адресиранепозволява ви достъп до всяка DSEG клетка и SFR зона. Директният адрес в този случай отнема един байт, а командата отнема два байта. В командната система директният адресен байт се обозначава с думата direct (директен) (direct = 00h ... FFh). Например, инструкцията MOV 80h,R2 (или MOV P0,R2) зарежда съдържанието на регистър R2 на текущата банка данни в порт P0 (местоположение 80h на SFR). Ако и двата операнда са директно адресируеми с абсолютна адресация, тогава инструкцията става трибайтова инструкция (напр. MOV 80h,15h).

индиректно адресиране. Адресното поле съдържа адреса на мястото в паметта, където се намира директният адрес на операнда. В командната система непрякото адресиране се обозначава със специалния символ @. Имот

регистрите R0 и R1 (@Ri, i = 0.1) на всяка регистърна банка трябва да съхраняват директния адрес. Например, ако съдържанието на регистъра R1 на текущата регистърна банка е 15h, тогава инструкцията MOV A,@R1 ще извърши същото действие като инструкцията MOV A,15h по-горе - тя ще зареди съдържанието на местоположението на паметта DSEG с адрес 15ч в акумулатора. Командата MOV A, @ R1 обаче е еднобайтова, но най-важното е, че е възможно програмно да промените адреса чрез промяна на съдържанието на регистъра R1.

Относително адресиране. При относително адресиране директният адрес се формира чрез добавяне на базовия адрес към адресното поле на командата. Съдържанието на програмния брояч се използва като основен адрес, а адресното поле на инструкцията е осембитово релативно (относително) изместване. Относителното число се интерпретира от командата като цяло число със знак, представено в допълнение от две. Диапазонът му на представяне е (-128...+127). Когато определяте rel номера, имайте предвид, че програмният брояч сочи към следващата инструкция, която трябва да бъде изпълнена. Относителното адресиране се използва широко в командите за прехвърляне на управление, което позволява създаването на преместваеми програмни модули. Командите за трансфер на управление с относително адресиране позволяват разклоняване спрямо текущата позиция на компютърния програмен брояч в двете посоки с (-128...+127) байта.

В програмите на асемблерния език полето за отместване може да се използва за указване на етикета, към който да се премине. В резултат на преобразуването асемблерът ще изчисли стойността на отместването, ако тя не надвишава (-128…+127). В противен случай ще бъде издадено съобщение за грешка.

Основно адресиранепредставлява един вид относително адресиране. Директният адрес в този случай се формира чрез добавяне на посочения в командата адрес към съдържанието на базовия регистър, който съхранява базовия адрес. Функцията на основния регистър в семейството MCS-51 се изпълнява от регистъра на указателя на данни DPTR или компютърния програмен брояч. Този тип адресиране е особено полезно при обработка на таблици и масиви от данни. В инструкциите MOVC A,@A+DPTR и MOVC A,@A+PC 16-битовият директен адрес се формира като сбор от съдържанието на DPTR и A или PC и A регистрите.

Адресиране на страници. Когато се използва адресиране на страници, паметта се разделя на няколко страници с еднаква дължина. Адресирането на страницата се извършва от отделен регистър на страницата, а клетките от паметта в рамките на страницата се адресират от адреса, съдържащ се в инструкцията. Директният адрес се формира чрез конкатенация (свързване) на адреса на страниците и адреса на клетката с памет в страницата. В инструкцията MOVX A,@Ri порт P2 (старшият байт на адреса) изпълнява функцията на регистъра на страницата, а съдържанието на регистъра Ri (ниският байт на адреса) определя адреса в страницата. В този случай паметта е разделена на 256 страници по 256 клетки във всяка от тях.

Адресиране на стекаизползва се в безадресни команди и е комбинация от методи за адресиране с автоматично нарастване и автоматично намаляване, работещи на принципа на LIFO (L ast I input - F first O utput) - “последен влязъл - пръв излязъл”. Стекът се намира в DSEG и расте в посока на увеличаване на адреса. Адресът на върха на стека се съдържа в указателя на стека SP. Когато един байт се избута в стека, съдържанието на SP първо се увеличава и след това се записва адресът. Когато четете байт от стека, първо прочетете на адреса, посочен от SP, и след това намалете SP. Когато използвате стек, имайте предвид, че дълбочината на стека (максималния брой клетки от паметта, заети от стека) не се контролира от хардуера. При прекомерно увеличаване на стека клетките на паметта, които не са предназначени за него, могат да бъдат заети със загуба на информация в тях. Хардуерният стек се използва за съхраняване на адреса за връщане при обслужване на прекъсване.

2.7.2. MCS-51 Семейна командна система

Командната система е представена в таблици A2.1...A2.6 от Приложение 2. Таблиците показват името на командата, нейния мнемоничен код, двоичен код на операцията, ефекта на изпълнената команда върху флаговете C, OV, AC и P, дължината на командата в байтове (B) и времето за изпълнение в машинни цикли (C), както и съдържанието на преобразуването, извършено от инструкцията. Запетая се използва като разделител за адресните полета в командите. За подобряване на четливостта могат да се добавят интервали след запетаята, ако се поддържа от използвания асемблер.

Целият набор от команди може да бъде разделен на 5 групи: операции за пренос на данни, аритметични операции, логически операции, операции с битове и операции за пренос на управление.

Командна група за операция по прехвърляне на данни(Таблица A2.1) ко-

поддържа MOV (пренос на данни между DSEG и RSEG), MOVC (между CSEG и A), MOVX (между XSEG и A), PUSH и POP команди за достъп до стека и две XCH и XCHD команди за обмен. Всички инструкции за прехвърляне на данни, чиято дестинация е акумулаторът, задават флага за четност P на съдържанието на акумулатора, а инструкциите за директно адресиране, чиято дестинация е PSW регистърът, променят всички флагове. Най-обемната е инструкцията MOV, която използва четири метода за адресиране: директен регистър (A, Rn, DPTR), директен (директен), индиректен (@Ri), директен (#data, #data16). Вторият операнд на командата е източникът, първият операнд е дестинацията. Има три метода на адресиране (с изключение на директното) за указване на дестинацията и четирите за указване на източника. Трибайтовата MOV директна, директна инструкция осигурява трансфер между произволни две клетки на паметта (DSEG и SFR), включително RSEG. За обмен с RSEG се предоставят специални дву- и еднобайтови формати:

Специалната инструкция MOV DPTR,#data16 зарежда 16-битов DPTR указател със стойност data16.

Инструкцията MOVC ви позволява да четете информация от паметта на програмата CSEG не в командния регистър на управляващото устройство, а в акумулатора на операционното устройство. Командата използва два метода за адресиране: базирано на DPTR и спрямо PC. И в двата случая целочисленото изместване без знак (индекс) се съхранява в акумулатора. Акумулаторът служи и като приемник на резултата. Командата ви позволява да извършвате бързо прекодиране по таблици.

Достъпът до външната памет се осъществява с помощта на инструкцията MOVX. Обменът се извършва по байтове между акумулатора и външния XSEG. XSEG клетка може да бъде адресирана по два начина: индиректно чрез 16-битов указател DPTR и странично индиректно чрез 8-битов указател Ri, i=0,1. В последния случай регистърът на страницата е P2.

Неадресираните PUSH и POP команди осигуряват трансфер на данни

между DSEG, RSEG и SFR.

Командата за обмен на XCH осигурява двупосочен обмен на байтове, а командата XCHD осигурява по-ниските тетради на байтови операнди.

Група инструкции за аритметични действия(Таблица A2.2) ко-

съдържа инструкции за добавяне на ADD, пренасяне добавяне на ADDC, заемане на изваждане SUBB, увеличаване и намаляване с едно INC и DEC, десетична корекция на двоично кодирано десетично събиране (BCD) в опакован формат, MUL умножение и деление DIV. Операциите се извършват върху цели числа без знак. В операциите събиране и изваждане акумулаторът е първият операнд и дестинацията на резултата. За дефиниране на втория операнд се използват директен регистър, директно абсолютно, директно и непряко адресиране. Операциите INC и DEC се прилагат към акумулатор, директно адресируем регистър, директно или косвено адресируемо място в паметта. В допълнение, операцията INC се прилага към съдържанието на 16-битовия DPTR указателен регистър.

Операциите за умножение на цели числа и деление без знак включват акумулатора и регистъра B. При умножението 8-битовата стойност на A се умножава по 8-битовата стойност на B и 16-битовият резултат се записва в двойка BA. В този случай регистър B съхранява най-високата част от продукта. Флагът OV се задава, ако произведението е по-голямо от 255. Когато 8-битова стойност A се дели на 8-битова стойност B, частното се записва в A, а остатъкът в B. Опит за деление на 0 задава OV флаг за препълване.

Командата за десетична корекция на акумулатора DA се поставя след командата за добавяне. Термините трябва да бъдат представени в BCD код. Корекцията се извършва по стандартен начин.

Група за логически инструкции(Таблица A2.3 ) съдържа три типични операции: ANL - логическо И, ORL - логическо ИЛИ, XRL - логическо изключващо ИЛИ. Източник на първия операнд

е или акумулатор А, или директно адресируема клетка от паметта. Вторият операнд се определя от един от четирите основни метода за адресиране. Групата включва също единични операциинад съдържанието на акумулатора: CLR - изчиства, CPL - инверсии, както и RL, RLC, RR и RRC - операции на циклични и разширени смени надясно и наляво. Това включва и операцията по обмен на тетради в SWAP акумулатора, което може да се интерпретира като циклично изместване на байт с четири бита.

Група инструкции за работа с битове(таблица A2.6) съдържа ко-

команди SETB - задаване на бит на 1, CLR - нулиране на бит на 0, CPL - инвертиране на бит, ANL и ORL - логическо И и логическо ИЛИ на съдържанието на флаг С и директно адресиран бит, MOV - пренасочване на битове.

IN При побитови операции флагът C играе ролята на булев акумулатор. Съдържанието на флага C или директно адресируемия бит на областта BSEG се използват като операнди. В операциите ANL и ORL можете да използвате съдържанието на директно адресирания бит (бит) или обратното на съдържанието (/бит).

IN тази група включва също инструкции за условен скок с относителен 8-битово отместване rel. Условно разклоняване може да се изпълни или когато битът е зададен (JB команда) или изчистен (JNB команда). Специално внимание заслужава инструкцията JBC, която, когато е зададен бит, реализира разклонение и в същото време нулира бита на 0.

Командна група за прехвърляне на контрол(Таблици A2.4 и A2.5)

съдържа безусловни инструкции за прескачане AJMP, LJMP, SJMP, JMP, условно прескачане JZ, JNZ, CJNE, извикване на ACALL, LCALL, връщане RET, RETI и актуализиране с условно прескачане DJNZ. Празната команда NOP също е включена тук.

IN Относителното адресиране се използва широко в командите за прехвърляне на управление, за да позволи създаването на преместваеми програмни модули. Относителният адрес е 8-bit offset rel е байт със знак, който осигурява преход към (-128… +127) байтове спрямо текущата позиция на компютъра. Или директният адрес addr16, или индиректният @A+DPTR адрес могат да се използват за прескачане до всяка друга точка в адресното пространство от 64 KB. В последния случай съдържанието на A се интерпретира като цяло число без знак. Въвежда се вариант на кратко директно адресиране addr11 в текущата страница 2K за съвместимост със семейството MCS-48.

Всички тези типове адресиране се използват в инструкции за прескачане. Командите за повикване използват само методи за директно адресиране addr16 и in-page addr11. Всички условни команди използват само относително адресиране.

Когато микроконтролерът разпознае заявка за прекъсване, той издава инструкция LCALL addr16, която автоматично съхранява адреса за връщане в стека. Информацията за състоянието на програмата (съдържанието на PSW регистъра) не се съхранява автоматично. При което



Свързани статии: