Система команд микроконтроллера семейства 8051.
Название команды
| Мнемокод
| КОП
| Т
| Б
| Ц
| Операция
| Пересылка в аккумулятор из регистра (n=0÷7)
| MOV A, Rn
| 11101rrr
| 1
| 1
| 1
| (A) (Rn)
| Пересылка в аккумулятор прямоадресуемого байта
| MOV A, ad
| 11100101
| 3
| 2
| 1
| (A) (ad)
| Пересылка в аккумулятор байта из РПД (i=0,1)
| MOV A, @Ri
| 1110011i
| 1
| 1
| 1
| (A) ((Ri))
| Загрузка в аккумулятор константы
| MOV A, #d
| 01110100
| 2
| 2
| 1
| (A) #d
| Пересылка в регистр из аккумулятора
| MOV Rn, A
| 11111rrr
| 1
| 1
| 1
| (Rn) (A)
| Пересылка в регистр прямоадресуемого байта
| MOV Rn, ad
| 10101rrr
| 3
| 2
| 2
| (Rn) (ad)
| Загрузка в регистр константы
| MOV Rn, #d
| 01111rrr
| 2
| 2
| 1
| (Rn) #d
| Пересылка по прямому адресу аккумулятора
| MOV ad, A
| 11110101
| 3
| 2
| 1
| (ad) (A)
| Пересылка по прямому адресу регистра
| MOV ad, Rn
| 10001rrr
| 3
| 2
| 2
| (ad) (Rn)
| Пересылка прямоадресуемого байта по прямому адресу
| MOV add, ads
| 10000101
| 9
| 3
| 2
| (add) (ads)
| Пересылка байта из РПД по прямому адресу
| MOV ad, @Ri
| 1000011i
| 3
| 2
| 2
| (ad) ((Ri))
| Пересылка по прямому адресу константы
| MOV ad, #d
| 01110101
| 7
| 3
| 2
| (ad) #d
| Пересылка в РПД из аккумулятора
| MOV @Ri, A
| 1111011i
| 1
| 1
| 1
| ((Ri)) (A)
| Пересылка в РПД прямоадресуемого байта
| MOV @Ri, ad
| 0110011i
| 3
| 2
| 2
| ((Ri)) (ad)
| Пересылка в РПД константы
| MOV @Ri, #d
| 0111011i
| 2
| 2
| 1
| ((Ri)) #d
| Загрузка указателя данных
| MOV DPTR, #d16
| 10010000
| 13
| 3
| 2
| (DPTR) #d16
| Пересылка в аккумулятор байта из ПП
| MOVC A, @A+DPTR
| 10010011
| 1
| 1
| 2
| ((A) +(DPTR))
| Пересылка в аккумулятор байта из ПП
| MOVC A, @A+PC
| 10000011
| 1
| 1
| 2
| (PC) (PC)+1,
(A) ((A)+(PC))
| Название команды
| Мнемокод
| КОП
| Т
| Б
| Ц
| Операция
| Пересылка в аккумулятор байта из ВПД
| MOVX A, @Ri
| 1110001i
| 1
| 1
| 2
| (A) ((Ri))
| Пересылка в аккумулятор байта из расширенной ВПД
| MOVX A,@DPTR
| 11100000
| 1
| 1
| 2
| (A) ((DPTR))
| Пересылка в ВПД из аккумулятора
| MOVX @Ri, A
| 1111001i
| 1
| 1
| 2
| ((Ri)) (A)
| Пересылка в расширенную ВПД из аккумулятора
| MOVX @DPTR,A
| 11110000
| 1
| 1
| 2
| ((DPTR)) (A)
| Загрузка в стек
| PUSH ad
| 11000000
| 3
| 2
| 2
| (SP) (SP) + 1, ((SP)) (ad)
| Извлечение из стека
| POP ad
| 11010000
| 3
| 2
| 2
| (ad) (SP),
(SP) (SP) - 1
| Обмен аккумулятора с регистром
| XCH A, Rn
| 11001rrr
| 1
| 1
| 1
| (A) ↔ (Rn)
| Обмен аккумулятора с прямоадресуемым байтом
| XCH A, ad
| 11000101
| 3
| 2
| 1
| (A) ↔ (ad)
| Обмен аккумулятора с байтом из РПД
| XCH A, @Ri
| 1100011i
| 1
| 1
| 1
| (A) ↔ ((Ri))
| Обмен младших тетрад аккумулятора и байта РПД
| XCHD A, @Ri
| 1101011i
| 1
| 1
| 1
| (A0…3) ↔((Ri)0…3)
| Сложение аккумулятора с регистром (n=0÷7)
| ADD A, Rn
| 00l01rrr
| 1
| 1
| 1
| (A) (A) + (Rn)
| Сложение аккумулятора с прямоадресуемым байтом
| ADD A, ad
| 00100101
| 3
| 2
| 1
| (A) (A) + (ad)
| Сложение аккумулятора с байтом из РПД (i = 0,1)
| ADD A, @Ri
| 0010011i
| 1
| 1
| 1
| (A) (A) + ((Ri))
| Сложение аккумулятора с константой
| ADD A, #d
| 00100100
| 2
| 2
| 1
| (A) (A) + #d
| Сложение аккумулятора с регистром и переносом
| ADDC A, Rn
| 00111rrr
| 1
| 1
| 1
| (A) (A) + (Rn) + (C)
| Сложение аккумулятора с прямоадресуемым байтом и переносом
| ADDC A, ad
| 00110101
| 3
| 2
| 1
| (A) (A) + (ad) + (C)
| Сложение аккумулятора с байтом из РПД и переносом
| ADDC A, @Ri
| 0011011i
| 1
| 1
| 1
| (A) (A) + ((Ri)) + (C)
| Сложение аккумулятора с константой и переносом
| ADDC A, #d
| 00110100
| 2
| 2
| 1
| (A) (A) + # d + (C)
| Десятичная коррекция аккумулятора
| DA A
| 11010100
| 1
| 1
| 1
| Если (А0…3)>9 или ((AC)=1),то(А0…3) (А0…З) + 6, затем если (А4…7) >9 или ((С)=1), то (А4…7) (А4…7) + 6
| Вычитание из аккумулятора регистра и заёма
| SUBB A, Rn
| 10011rrr
| 1
| 1
| 1
| (A) (A) - (C) - (Rn)
| Вычитание из аккумулятора прямоадресуемого байта и заема
| SUBB A, ad
| 10010101
| 3
| 2
| 1
| (A) (A) - (C) - ((ad))
| Вычитание из аккумулятора байта РПД и заема
| SUBB А, @Ri
| 1001011i
| 1
| 1
| 1
| (A) (A) - (C) - ((Ri))
| Вычитание из аккумулятора константы и заема
| SUBB А, d
| 10010100
| 2
| 2
| 1
| (A) (A) - (C) - #d
| Инкремент аккумулятора
| INC А
| 00000100
| 1
| 1
| 1
| (A) (A) + 1
| Инкремент регистра
| INC Rn
| 00001rrr
| 1
| 1
| 1
| (Rn) (Rn) + 1
| Инкремент прямоадресуемого байта
| INC ad
| 00000101
| 3
| 2
| 1
| (ad) (ad) + 1
| Инкремент байта в РПД
| INC @Ri
| 0000011i
| 1
| 1
| 1
| ((Ri)) ((Ri)) + 1
| Инкремент указателя данных
| INC DPTR
| 10100011
| 1
| 1
| 2
| (DPTR ) (DPTR) + 1
| Декремент аккумулятора
| DEC A
| 00010100
| 1
| 1
| 1
| (A) (A) – 1
| Декремент регистра
| DEC Rn
| 00011rrr
| 1
| 1
| 1
| (Rn) (Rn) – 1
| Декремент прямоадресуемого байта
| DEC ad
| 00010101
| 3
| 2
| 1
| (ad) (ad) – 1
| Декремент байта в РПД
| DEC @Ri
| 0001011i
| 1
| 1
| 1
| ((Ri)) ((Ri)) - 1
| Умножение аккумулятора на регистр В
| MUL AB
| 10100100
| 1
| 1
| 4
| (B)(A) (A)*(В)
| Деление аккумулятора на регистр В
| DIV AB
| 10000100
| 1
| 1
| 4
| (B).(A) (A)/(В)
|
Логическое И аккумулятора и регистра
| ANL A, Rn
| 01011rrr
| 1
| 1
| 1
| (A) (A) AND (Rn)
| Логическое И аккумулятора и прямоадресуемого байта
| ANL A, ad
| 01010101
| 3
| 2
| 1
| (A) (A) AND (ad)
| Логическое И аккумулятора и байта из РПД
| ANL A, @Ri
| 0101011i
| 1
| 1
| 1
| (A) (A) AND ((Ri))
| Логическое И аккумулятора и константы
| ANL A, #d
| 01010100
| 2
| 2
| 1
| (A) (A) AND #d
| Логическое И прямоадресуемого байта и аккумулятора
| ANL ad, A
| 01010010
| 3
| 2
| 1
| (ad) (ad) AND (A)
| Логическое И прямоадресуемого байта и константы
| ANL ad, #d
| 01010011
| 7
| 3
| 2
| (ad) (ad) AND #d
| Логическое ИЛИ аккумулятора и регистра
| ORL A, Rn
| 01001rrr
| 1
| 1
| 1
| (A) (A) OR (Rn)
| Логическое ИЛИ аккумулятора и прямоадресуемого байта
| ORL A, ad
| 01000101
| 3
| 2
| 1
| (A) (A) OR (ad)
| Логическое ИЛИ аккумулятора и байта из РПД
| ORL A, @Ri
| 0100011i
| 1
| 1
| 1
| (A) (A) OR ((Ri))
| Логическое ИЛИ аккумулятора и константы
| ORL A, #d
| 01000100
| 2
| 2
| 1
| (A) (A) OR #d
| Логическое ИЛИ прямоадресуемого байта и аккумулятора
| ORL ad, A
| 01000010
| 3
| 2
| 1
| (ad) (ad) OR (A)
| Логическое ИЛИ прямоадресуемого байта и константы
| ORL ad, #d
| 01000011
| 7
| 3
| 2
| (ad) (ad) OR #d
| Исключающее ИЛИ аккумулятора и регистра
| XRL A, Rn
| 01101rrr
| 1
| 1
| 1
| (A) (A) XOR (Rn)
| Исключающее ИЛИ аккумулятора и прямоадресуемого байта
| XRL A, ad
| 01100101
| 3
| 2
| 1
| (A) (A) XOR (ad)
| Исключающее ИЛИ аккумулятора и байта из РПД
| XRL A, @Ri
| 0110011i
| 1
| 1
| 1
| (A) (A) XOR ((Ri))
| Исключающее ИЛИ аккумулятора и константы
| XRL A, #d
| 01100100
| 2
| 2
| 1
| (A) (A) XOR #d
| Исключающее ИЛИ прямоадресуемого байта и аккумулятора
| XRL ad, A
| 01100010
| 3
| 2
| 1
| (ad) (ad) XOR (A)
| Исключающее ИЛИ прямоадресуемого байта и константы
| XRL ad, #d
| 01100011
| 7
| 3
| 2
| (ad) (ad) XOR #d
| Сброс аккумулятора
| CLR A
| 11100100
| 1
| 1
| 1
| (A) 0
| Инверсия аккумулятора
| CPL A
| 11110100
| 1
| 1
| 1
| (A) NOT(A)
| Сдвиг аккумулятора влево циклический
| RL A
| 00100011
| 1
| 1
| 1
| (An+1) (An), n=0÷6, (A0) (A7)
| Сдвиг аккумулятора влево через перенос
| RLC A
| 00110011
| 1
| 1
| 1
| (An+1) (An), n=0÷6
(A0) (C), (C) (A7)
| Сдвиг аккумулятора вправо циклический
| RR A
| 00000011
| 1
| 1
| 1
| (An) (An+1), n=0÷6, (A7) (A0)
| Сдвиг аккумулятора вправо через перенос
| RRC A
| 00010011
| 1
| 1
| 1
| (An) (An+1), n=0÷6
(A7) (C), (C) (A0)
| Обмен местами тетрад в аккумуляторе
| SWAP A
| 11000100
| 1
| 1
| 1
| (A0…3) ↔ (A4…7)
|
Сброс переноса
| CLR С
| 11000011
| 1
| 1
| 1
| (C) 0
| Сброс бита
| CLR bit
| 11000010
| 4
| 2
| 1
| (b) 0
| Установка переноса
| SETB С
| 11010011
| 1
| 1
| 1
| (C) 1
| Установка бита
| SETB bit
| 11010010
| 4
| 2
| 1
| (b) 1
| Инверсия переноса
| CPL С
| 10110011
| 1
| 1
| 1
| (C) NOT(C)
| Инверсия бита
| CPL bit
| 10110010
| 4
| 2
| 1
| (b) NOT(b)
| Логическое И бита и переноса
| ANL С, bit
| 10000010
| 4
| 2
| 2
| (C) (C) AND (b)
| Логическое И инверсии бита и переноса
| ANL С, /bit
| 10110000
| 4
| 2
| 2
| (C) (C) AND (NOT(b))
| Логическое ИЛИ бита и переноса
| ORL С, bit
| 01110010
| 4
| 2
| 2
| (C) (C) OR (b)
| Логическое ИЛИ инверсии бита и переноса
| ORL С, /bit
| 10100000
| 4
| 2
| 2
| (C) (C) OR (NOT(b))
| Пересылка бита в перенос
| MOV С, bit
| 10100010
| 4
| 2
| 1
| (C) (b)
| Пересылка переноса в бит
| MOV bit, С
| 10010010
| 4
| 2
| 2
| (b) (C)
| Длинный переход в полном объеме ПП
| LJMP ad16
| 00000010
| 12
| 3
| 2
| (PC) ad16
| Абсолютный переход внутри страницы в 2 Кб
| AJMP ad11
| a10a9a800001
| 6
| 2
| 2
| (PC) (PC) + 2, (PC0-10) ad11
| Короткий относительный переход внутри страницы в 256 байт
| SJMP rel
| 10000000
| 5
| 2
| 2
| (PC) (PC) + 2, (PC) (PC) +rel
| Косвенный относительный переход
| JMP @A+DPTR
| 01110011
| 1
| 1
| 2
| (PC) (A) + (DPTR)
| Переход, если аккумулятор равен нулю
| JZ rel
| 01100000
| 5
| 2
| 2
| (PC)(PC)+2, если (A)=0, то (PC)(PC)+rel
| Переход, если аккумулятор не равен нулю
| JNZ rel
| 01110000
| 5
| 2
| 2
| (PC)(PC)+2, если (A)≠0, то (PC)(PC)+rel
| Переход, если перенос равен единице
| JC rel
| 01000000
| 5
| 2
| 2
| (PC)(PC)+2, если (С)=1, то (PC)(PC)+rel
| Переход, если перенос равен нулю
| JNC rel
| 01010000
| 5
| 2
| 2
| (PC)(PC)+2, если (С)=0, то (PC)(PC)+rel
| Переход, если бит равен единице
| JB bit, rel
| 00100000
| 11
| 3
| 2
| (PC)(PC)+3, если (b)=l, то (PC)(PC)+rel
| Переход, если бит равен нулю
| JNB bit, rel
| 00110000
| 11
| 3
| 2
| (PC)(PC)+3, если (b)=0, то (PC)(PC)+rel
| Переход, если бит установлен, с последующим сбросом бита
| JBC bit, rel
| 00010000
| 11
| 3
| 2
| (PC) (PC) + 3, если (b)=1, то (b) 0 и (PC) (PC) + rel
| Декремент регистра и переход, если не нуль
| DJNZ Rn, rel
| 11011rrr
| 5
| 2
| 2
| (PC) (PC) + 2, (Rn) (Rn) - 1,
если (Rn) ≠ 0, то (PC) (PC) + rel
| Декремент прямоадресуемого байта и переход, если не нуль
| DJNZ ad, rel
| 11010101
| 8
| 3
| 2
| (PC) (PC) + 2, (ad) (ad) - 1, если (ad) ≠ 0, то (PC) (PC) + rel
| Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно
| CJNE A, ad, rel
| 10110101
| 8
| 3
| 2
| (PC) (PC) + 3,если (A) ≠ (ad), то (PC) (PC) + rel,если (A) < (ad), то (C) 1, иначе (C) 0
| Сравнение аккумулятора с константой и переход, если не равно
| CJNE A, #d, rel
| 10110100
| 10
| 3
| 2
| (PC) (PC) + 3,если (A) ≠ #d, то (PC) (PC) + rel,если (A) < #d, то (C) 1, иначе (С) 0
| Сравнение регистра с константой и переход, если не равно
| CJNE Rn, #d, rel
| 10111rrr
| 10
| 3
| 2
| (PC) (PC) + 3,если (Rn) ≠ #d, то (PC) (PC) + rel,если (Rn) < #d, то (C) 1, иначе (С) 0
| Сравнение байта в РПД с константой и переход, если не равно
| CJNE @Ri,#d,rel
| 1011011i
| 10
| 3
| 2
| (PC) (PC) + 3,если ((Ri)) ≠ #d, то (PC) (PC) + rel,если ((Ri)) < #d, то (C) 1, иначе (C) 0
| Длинный вызов подпрограммы
| LCALL adl6
| 00010010
| 12
| 3
| 2
| (PC) (PC) + 3, (SP) (SP) +1,
((SP)) (PC0…7), (SP) (SP) + 1,
((SP)) (PC8…15), (PC) ad16
| Абсолютный вызов подпрограммы в пределах страницы в 2 Кб
| ACALL ad11
| a10a9a810001
| 6
| 2
| 2
| (PC) (PC) + 2, (SP) (SP) + 1,
((SP)) (PC0…7), (SP) (SP) + 1,
((SP)) (PC8…15), (PC0-10) ad11
| Возврат из подпрограммы
| RET
| 00100010
| 1
| 1
| 2
| (PC8…15) ((SP)), (SP) (SP) - 1,
(PC0…7) ((SP)), (SP) (SP) – 1
| Возврат из подпрограммы обработки прерывания
| RETI
| 00110010
| 1
| 1
| 2
| (PC8…15) ((SP)), (SP) (SP) - 1,
(PC0…7) ((SP)), (SP) (SP) – 1
| Пустая операция
| NOP
| 00000000
| 1
| 1
| 1
| (PC) (PC) + 1
|
Приложение Б
Подпрограмма основного опроса датчиков, передача сигнала на последовательный порт (модем) адреса датчика при его ;срабатывании.
OPROS:
в P1.0..P1.3 записывается адресующий код мультиплексора – код
проверяемого датчика
ADDRESS_BIT0 EQU P1.0 ;адрес бита порта P1.0
ADDRESS_BIT1 EQU P1.1 ;адрес бита порта P1.1
ADDRESS_BIT2 EQU P1.2 ;адрес бита порта P1.2
ADDRESS_BIT3 EQU P1.3 ;адрес бита порта P1.3
TEMP EQU R1 ;адрес регистра R1
P0.0, P0.1 – биты выходного сигнала мультиплексоров №1 и №2 соответственно
BIT_Q_MUX1 EQU P0.0 ;адрес бита порта P0.0
BIT_Q_MUX2 EQU P0.1 ;адрес бита порта P0.1
CLR A ;сброс аккумулятора
CLR P1.4 ;разрешение работы мультиплексора №1
CLR P1.5 ;разрешение работы мультиплексора №2
CALL INIT ;вызов подпрограммы инициализации последовательного ;порта
START_OPROS:
MOV C,ACC.0 ;запись адреса проверяемого ;датчика
MOV ADDRESS_BIT0,С
в порты P1.0..P1.3 через бит ;переноса
MOV C,ACC.1
MOV ADDRESS_BIT1,C
MOV C,ACC.2
MOV ADDRESS_BIT2,C
MOV C,ACC.3
MOV ADDRESS_BIT3,C
JNB BIT_Q_MUX1,NOT_ERR
если не сработал датчик
подсоединенный к 1-му
мультиплексору, то проверить
датчик по такому же адресу 2-го
мультиплексора
CLR TEMP ;очищаем регистр, для временного хранения адреса датчика
MOV TEMP,A ;заносим адрес сработавшего датчика
ORL A,#00010000B
4-й бит аккумулятора обозначает 1-й мультиплексор
CALL SP_OUT ;вызов подпрограммы передачи ;данных о сработавшем датчике через последовательный порт
MOV A,TEMP ;восстанавливаем значение адреса ;датчика
NOT_ERR:
JNB BIT_Q_MUX2,END_OPROS
если не сработал датчик ;подсоединенный ко 2-му ;мультиплексору, то продолжить сканирование
CLR TEMP ;очищаем регистр, для временного ;хранения адреса датчика
MOV TEMP,A ;заносим адрес сработавшего ;датчика
ORL A,#00100000B
5-й бит аккумулятора обозначает ;2-й мультиплексор
CALL SP_OUT ;вызов подпрограммы передачи ;данных о сработавшем датчике через последовательный порт
MOV A,TEMP ;восстанавливаем значение адреса ;датчика
END_OPROS:
CJNE A,#00001111B,NOT_EXIT
если была опрошена последняя ;пара датчиков, то
RET ;возвращение из подпрограммы ;опроса датчиков
NOT_EXIT:
INC A ;увеличение аккумулятора на 1, для опроса следующей пары датчиков
JMP START_OPROS
продолжаем опрос
Подпрограмма инициализации последовательного порта в режиме 3 со скоростью передачи данных 2400 бод.
INIT: MOV SCON,#00100010B
MOV TMOD,#00100000B
;настройка Т/С1
MOV PCON,#0 ;сброс бита SMOD
MOV TH1,#<.NOT.13+1
K=f/(12*32*0.0024)= 13, где ;f=12МГц есть частота синхронизации микроконтроллера
SET TR1 ;включить Т/С1
RET ;вернуться из подпрограммы
Пподпрограмма передачи данных и контрольного бита данных через последовательных порт
SP_OUT: MOV C,P ;пересылка контрольного бита
MOV TB8,C ;из флага паритета SCON.3
M1: JNT T1,M1 ;синхронизация передачи
CLR T1 ;сброс бита SCON.1
MOV SBUF,A ;передача контрольного бита и содержимого аккумулятора через последовательный порт
RET
|
Обсуждений еще не было, будьте первым... ↓↓↓
|
|
Популярное: Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (175)
|
Почему 1285321 студент выбрали МегаОбучалку...
Система поиска информации
Мобильная версия сайта
Удобная навигация
Нет шокирующей рекламы
|