Д. В. Андреев Программирование микроконтроллеров mcs-51
Вид материала | Учебное пособие |
Jmp @a+dptr Jmp @a+dptr LCALL addr16 Lcall mt ;(sp)=12h, (pc)=300h MOV A,direct MOV Rn,direct MOV direct,A |
- Руководитель магистерской программы по направлению «Телекоммуникации» профессор, 75.17kb.
- Методика испытания на радиационную стойкость микроконтроллеров с архитектурой mcs-51, 32.31kb.
- Лабораторный комплекс на основе внутрисхемного эмулятора микроконтроллеров стандарта, 78.16kb.
- Семейство mcs-51 фирмы Intel как представитель 8-разрядных микроконтроллеров. Обобщенная, 64.27kb.
- Лекция № " Система команд микроконтроллеров семейства mcs-51.", 76.63kb.
- Методическое обеспечение базовой лабораторной работы практикума «Изучение работы, 244.09kb.
- Нию сроков активного существования микроконтроллеров atmega128 в условиях дозовых воздействий, 11.73kb.
- Комплекс средств для создания программного обеспечения процессорных модулей, реализованных, 22.6kb.
- Ходимы для реализации в составе «систем на кристалле» блоков управления, спроектированных, 48.74kb.
- Дипломная работа, 704.98kb.
Команда "инкремент байта" производит прибавление "1" к содержимому ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
((Ri))((Ri))+1, где i{0,1} | ;(R0)=44H, в РПД (44H)=55H INC @R0 ;(R0)=44H, ;в РПД (44H)=56H |
INC DPTR | 1 0 1 0 0 0 1 1 | |
Команда "инкремент двух байтов" производит прибавление "1" к содержимому 16-битового указателя данных DPTR, причем переполнение младшего байта DPTR (DPL) приводит к увеличению на "1" содержимого старшего байта DPTR (DPH). Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
(DPTR)(DPTR)+1 | ;(DPH)=12H, (DPL)=0FFH, INC DPTR ;(DPH)=13H, ;(DPL)=00H |
JB bit,addr | 0 0 1 0 0 0 0 0 | bit | rel |
Команда "переход, если бит установлен" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, установлено в "1", в противном случае выполняется следующая команда. Содержимое используемого бита не изменяется. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 3. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.
| Алгоритм | Пример | ||||
---|---|---|---|---|---|---|
| если (bit)1, то (PC)(PC)+3+rel если (bit)0, то (PC)(PC)+3 | ;MT6 соответствует ;адресу 2FFH, ;(PC)=2F0H, rel=0CH, (A)=96H JB A.2,MT6 ;(PC)=2FFH, ;(A)=96H | ||||
JBC bit,addr | 0 0 0 1 0 0 0 0 | bit | rel | |
Команда "переход, если бит установлен и сброс этого бита" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, установлено в "1", в противном случае выполняется следующая команда. Содержимое используемого бита сбрасывается в "0". Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JB bit,addr.
Алгоритм | Пример |
если (bit)1, то (PC)(PC)+3+rel и (bit)0 если (bit)0, то (PC)(PC)+3 | ;MT8 соответствует адресу 400H, ;(PC)=3F1H, rel=0CH, (A)=78H JBС A.3,MT8 ;(PC)=400H, (A)=70H |
JC addr | 0 1 0 0 0 0 0 0 | rel |
Команда "переход, если флаг переноса установлен" выполняет переход по адресу addr, если содержимое флага переноса C установлено в "1", в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
если (С)1, то (PC)(PC)+2+rel если (C)0, то (PC)(PC)+2 | ;MT1 соответствует адресу 1F0H, ;(PC)=1FFH, rel=0EFH, (C)=1 JС MT1 ;(PC)=1F0H, (C)=1 |
JMP @A+DPTR | 0 1 1 1 0 0 1 1 | |
Команда "косвенный переход" складывает 8-битовое содержимое аккумулятора A с 16-битовым содержимым указателя данных DPTR и загружает полученный результат в счетчик команд PC. Указанное сложение выполняется таким образом, что перенос из младших 8-ми бит распространяется на старшие биты результата. Содержимое A и DPTR не изменяется. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
(PC)(DPTR[15-0])+(A[7-0]) | ;(PC)=34EH, (DPTR)=329H, (A)=86H JMP @A+DPTR ;(PC)=3AFH |
JNB bit,addr | 0 0 1 1 0 0 0 0 | bit | rel |
Команда "переход, если бит не установлен" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, сброшено в "0", в противном случае выполняется следующая команда. Содержимое используемого бита не изменяется. Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JB bit,addr.
Алгоритм | Пример |
если (bit)0, то (PC)(PC)+3+rel если (bit)1, то (PC)(PC)+3 | ;MT2 соответствует адресу 2FFH, ;(PC)=2F0H, rel=0CH, (A)=96H JNB A.0,MT2 ;(PC)=2FFH, (A)=96H |
JNC addr | 0 1 0 1 0 0 0 0 | rel |
Команда "переход, если флаг переноса не установлен" выполняет переход по адресу addr, если содержимое флага переноса C сброшено в "0", в противном случае выполняется следующая команда. Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JC addr.
Алгоритм | Пример |
если (С)0, то (PC)(PC)+2+rel если (C)1, то (PC)(PC)+2 | ;MT1 соответствует адресу 200H, ;(PC)=1F0H, rel=0EH, (C)=0 JNС MT1 ;(PC)=200H, (C)=0 |
JNZ addr | 0 1 1 1 0 0 0 0 | rel |
Команда "переход, если содержимое аккумулятора не равно нулю" выполняет переход по адресу addr, если содержимое A не ноль, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги и (A) не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
если (A)0, то (PC)(PC)+2+rel если (A)0, то (PC)(PC)+2 | ;MT4 соответствует адресу 183H, ;(PC)=200H, rel=81H, (A)=01H JNZ MT4 ;(PC)=183H, (A)=01H |
JZ addr | 0 1 1 0 0 0 0 0 | rel |
Команда "переход, если содержимое аккумулятора равно нулю" выполняет переход по адресу addr, если все биты аккумулятора равны нулю, в противном случае выполняется следующая команда. Содержимое A не изменяется. Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JNZ addr.
Алгоритм | Пример |
если (A)0, то (PC)(PC)+2+rel если (A)0, то (PC)(PC)+2 | ;MT4 соответствует адресу 231H, ;(PC)=200H, rel=2FH, (A)=00H JZ MT4 ;(PC)=231H, (A)=00H |
LCALL addr16 | 0 0 0 1 0 0 1 0 | addr16[15-8] | addr16[7-0] |
Команда "длинный вызов подпрограммы" вызывает безусловно подпрограмму с начальным адресом addr16. При этом 16-разрядное содержимое счетчика команд PC увеличивается на 3 для получения адреса следующей команды и помещается в стек (сначала следует младший байт), а содержимое указателя стека SP увеличивается на 2. Адрес addr16 получается с помощью второго и третьего байтов команды, которые загружаются соответственно в старший и младший байты PC. Выполнение программы продолжается командой, находящейся по полученному адресу. Подпрограмма, следовательно, может начинаться в любом месте адресного пространства памяти программ объемом до 64 Кбайт. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
(PC)(PC)+3 (SP)(SP)+1, ((SP))(PC[7-0]) (SP)(SP)+1, ((SP))(PC[15-8]) (PC)addr16[15-0] | ;(SP)=10H, (PC)=135H, ;MT соответствует адресу 300H LCALL MT ;(SP)=12H, (PC)=300H, ;в РПД (11H)=38H, (12H)=01H |
LJMP addr16 | 0 0 0 0 0 0 1 0 | addr16[15-8] | addr16[7-0] |
Команда "длинный переход" выполняет безусловный переход по адресу addr16. Этот адрес получается с помощью второго и третьего байтов команды, которые загружаются соответственно в старший и младший байты программного счетчика PC. Переход, таким образом, может осуществляться по любому адресу пространства памяти программ объемом до 64 Кбайт. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
(PC)addr16[15-0] | ;(PC)=234H LJMP 12CH ;(PC)=12CH |
MOV A,Rn ;где n=0-7 | 1 1 1 0 1 r r r | где rrrB=000B-111B |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым заданного регистра Rn выбранного банка, при этом содержимое Rn не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(A)(Rn), где n=0-7 | ;(A)=0FAH, (R6)=93H MOV A,R6 ;(A)=93H, (R6)=93H |
MOV A,@Ri ;где i{0,1} | 1 1 1 0 0 1 1 i | |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(A)((Ri)), где i{0,1} | ;(A)=0FDH, (R1)=30H, ;в РПД (30H)=17H MOV A,@R1 ;(A)=17H, (R1)=30H, ;в РПД (30H)=17H |
MOV A,direct | 1 1 1 0 0 1 0 1 | direct |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(A)(direct) | ;(A)=24H, (DPL)=3DH MOV A,DPL ;(A)=3DH,(DPL)=3DH |
MOV A,#data8 | 0 1 1 1 0 1 0 0 | data8 |
Команда "переслать байт" выполняет загрузку аккумулятора A байтом данных data8, непосредственно указанным в команде, на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(A)data8 | ;(A)=81H MOV A,#0FFH ;(A)=0FFH |
MOV Rn,A ;где n=0-7 | 1 1 1 1 1 r r r | где rrrB=000B-111B |
Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка содержимым аккумулятора A, при этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(Rn)(A), где n=0-7 | ;(A)=55H, (R6)=93H MOV R6,A ;(A)=55H, (R6)=55H |
MOV Rn,direct ;где n=0-7 | 1 0 1 0 1 r r r | direct | где rrrB=000-111B |
Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка содержимым ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций. При этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
(Rn)(direct), где n=0-7 | ;(R5)=81H, в РПД (16H)=22H MOV R5,16H ;(R5)=22H, ;в РПД (16H)=22H |
MOV Rn,#data8 ;где n=0-7 | 0 1 1 1 1 r r r | data8 | где rrrB=000-111B |
Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка байтом данных, непосредственно указанным в команде и имеющим символическое имя data8. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(Rn)data8, где n=0-7 | ;(R2)=5DH MOV R2,#0FCH ;(R2)=0FCH |
MOV direct,A | 1 1 1 1 0 1 0 1 | direct |