Микроконтроллеры семейства MCS51 Intel

Микроконтроллеры семейства MCS51 Intel

Инструкции MCS51TM Intel

Инструкции, модифицирующие флаги (1)

|Инструк| C OV|Инструк| C OV|

|ция |AC |ция |AC |

|ADD | X |CLR C | O |

| |X X| | |

|ADDC | X |CPL C | X |

| |X X| | |

|SUBB | X |ANL | X |

| |X X|C,bit | |

|MUL | O |ANL | X |

| |X |C,/bit | |

|DIV | O |ORL | X |

| |X |C,bit | |

|DA | X |ORL C, | X |

| | |bit | |

|RRC | X |MOV | X |

| | |C,bit | |

|RLC | X |CJNE | X |

| | |SETB C | 1 |

Замечание. Операции с регистром специальных функций с регистром PSW или с

его битами также модифицируют флаги.

Условные обозначения операндов:

Rn Регистр R7-R0 текущего банка рабочих регистров

direct 8-bit прямой адрес. Это может быть ячейка внутреннего

ОЗУ данных (0-7F h) или SFR (7Fh - 0FFh).

@Ri 8-bit косвенный адрес внутреннего ОЗУ (00 - 0ffh) равен

содержимому указателя R0 или R1.

#data 8-bit непосредственная константа, включенная в инструкцию.

#data 16 16-bit непосредственная константа, включенная в инструкцию.

addr 16 16-bit адрес длинного перехода, используемый командами

LCALL и LJMP.

addr 11 11-bit адрес относительного перехода, используемый командами

ACALL и AJMP.

rel 8-bit смещение со знаком, используемое командой SJMP и

командами условных переходов.

bit Прямой адрес бита внутреннего ОЗУ или SFR.

Таблица 1. Список инструкций MCS51TM Intel.

|Мнемоника |Содержание |Byt|Tac|

| | |e |t |

|1. Арифметические операции. |

|ADD A,Rn |(A) + (Rn) -> A Сложение |1 |12 |

|ADD |(A) + (direct) -> A |2 |12 |

|A,direct | | | |

|ADD A,@Ri|(A) + ( (Ri) ) -> A |1 |12 |

|ADD |(A) + #data -> A |2 |12 |

|A,#data | | | |

|ADDC A,Rn |(A) + (Rn) + c -> A Сложение с |1 |12 |

| |учетом переноса | | |

|ADDC |(A) + (direct) + c -> A |2 |12 |

|A,direct | | | |

|ADDC A,@Ri |(A) + ( (Ri) ) + c -> A |1 |12 |

|ADDC A,#data|(A) - #data - c -> A |2 |12 |

|SUBB A,Rn |(A) - (Rn) - c -> A Вычитание с|1 |12 |

| |учетом заема | | |

|SUBB A,direct|(A) - (direct) - c -> A |2 |12 |

|SUBB A,@Ri |(A) - ( (Ri) ) - c -> A |1 |12 |

|SUBB A,#data |(A) - #data - c -> A |2 |12 |

|INC A |(A) + 1 -> A |1 |12 |

| |Инкремент ( увеличение на единицу ) | | |

|INC Rn |(Rn) + 1 -> Rn |1 |12 |

|INC direct |(direct) + 1 -> direct |2 |12 |

|INC @Ri |( (Ri) ) + 1 -> ( Ri ) |1 |12 |

|INC DPTR |(DPTR) + 1 -> DPTR |1 |24 |

|DEC A |(A) - 1 -> A |1 |12 |

| |Декремент ( уменьшение на единицу ) | | |

|DEC Rn |(Rn) - 1 -> Rn |1 |12 |

|DEC direct |(direct) - 1 -> direct |2 |12 |

|DEC @Ri |( (Ri) ) - 1 -> ( Ri ) |1 |12 |

|MUL AB |(A) * (B) -> AB Умножение |1 |48 |

| |(AB - произведение) | | |

|DIV AB |(A) / (B) -> AB Деление |1 |48 |

| |(A - частное B - остаток) | | |

|DA A | Десятичная коррекция аккумулятора |1 |12 |

|2. Логические операции. |

|ANL A,Rn |(A) и (Rn) -> A Логическое |1 |12 |

| |побитовое И | | |

|ANL A,direct |(A) и (direct) -> A |2 |12 |

|ANL A,@Ri |(A) и ( (Ri) ) -> A |1 |12 |

|ANL A,#data |(A) и #data -> A |2 |12 |

|ANL direct,A |(direct) и (A) -> direct |2 |12 |

|ANL |(direct) и #data -> direct |3 |24 |

|direct,#data | | | |

|ORL A,Rn |(A) или (Rn) -> A |1 |12 |

| |Логическое побитовое ИЛИ | | |

|ORL A,direct |(A) или (direct) -> A |2 |12 |

|ORL A,@Ri |(A) или ( (Ri) ) -> A |1 |12 |

|ORL A,#data |(A) или #data -> A |2 |12 |

|ORL direct,A |(direct) или (A) -> direct |2 |12 |

|ORL |(direct) или #data -> direct |3 |24 |

|direct,#data | | | |

|XRL A,Rn |(A) ^ (Rn) -> A Логическое |1 |12 |

| |побитовое исключающее ИЛИ | | |

|XRL A,direct |(A) ^ (direct) -> A |2 |12 |

|XRL A,@Ri |(A) ^ ( (Ri) ) -> A |1 |12 |

|XRL A,#data |(A) ^ #data -> A |2 |12 |

|XRL direct,A |(direct) ^ (A) -> direct |2 |12 |

|XRL |(direct) ^ #data -> direct |3 |24 |

|direct,#data | | | |

|CLR A |00h -> A Обнуление |1 |12 |

|Мнемоника |Содержание |Byt|Tac|

| | |e |t |

|CPL A |not (A) -> A Инверсия |1 |12 |

|RL A |Циклический сдвиг аккумулятора влево на один |1 |12 |

| |бит | | |

|RLC A |Циклический сдвиг аккумулятора влево на один |1 |12 |

| |бит через бит переноса | | |

|RR A |Циклический сдвиг аккумулятора вправо на один|1 |12 |

| |бит | | |

|RRC A |Циклический сдвиг аккумулятора вправо на один|1 |12 |

| |бит через бит переноса | | |

|SWAP A |Обмен тетрадами в аккумуляторе |1 |12 |

|3. Пересылка данных. |

|MOV A,Rn |(Rn) -> A |1 |12 |

|MOV A,direct |(direct) -> A |2 |12 |

|MOV A,@Ri |( (Ri) ) -> A |1 |12 |

|MOV A,#data |#data -> A |2 |12 |

|MOV Rn,A |(A) -> Rn |1 |12 |

|MOV Rn,direct|(direct) -> Rn |2 |24 |

|MOV Rn,#data |#data -> Rn |2 |12 |

|MOV direct,A |(A) -> direct |2 |12 |

|MOV direct,Rn|(Rn) -> direct |2 |24 |

|MOV |(direct) -> direct |3 |24 |

|direct,direct| | | |

|MOV |( (Ri) ) -> direct |2 |24 |

|direct,@Ri | | | |

|MOV |#data -> direct |3 |24 |

|direct,#data | | | |

|MOV @Ri,A |(A) -> (Ri) |1 |12 |

|MOV |(direct) -> (Ri) |2 |24 |

|@Ri,direct | | | |

|MOV @Ri,#data|#data -> (Ri) |2 |12 |

|MOV |#data16 -> DPTR |3 |24 |

|DPTR,#data16 | | | |

|MOVC |( ( A) + ( DPTR ) ) -> A Обмен с внешне |1 |24 |

|A,@A+DPTR |памятью программ | | |

|MOVC A,@A+PC |( ( A) + ( PC ) ) -> A |1 |24 |

|MOVX A,@Ri |( ( Ri) ) -> A Обмен с |1 |24 |

| |внешней памятью данных | | |

|MOVX A,@DPTR |( ( DPTR ) ) -> A |1 |24 |

|MOVX @Ri,A |(A) -> ( Ri) |1 |24 |

|MOVX @DPTR,A |(A) -> ( DPTR ) |1 |24 |

|PUSH direct |(direct) -> Stack Запись в стек |2 |24 |

|POP direct |(Stack) -> direct Извлечение из стека |2 |24 |

|XCH A,Rn |(A) (Rn) Обмен содержимым |1 |12 |

|XCH A,direct |(A) (direct) |2 |12 |

|XCH A,@Ri |(A) ( (Ri) ) |1 |12 |

|XCHD A,@Ri |(A) ( (Ri) ) Обмен младшей тетрадой |1 |12 |

|4. Битовые операции. |

|CLR C |0 -> с |1 |12 |

|CLR bit |0 -> bit |2 |12 |

|SETB C |1 -> c |1 |12 |

|SETB bit |1 -> bit |2 |12 |

|CPL C |not(c) -> c |1 |12 |

|CPL bit |not(bit) -> bit |2 |12 |

|ANL C,bit |( с ) и (bit) -> c |2 |24 |

|ANL C,/bit |( c ) и not(bit) -> c |2 |24 |

|ORL C,bit |( c ) или (bit) -> c |2 |24 |

|ORL C,/bit |( c ) или not(bit) -> c |2 |24 |

|MOV C,bit |(bit) -> c |2 |12 |

|MOV bit,C |( c ) -> bit |2 |24 |

|JC rel |если с = 1 , то переход по смещению rel |2 |24 |

|JNC rel |если с = 0 , то переход по смещению rel |2 |24 |

|JB bit,rel |если bit = 1 , то переход по смещению rel |3 |24 |

|JNB bit,rel |если bit = 0 , то переход по смещению rel |3 |24 |

|JBC bit,rel |если bit = 1 , то переход по смещению rel |3 |24 |

| |и сброс bit | | |

|5. Команды передачи управления. |

|ACALL addr11 |Вызов процедуры по адресу addr11 |2 |24 |

|LCALL addr16 |Вызов процедуры по адресу addr16 |3 |24 |

|RET |Возврат из процедуры |1 |24 |

|RETI |Возврат из процедуры обработки прерывания |1 |24 |

|AJMP addr11 |Безусловный переход по адресу addr11 |2 |24 |

|LJMP addr16 |Безусловный переход по адресу addr16 |3 |24 |

|SJMP rel |Безусловный переход по смещению rel |2 |24 |

|JMP @A+DPTR |Безусловный переход по смещению (A) |1 |24 |

| |относительно (DPTR) | | |

|JZ rel |Условный переход, если равно 0, по смещению |2 |24 |

| |rel | | |

|JNZ rel |Условный переход, если не равно 0, по |2 |24 |

| |смещению rel | | |

|CJNE |Условный переход, если (A) не равно |3 |24 |

|A,direct,rel |(direct), по смещению rel | | |

|CJNE |Условный переход, если (A) не равно #data, |3 |24 |

|A,#data,rel |по смещению rel | | |

|CJNE |Условный переход, если (Rn) не равно #data, |3 |24 |

|Rn,#data,rel |по смещению rel | | |

|CJNE |Условный переход, если ( (Ri) ) не равно |3 |24 |

|@Ri,#data,rel|#data, по смещению rel | | |

|DJNZ Rn,rel |Декремент Rn и условный переход, если не |2 |24 |

| |равно 0, по смещению rel | | |

|DJNZ |Декремент direct и условный переход, если не |3 |24 |

|direct,rel |равно 0, по смещению rel | | |

|NOP |Пустой оператор. |1 |12 |