Д. В. Андреев Программирование микроконтроллеров 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
Подобный материал:
1   2   3   4   5   6   7   8   9   10

Команда "инкремент байта" производит прибавление "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