Курсовая работа: Обработка сигналов на основе MCS-51
Пример
10.
Передать управление одной из восьми подпрограмм при появлении нулевого уровня
на соответствующем входе порта 1. Высший приоритет входа Р1.3.
ORL P1,#FFH ; настройка Р1 на ввод
L1: MOV А, Р1 ; ввод данных из порта
CPL А ; инверсия аккумулятора
JZ L1 ; ожидание появления первого нуля
JNB Р1.3, SUBR1; переход на первую подпрограмму
JNB P1.4, SUBR2; переход на вторую подпрограмму
…………………………………………
JNB P1.2, SUBR8; переход на восьмую подпрограмму
Порядок
приоритетов определяется порядком проверки нулевого уровня на соответствующем
входе и может быть любым.
2
Арифметические операции в MCS-51
Пример
11.
Сложить десятичные двоично-кодированные числа, размещенные в А и R5:
ADD A, R5 ; двоичное сложение
DA A ; десятичная коррекция результата
Пример
12.
Вычитание байтов. Данная операция может выполняться двумя способами: 1) перевести
уменьшаемое как отрицательное в дополнительный код и выполнить операцию
добавления; 2) перевести уменьшаемое в обратный код и произвести инверсию суммы.
Например,
из данных в А необходимо отнять данные регистра R3. Вычитание выполняем по
алгоритму:
А ¬ 
CPL A ; инверсия аккумулятора
ADD A, R3 ; добавление байтов
CPL A ; получение разности
Пример
13.
Сложить два двоичных многобайтных числа. Оба слагаемых находятся в РПД, начиная
из младшего байта. Начальный адрес слагаемых находится в R0 и R1, формат в R2.
Результат размещают на месте первого слагаемого.
CLR С ; сбрасывание переноса
LOOP: MOV A,@R0 ; загрузка в аккумулятор; бегущего
байта первого слагаемого
ADDC A,@R1 ; добавление байтов с учетом переноса
MOV @R0, A ; размещение байта результата
INC R0 ; смещение указателя
INC Rl ; смещение указателя
DJNZ R2, LOOP ; цикл, если не все байты просуммированы
Время
суммирования составляет (1+7N) мкс, где N – длина в байтах.
Пример
14.
Перемножить число в аккумуляторе на число 2х, где х ≤ 8 –
значение в R6. Умножение на 2 заменяется арифметическим сдвигом аккумулятора и
R0:
MOV R0,#0 ; сброс R0
CLR С ; сброс переноса
LI: RLC А ; сдвиг влево 16-разрядного данного
в А и R0
ХСН А, R0
RLC A
ХСН А, R0
DJNZ R6, L1 ; цикл
Пример
15.
Умножение (MUL). Выполняется для двух беззнаковых чисел, которые находятся в
регистрах А и В. После выполнения операции младший байт произведения
размещается в А, а старший – в В.
Умножение
числа любого формата на константу 168. Число размещено в РПД, адрес младшего
байта находится в R0. Формат числа в байтах задан в R2.
MOV А,#00Н ; сброс аккумулятора А
LOOP: ADD A,@R0 ; загрузка множимого
MOV B,#168D ; загрузка множителя
MUL AB ; перемножение
MOV @R0, A ; запись младшего байта частичного произведения
INC R0 ; прирост адреса
MOV А, В ; пересылка старшего байта частичного
произведения в аккумулятор А
ХСН A,@R0 ; предшествующее формирование очередного байта
произведения
JNZ R2, LOOP ; цикл, если не все байты начального числа перемноженные
на константу.
Полученный
результат находится на месте начального числа и занимает в РПД на 1 байт
больше. Время вычисления произведения составляет (1+13N) мкс, где N – длина
числа в байтах.
Пример
16.
Деление (DIV) – делится содержимое аккумулятора на значение в В. После
деления в А находится целая часть, в В-остаток. Команда может быть использована
для быстрого преобразования двоичного числа в двоично-десятичный формат.
Программа
переводит двоичное число, находящееся в аккумуляторе, в двоично-десятичный код,
который может быть трехразрядным (в десятичной системе счисления). В этом
случае число сотен будет размещено в R0, десятки и единицы –
соответственно в А и В.
MOV B,#100D ; (B) ¬ 100 для вычисления числа сотен в числе
DIV AB ; в А є число сотен (то есть старшая цифра)
MOV R0, A ; пересылка в R0 старшей цифры
ХСН А, В ; пересылка остатка от деления входного числа
в А
MOV B,#10D ; (В)¬10 (определяется число десятков в числе)
DIV AB ; в А – число десятков, В-число единиц
SWAP A ; размещение числа десятков в старшей тетраде
А
ADD А, В ; суммирование остатка (числа единиц)
аккумулятор сохраняет две младших цифры.
Время
преобразования – 16 мкс.
Пример
1
Сравнение двух четырехразрядных чисел, которые подаются на входы порта Р2.
Сигнал
равенства выводится на Р1.1, большее – Р1.2, меньшее – Р1.3, разрешение
сравнения подается на Р1.0.
ANL P1,#11110001В ; сброс всех сравнений
L0: JNB Р1.0, L0 ; ожидание разрешения
MOV A, P2
ANL A,#F0H ; выделение первого числа
SWAP A
MOV В, A ; запоминание первого числа
CLR C ; сброс переноса
MOV А, P2
ANL A,#0FH ; выделение второго числа
SUBB А, В ; вычисление В
JZ LR ; переход, если А=В
JC LL ; переход, если А<В
SETB P1.2 ; результат А>В
JMP EXIT
LR: SETB P1.1 ; результат А=В
JMP EXIT
LL: SETB P1.3 ; результат А<В
EXIT: ; продолжение выполнения
программы
Аналогично
выполняется сравнение чисел большей разрядности. Если необходимо сравнивать
многобайтные числа, то сравнение следует начинать со старших байтов.
3.
Логические операции в MCS-51
Пример
18.
Вывод управляющих сигналов из МК.
Формирование
статических сигналов используется для управления исполнительным механизмом по
принципу «включен-выключен». При этом соответствующие линии портов просто
устанавливаются в 0 или 1.
Если
имеем группу исполнительных механизмов, то для их управления необходимо
сформировать управляющее слово (УС), каждый бит которого – соответствующий
управляющий сигнал.
Для
изменения УС достаточно выполнять логические операции над теми битами портов,
которые необходимо изменить.
Например:
ANL – для сброса тех битов УС, какие заданные нулями
ORL –
для установки бит
XRL –
инверсия бит по времени
Пример
19.
Определение переполнений. При накоплении большого количества слагаемых может
возникнуть переполнение разрядной сетки. Для определения этого используют
модифицированный дополнительный код, который отличается от обычного
дополнительного введением дополнительного знакового разряда. При добавлении k
слагаемых таких разрядов должно быть r = log2 k.
Признаком
переполнения служит отличие знаковых разрядов. Отметим, что использование r
знаковых разрядов суживает диапазон изменения сигналов в 2r раз.
Пример
20.
Сбросить биты 0,2,4,6 порта 2:
ANL Р2,#10101010В; сбрасывание бит 0,2,4,6 порта 2
Пример
21.
Установить биты 0…3 из порта 1
ORL P1.#00001111В; (P1.0…P1.3) ¬ 1111
Можно
также записать
ORL P1,#0FH
Пример
22.
Выбрать нулевой регистровый банк:
ANL PSW,#11100111В; сбрасывание бит RS0 и RS1
Пример
23.
Проинвертировать биты порта Р1, которые отвечают единичным битам в
аккумуляторе:
XRL Р1, А ; сумма по модулю два значения порта 1 и
аккумулятора
Пример
24.
Проинвертировать биты 7,6,5,4 порта 0:
XRL Р,#11110000В; сумма по модулю два значений порта 0 и константы
Можно
также записать XRL Р0, #0F0H
Пример
25.
Проинвертировать биты 0…3 в аккумуляторе:
XRL A,#0FH ; сумма по модулю два значения аккумулятора и
константы
Пример
26.
Настроить биты 1,3,5,7 порта 1 на ввод:
ORL Р1,#10101010В; установление P1.1, P1.3, Р1.5, Р1.7
Пример
2
Маскировка данных при вводе. Ввести в регистр R3 информацию из линий 1,3,5,6,7
порта 1:
MOV А, Р1 ; ввод байта с Р1
ANL А,#11101010В; маскировка
MOV R3, А ; передача в R3
Пример
28.
Выполнить логический сдвиг вправо двухбайтового числа, которое размещено в R5,
А:
SHIFTR: CLR С ; сбрасывание переноса
CPL С ; установление переноса
ХСН А, R5 ; обмен байтами
JNB А.7, L1 ; если R5.7=1, то снять флажок переноса
CLR C
RRC A ; сдвиг флажка переноса
L1: XCH A, R5 ; обмен
RRC A ; сдвиг младшего байта
Пример
29.
Выполнить сдвиг влево двухбайтового числа, которое размещено в R5 и А:
SHIFT L: RLC А ; сдвиг младшего байта
XCH А, R5 ; обмен А и R5
RLC A ; сдвиг старшего байта
XCH А, R5 ; обмен
Пример
30.
Управление группой бит порта.
В РПД
находится массив распакованных десятичных цифр. Необходимо передать их внешнему
устройству в соответствии с протоколом (рис. 2). Для передачи 4-х бит
данных используются младшие линии порта 1. Линии Р1.4 и Р1.5 используются как
сигналы квитирования, то есть передачу сигналов на выход МК сопровождает
стробирующий сигнал на линии Р1.4. Внешнее устройство, которое приняло данные,
сообщает об этом сигналом на входе Р1.5. Биты Р1.6 и Р1.7 не должны изменять
своих значений.
Страницы: 1, 2, 3, 4, 5, 6 |