Соколов Ю.П. Микроконтроллеры семейства MCS-51 (2002) (1095895), страница 13
Текст из файла (страница 13)
Считанный бит инвертируется− − Признак не устанавливается+ − Признак устанавливается∗ − Признак устанавливается при адресации PSW(X) − Содержимое элемента Х[X] − Адрес, указанный элементом Х([X]) − Содержимое по адресу, указанному элементом Х[(X)+(Y)] − Адрес равен сумме содержимого элементов X и Y[(X):(Y)] − Адрес равен конкатенации содержимого элементов X и Y(X)3...0 − Содержимое младшей тетрады элемента ХКОМАНДЫ ОПЕРАЦИЙ ПЕРЕДАЧИ ДАННЫХНАИМЕНОВАНИЕ КОМАНДЫЗАГРУЗКА указателя данныхПЕРЕСЫЛКА в аккумулятор байтаиз CSEG по базовому адресу в DPTRиз CSEG по базовому адресу в PCиз страницы XSEGиз области XSEGПЕРЕСЫЛКА байта из аккумуляторав страницу XSEGв область XSEGЗАПИСЬ прямо адресуемого байта в стекЧТЕНИЕ из стека в прямо адресуемую ячейкуОБМЕНаккумулятора с регистром (n = 0...7)аккумулятора с прямо адресуемым байтомаккумулятора с байтом из DSEG (i = 0,1)младших тетрад аккумулятора и байта из DSEGКОДПРИЗНАКИ ЧИСЛОБ ЦСОДЕРЖАНИЕ КОМАНДЫMOVMOVMOVMOVA, RnA, directA, @RiA, #data11101 r r r111001011110011 i01110100−−−−++++12121111A ← (Rn)A ← (direct)А ← ([Ri])A ← #dataMOVMOVMOVRn, ARn, directRn, #data11111 r r r10101 r r r01111 r r r− − − −− − − −− − − −122121Rn ← (A)Rn ← (direct)Rn ← #dataMOVMOVMOVMOVMOVdirect, Adirect, Rndirect, directdirect, @Ridirect, #data1111010110001 r r r100001011000011 i01110101*****−−−−−2232312222direct ← (A)direct ← (Rn)direct ← (direct)direct ← ([Ri])direct ← #dataMOVMOVMOV@Ri, A@Ri, direct@Ri, #data1111011 i1010011 i0111011 i− − − −− − − −− − − −122121[Ri] ← (A)[Ri] ← (direct)[Ri] ← #dataMOVDPTR, #data16 10010000− − − −32DPTR ← #data16MOVCMOVCMOVXMOVXA, @A + DPTRA, @A + PCA, @RiA, @DPTR10010011100000111110001 i11100000−−−−−−−−−−−−++++11112222A ← CSEG[(A) + (DPTR)]PC ← (PC) + 1; A ← CSEG[(A)+(PC)]A ← XSEG[(P2):(Ri)]A ← XSEG[DPTR]MOVXMOVXPUSHPOP@Ri, A@DPTR, Adirectdirect1111001 i111100001100000011010000−−−*−−−*−−−*−−−−11222222XSEG[(P2):(Ri)] ← (A)XSEG[DPTR] ← (A)SP ← (SP) + 1; [SP] ← (direct)direct ← (SP);SP ← (SP) - 1XCHXCHXCHXCHDA, RnA, directA, @RiA, @Ri11001 r r r110001011100011 i1101011 i−*−−−*−−−*−−++++12111111(A) ↔ (Rn)(A) ↔ (direct)(A) ↔ ([Ri])(A)3...0 ↔ ([Ri])3...0−−−−*****−−−−*****57ПЕРЕСЫЛКА в аккумулятор содержимогорегистра (n = 0...7)прямо адресуемого байтакосвенно адресуемого байта (i = 0,1)константыПЕРЕСЫЛКА в регистр (n = 0...7) содержимогоаккумуляторапрямо адресуемого байтаконстантыПЕРЕСЫЛКА по прямому адресу содержимогоаккумуляторарегистра (n = 0...7)прямо адресуемого байтакосвенно адресуемого байта (i = 0,1)константыПЕРЕСЫЛКА по косвенному адресу содержимогоаккумуляторапрямо адресуемого байтаконстантыМНЕМОНИКАCOVACPТаблица П2.1.КОМАНДЫ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙНАИМЕНОВАНИЕ КОМАНДЫМНЕМОНИКАКОДПРИЗНАКИ ЧИСЛОБ ЦCOVACPТаблица П2.2.СОДЕРЖАНИЕ КОМАНДЫADDADDADDADDA, RnA, directA, @RiA, #data00101 r r r001001010010011 i00100100++++++++++++++++12121111A ← (A) + (Rn)A ← (A) + (direct)A ← (A) + ([Ri])A ← (A) + #dataСЛОЖЕНИЕ С ПЕРЕНОСОМ аккумуляторас регистром (n = 0...7)с прямо адресуемым байтомс косвенно адресуемым байтом (i = 0,1)с константойADDCADDCADDCADDCA, RnA, directA, @RiA, #data00111 r r r001101010011011 i00110100++++++++++++++++12121111A ← (A) + (Rn) + (C)A ← (A) + (direct) + (C)A ← (A) + ([Ri]) + (C)A ← (A) + #data + (C)ВЫЧИТАНИЕ С ЗАЁМОМ из аккумуляторарегистра (n = 0...7)прямо адресуемого байтакосвенно адресуемого байта (i = 0,1)константыSUBBSUBBSUBBSUBBA, RnA, directA, @RiA, #data10011 r r r100101011001011 i10010100++++++++++++++++12121111A ← (A) - (C) - (Rn)A ← (A) - (C) - (direct)A ← (A) - (C) - ([Ri])A ← (A) - (C) - #data0000010000001 r r r000001010000011 i10100011−−−−−−−−−−−−−−−+−−−−1121111112A ← (A) + 1Rn ← (Rn) + 1direct ← (direct) + 1[Ri] ← ([Ri]) + 1DPTR ← (DPTR) + 1DEC ADEC RnDEC directDEC @Ri0001010000011 r r r000101010001011 i−−−−−−−−−−−−+−−−11211111A ← (A) - 1Rn ← (Rn) - 1direct ← (direct) - 1[Ri] ← ([Ri]) - 1УМНОЖЕНИЕ аккумулятора на регистр BMULAB101001000 + − +14(B)(A) ← (A) х (B)ДЕЛЕНИЕ аккумулятора на регистр BDIVAB100001000 + − +14(A),(B) ← (A)/(B)ДЕСЯТИЧНАЯ КОРРЕКЦИЯ аккумулятораDAA11010100+ − − +11Если (A3...A0) > 9 или (AC) = 1, то(А3...А0) ← (А3...А0) + 6;если (A7...A4) > 9 или (C) = 1, то(A7...A4) ← (A7...A4) + 6ИНКРЕМЕНТаккумуляторарегистра (n = 0...7)прямо адресуемого байтакосвенно адресуемого байта (i = 0,1)указателя данныхДЕКРЕМЕНТаккумуляторарегистра (n = 0...7)прямо адресуемого байтакосвенно адресуемого байта (i = 0,1)INCINCINCINCINCARndirect@RiDPTR58СЛОЖЕНИЕ аккумуляторас регистром (n = 0...7)с прямо адресуемым байтомс косвенно адресуемым байтом (i = 0,1)с константойKОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙНАИМЕНОВАНИЕ КОМАНДЫКОДПРИЗНАКИ ЧИСЛОБ ЦСОДЕРЖАНИЕ КОМАНДЫ01011 r r r010101010101011 i01010100−−−−++++12121111A ← (A) ∧ (Rn)A ← (A) ∧ (direct)A ← (A) ∧ ([Ri])A ← (A) ∧ #dataANL direct, AANL direct, #data0101001001010011− − − −− − − −2312direct ← (direct) ∧ (A)direct ← (direct) ∧ #dataORLORLORLORL01001 r r r010001010100011 i01000100−−−−++++12121111A ← (A) ∨ (Rn)A ← (A) ∨ (direct)A ← (A) ∨ ([Ri])A ← (A) ∨ #dataORL direct, AORL direct, #data0100001001000011− − − −− − − −2312direct ← (direct) ∨ (A)direct ← (direct) ∨ #dataXRLXRLXRLXRL01101 r r r011001010110011 i01100100−−−−++++12121111A ← (A) ⊕ (Rn)A ← (A) ⊕ (direct)A ← (A) ⊕ ([Ri])A ← (A) ⊕ #dataXRL direct, AXRL direct, #data0110001001100011− − − −− − − −2312direct ← (direct) ⊕ (A)direct ← (direct) ⊕ #dataRLRLCRRRRCAAAA00100011001100110000001100010011−+−+−+−+11111111(A7 ← A6 ← A5 ←...← A1 ← A0 ← A7)(C ← A7 ← A6 ←...← A1 ← A0 ← (C))(A0 → A7 → A6 →...→ A2 → A1 → A0)((C) → A7 → A6 →...→ A1 → A0 → C)СБРОС аккумулятораCLR A11100100− − − +11ИНВЕРСИЯ аккумулятораCPL A11110100− − − +11(A) ← 0__A ← (A)ПЕРЕСТАНОВКА тетрад в аккумулятореSWAP A11000100− − − −11(A7...A4) ↔ (A3...A0)ANLANLANLANLA, RnA, directA, @RiA, #dataA, RnA, directA, @RiA, #dataA, RnA, directA, @RiA, #data−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−59ЛОГИЧЕСКОЕ "И" аккумуляторас регистром (n = 0...7)с прямо адресуемым байтомс косвенно адресуемым байтом (i = 0,1)с константойЛОГИЧЕСКОЕ "И" прямо адресуемого байтас аккумуляторомс константойЛОГИЧЕСКОЕ "ИЛИ" аккумуляторас регистром (n = 0...7)с прямо адресуемым байтомс косвенно адресуемым байтом (i = 0,1)с константойЛОГИЧЕСКОЕ "ИЛИ" прямо адресуемого байтас аккумуляторомс константой"ИСКЛЮЧАЮЩЕЕ ИЛИ" аккумуляторас регистром (n = 0...7)с прямо адресуемым байтомс косвенно адресуемым байтом (i = 0,1)с константой"ИСКЛЮЧАЮЩЕЕ ИЛИ" прямо адресуемого байтас аккумуляторомс константойСДВИГ циклический аккумуляторавлевовлево через переносвправовправо через переносМНЕМОНИКАCOVACPТаблица П2.3.КОМАНДЫ ОПЕРАЦИЙ ПЕРЕДАЧИ УПРАВЛЕНИЯНАИМЕНОВАНИЕ КОМАНДЫМНЕМОНИКАКОДПРИЗНАКИ ЧИСЛОБ ЦCOVACPТаблица П2.4.СОДЕРЖАНИЕ КОМАНДЫПЕРЕХОД безусловный,длинный внутри CSEG [0...64 Кбайт]абсолютный внутри страницы в 2 Кбайткороткий относительный [−128...+127]косвенный относительныйLJMPAJMPSJMPJMPaddr16addr11rel@A + DPTR00000010ааа000011000000001110011−−−−ПЕРЕХОД условный,если аккумулятор равен нулюJZrel01100000− − − −2 2если аккумулятор не равен нулюJNZrel01110000− − − −2 2если перенос равен единицеJCrel01000000− − − −2 2если перенос равен нулюJNCrel01010000− − − −2 2если бит равен единицеJBbit, rel00100000− − − −3 2если бит равен нулюJNBbit, rel00110000− − − −3 2если бит установлен, с последующимсбросом битаJBCbit, rel00010000− − − −3 2ДЕКРЕМЕНТ регистра иПЕРЕХОД, если не нульDJNZ Rn, rel11011 r r r− − − −2 2PC ← (PC) + 2, Rn ← (Rn) - 1;если (Rn) ≠ 0, то PC ← (PC) + relДЕКРЕМЕНТ прямо адресуемого байта иПЕРЕХОД, если не нульDJNZ direct, rel11010101− − − −3 2PC ← (PC) + 3, direct ← (direct) - 1;если (direct) ≠ 0, то PC ← (PC) + rel−−−−−−−−−−−−32212222PC ← addr16(PC10...PC0) ← addr11PC ← (PC) + 2; PC ← (PC) + relPC ← (A) + (DPTR)60PC ← (PC) + 2;если (A) = 0, то PC ← (PC) + relPC ← (PC) + 2;если (A) ≠ 0, то PC ← (PC) + relPC ← (PC) + 2;если (C) = 1, то PC ← (PC) + relPC ← (PC) + 2;если (C) = 0, то PC ← (PC) + relPC ← (PC) + 3;если (bit) = 1, то PC ← (PC) + relPC ← (PC) + 3;если (bit) = 0, то PC ← (PC) + relPC ← (PC) + 3;если (bit) = 1, то PC ← (PC) + relи (bit) ← 0КОМАНДЫ ОПЕРАЦИЙ ПЕРЕДАЧИ УПРАВЛЕНИЯНАИМЕНОВАНИЕ КОМАНДЫМНЕМОНИКАКОДПРИЗНАКИ ЧИСЛОБ ЦCOVACPТаблица П2.5.СОДЕРЖАНИЕ КОМАНДЫCJNE A, direct, rel10110101+ − − −32PC ← (PC) + 3;если (A) ≠ (direct), то PC ← (PC) + rel;причем если (A) < (direct), то C ← 1;если (A) > (direct), то C ← 0СРАВНЕНИЕ аккумулятора с константойи ПЕРЕХОД, если не равноCJNE A, #data, rel10110100+ − − −32PC ← (PC) + 3;если (A) ≠ #data , то PC ← (PC) + rel;причем если (A) < #data , то C ← 1;если (A) > #data , то C ← 0СРАВНЕНИЕ регистра с константойи ПЕРЕХОД, если не равноCJNE Rn, #data, rel10111 r r r+ − − −32СРАВНЕНИЕ байта из DSEG с константойи ПЕРЕХОД, если не равноCJNE @Ri, #data, rel 1011011 i+ − − −32PC ← (PC) + 3;если (Rn) ≠ #data, то PC ← (PC) + rel;причем если (Rn) < #data , то C ← 1;если (Rn) > #data , то C ← 0PC ← (PC) + 3;если ([Ri]) ≠ #data, то PC ← (PC) + rel;причем если ([Ri]) < #data, то C ← 1;если ([Ri]) > #data, то C ← 0ВЫЗОВ подпрограммы длинныйвнутри CSEG [0...64 Kбайт]LCALL addr1600010010− − − −32PC ← (PC) + 3;SP ← (SP) + 1, [SP] ← (PC7...PC0);SP ← (SP) + 1, [SP] ← (PC15...PC8)PC ← addr16ВЫЗОВ подпрограммы абсолютныйвнутри страницы CSEG [0...2 Кбайт]ACALL addr11aaa00001 − − − −22PC ← (PC) + 2;SP ← (SP) + 1, [SP] ← (PC7...PC0);SP ← (SP) + 1, [SP] ← (PC15...PC8)(PC10...PC0) ← addr11ВОЗВРАТ из подпрограммыRET00100010− − − −12(PC15...PC8) ← ([SP]), SP ← (SP) - 1(PC7...PC0) ← ([SP]), SP ← (SP) - 1ВОЗВРАТ из подпрограммыобработки прерыванияRETI00110010− − − −12(PC15...PC8) ← ([SP]), SP ← (SP) - 1(PC7...PC0) ← ([SP]), SP ← (SP) - 1ХОЛОСТАЯ КОМАНДАNOP00000000− − − −11PC ← (PC) + 161СРАВНЕНИЕ аккумулятора с прямо адресуемымбайтом и ПЕРЕХОД, если не равноНАИМЕНОВАНИЕ КОМАНДЫКОМАНДЫ ОПЕРАЦИЙ С БИТАМИМНЕМОНИКАКОДПРИЗНАКИ ЧИСЛОБ ЦCOVACPТаблица П2.6.СОДЕРЖАНИЕ КОМАНДЫСБРОСCbit11000011110000100 − − −* * * −1211C←0bit ← 0SETB CSETB bit11010011110100101 − − −* * * −1211C←1bit ← 1CPLCPLCbit_10110011 C − − −10110010 * * * −1211__C ← (C)___bit ← (bit)ANLANLC, bitC, /bit1000001010110000+ − − −+ − − −2222C ← (C) ∧ (bit)___C ← (C) ∧ (bit)CLRCLRORLORLC, bitC, /bit0111001010100000+ − − −+ − − −2222C ← (C) ∨ (bit)___C ← (C) ∨ (bit)MOVMOVC, bitbit, C1010001010010010+ − − −− * * −2212C ← (bit)bit ← (C)62переносабитаУСТАНОВКАпереносабитаИНВЕРСИЯпереносабитаЛОГИЧЕСКОЕ "И"бита и переносаинверсии бита и переносаЛОГИЧЕСКОЕ "ИЛИ"бита и переносаинверсии бита и переносаПЕРЕСЫЛКАбита в переноспереноса в бит63Приложение 3.Отладка программ эмулятором EMU-51Эмулятор (отладчик) представляет собой системную программу,предназначенную для локализации и исправления логических ошибок впользовательской программе.Рассматриваемый эмулятор EMU-51 работает в среде MS-DOS.Запустить его можно из Windows, открыв файл emu51.exe.
Переключение между полноэкранным и оконным режимами работы в MS-DOSпроизводится клавишами ALT+ENTER. Желательно использовать полноэкранный режим. Перед выходом из MS-DOS необходимо завершитьработу эмулятора, нажав F10.Все числа в эмуляторе вводятся в шестнадцатеричной системесчисления (по умолчанию).Перед запуском эмулятора необходимо сформировать из текстового файла с расширением .asm, содержащего отлаживаемую программу на языке ассемблера, исполняемый файл, т.е. файл, которыйбудет загружен в ПЗУ микропроцессора. Отлаживаемый файл должениметь расширение .tsk или .obj и находиться в одной папке с программой эмулятора.После загрузки эмулятора на экран дисплея выводятся 4 окна:сегмент регистров и регистры специальных функций «RSEG & SFR»,файл программы «ФАЙЛ : », сегмент памяти данных «DSEG» и «КОММЕНТАРИИ», а также строка состояния в нижней части экрана (рис.П3.1).