Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Курс лекций по микропроцессорам 1999.DOC
Скачиваний:
197
Добавлен:
21.02.2014
Размер:
3.02 Mб
Скачать

Структура команд orl( дизъюнкция), xrl (сумма по модулю 2) аналогична предыдущей.

CLR A - очистка аккумулятора;

CPL A - -инвертирование аккумулятора;

В этих логических командах признаки не формируются, за исключением бита паритета P, который получает значение единицы, если результат операции записывается в аккумулятор.

PR(PL) A - правый(левый) циклический сдвиг;

PRC(PLC) A - через бит С;

При сдвигах формируются признаки P и C.

Битовые команды (БК):

При выполнении БК бит С выполняет функции аккумулятора.

Команды пересылки бит:

mov C,bit

mov bit,C

SETB bit(C) - установка бита С (или прямоадресуемого бита)

CLR bit (C) - очистка бита С (или прямоадресуемого бита)

CPL C(bit) - инверсия бита С (или прямоадресуемого бита)

ANL C,bit

ORL C,bit

При работе с битами используется только прямая адресация.

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

Длинный безусловный переход и обращение к подпрограмме:

LJMP addr16[ст: мл] - 3 байта

LCALL addr16 - обращение к подпрограмме с 3 байта

Абсолютные переходы:

AJMP addr11 - 2 байта

ACALL addr 11 -переход в пределах 2K

В адресе следующей команды замещаются 11 мл. разрядов, причем разряды А10,А9,А8 содержаться в первом байте команды.

Косвенные переходы:

JMP @A+DPTR (1б.) - суммируется адрес в процессе выполнения программы. Можно выполнять множественное ветвление по адресу неизвестному в момент написания программы, модифицируя А или DPTR.

SJMP rel (2б.) - относительная адресация rel величина смещения в дополнительном коде. Это команда короткого перехода

Условные переходы:

JZ(JNZ) rel - может быть реализована после любой операции, результат которой записывается в аккумулятор.

JC(JNC) rel – переход по значению бита С.

DJNZ Rn(ad), rel - Rn:=Rn-1 ; Если результат операции не равен 0 - выполняется переход, иначе - следующая команда.

CJNE A,(ad, # d),rel

CLNE (Rn,@Ri),#d,rel

Выполняется вычитание из первого операнда второго; если результат операции не равен нулю - выполняется переход, иначе - следующая команда. Содержимое регистров, участвующих в операциях, не изменяется.

При сравнении формируется бит С .

При программировании в объектном коде адрес перехода вычисляется как:

rel:= адрес перехода - адрес команды перехода + длина команды перехода;

RET - возврат из подпрограммы

RETI - возврат из прерывания.

Битовые переходы:

JB(JNB) bit, rel

JBC bit, rel

Переход выполняется при единичном значении бита, адрес которого указан в команде , после чего бит сбрасывается в 0. Эта команда удобна при реализации семафоров.

Семафор представляет собой флаг, расположенный в памяти, информирующий о состоянии связанного с ним ресурса: 1 – свободен, 0 – занято. Захват ресурса допускается только в том случае, если он свободен. Затем семафор должен быть переведен в состояние “ Занято”. Ресурс – всякий объект, распределяемый системой.

Например, данные от различных источников должны быть записаны в разделяемую память.

WAIT: JBC bit,OK Проверка флага

SJMP WAIT Ресурс занят

.

.

.

OK: Ресурс свободен

.

.

В ОМК отсутствуют команды ввода-вывода. Обращение к внешним устройствам осуществляется как к ячейкам внешней памяти данных.

Использование команд проиллюстрируем на следующем примере:

По сигналу готовности, представляющем собой положительный импульс длительностью 20 мкс, ввести данные через параллельный порт. Разрядность данных 8 бит. Данные записываются в контроллер по условию: xi<=Адоп. Число достоверной информации должно быть К. Вычислить среднее арифметическое и вывести сигналы окончания работы, отрицательный импульс >=40 мкс. При суммировании данных предусмотреть получение результата > 8 бит.

Адоп (0:7)- допустимое значение

i(0:7)- номер. Вводимых данных

Xi(0:7)- значение вводимых данных

Y(0:7) - входной регистр данных

К(0:7) - счетчик программируемой задержки

n(0:2) - кол- во достоверной информации

S (0:16) - сумма

Г(0) - входной сигнал

N(0:7) - результат вычислений

В(0) – выходной импульс

Распределение регистров:

R2 - счетчик достоверных данных

R3- счетчик программируемой задержки

R4- младший байт суммы

R5 - старший байт суммы

R6 - счетчик сдвигов

P2 - ввод информации

P1(0) - ввод сигнала готовности

P1(1) - вывод сигнала

n: .EQUL 8

k: .EQAL 20

.ORG 100h

mov R2, #n; Подготовка регистров

mov R3, #k

mov R6, #3

clr A

mov R4, A

mov R5, A

mov P2, #0ffh; Настройка портов

mov P1, #xxxxxx01bh

setb P1.1

wait1: jnb P1.0, wait1; Анализ готовности

wait0: jb P1.0, wait0

mov A, P2; Чтение вводимых данных

cjne A, #Aдоп,M1; Сравнение с Адоп

M2: clr C; Суммирование

add A, R4

jc M3; Проверка переполнения

M4: mov R4, A

djnz R2, wait1

M1: jnc wait1; Проверка Xi < Адоп

sjmp M2

M3: inr R5; Подсчет числа переполнений

sjmp M4

M5: clr C; Вычисление средне-арифметического

mov A, R5

rrc A

mov R5, A

mov R4, A

djnz R6, M5

clr P1.1;Формирование выходного импульса

М6 : djnz R3, М6;Время выполнения DJNZ 2мкс, поэтому (R3)=20

setb P1.1

.end

Соседние файлы в папке лекции