Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект лекций.doc
Скачиваний:
79
Добавлен:
21.05.2017
Размер:
3.74 Mб
Скачать

2.3 Примеры программ обработки данных в мк51

2.3.1 Примеры использования команд передачи данных

Пример 2.1.Передать содержимое буфера УАПП в РПД по косвенному адресу изR0:

MOV@R0,SBUF; передача принятого по

; последовательному каналу

; байта в РПД

Пример 2.2.Загрузить в указатель данных начальный адрес 7F00Hмассива данных, расположенного в ВПД:

MOVDPTR, #7F00H; загрузка начального

; значения указателя данных

Пример 2.3.Загрузить управляющее слово в регистр управления таймером:

MOVTCON, #00000101B; загрузка управляющего

; слова

Пример 2.4. Сбросить все флаги пользователя (область РПД с адресами 20H– 2FH):

MOVR0, #20H; задание начального адреса

; области флагов

MOVR1, #0FH; счетчик (длина области

; флагов)

LOOP:MOV@R0, #0 ; сброс одного байта

INCR0 ; переход к следующему байту

DJNZR1,LOOP; цикл

Пример 2.5. Запомнить в ВПД содержимое регистров банка 0. Начальный адрес ВПД – 5000H:

MOVPSW, #01000B; выбор банка регистров 1

MOVR0, #8 ; счетчик

MOVDPTR, #5000H; определение начального

; адреса ВПД

MOVR1, #0 ; определение начального

; адреса РПД

LOOP:MOVA, @R1 ; загрузка текущего байта

MOVX@DPTR,A; передача из аккумулятора в

; ВПД

INCR1 ; переход к следующему

; регистру

INCDPTR; увеличение адреса

DJNZR0,LOOP; еслиR0>0, то повторять

Пример 2.6. Передать данные через последовательный порт со скоростью 500 бит/с. Частота синхронизации составляет, а бит SMOD=0:

CLRTR1 ; останов таймера Т/С 1;

MOVTH1, #0DBH; автозагружаемое значение

; для получения; скорости

; 500 бит/с,

MOVSCON, #11011100B; установка режима 3 УАПП

MOVTMOD, #00100000B; установка режима 2 Т/С 1

SETBTR1 ; запуск таймера;

LABEL:JNBT1,LABEL; ожидание окончания

; передачи

CLRT1 ; очистка флага передачи

MOVSBUF,A; выдача 9 бит данных в

; последовательный порт

Флаг прерывания передатчика Т1 регистра SCON устанавливается аппаратно в конце времени выдачи 8-го бита в режиме 0 или в начале стоп бита в других режимах.

2.3.2 Примеры использования команд арифметических операций

Пример 2.7. Сложить два двоичных многобайтных числа. Оба слагаемых располагаются в РПД, начиная с младшего байта. Начальные адреса слагаемых заданы вR0 иR1. Формат слагаемых в байтах задан вR2:

CLRC; сброс переноса

LOOP:MOVA, @R0 ; загрузка в аккумулятор

; текущего байта первого

; слагаемого

ADDCA, @R1 ; сложение байт с учетом

; переноса

MOV@R0,A; размещение байта результата

INCR0 ; увеличение указателей

INCR! ;

DJNZR2,LOOP; цикл, если не все байты

; просуммированы

При сложении чисел без знака на переполнение укажет флаг C, а в случае сложения чисел со знаком – флагOV.

Пример 2.8. Умножить целое двоичное число произвольного формата на константу 173. Исходное число размещается в РПД, адрес младшего байта находится в регистреR0. Формат числа в байтах хранится в регистреR1:

MOVA, #0 ; сброс аккумулятора

LOOP:ADDA, @R0 ; загрузка множимого

MOVB, #173 ; загрузка множителя

MULAB; умножение

MOV@R0,A; запись младшего байта

; частичного произведения

INCR0 ; увеличение адреса

MOVA,B; пересылка старшего байта

; частичного произведения в

; аккумулятор

XCHA, @R0 ; предварительное

; формирование очередного

; байта произведения

DJNZR2,LOOP; цикл, если не все биты

; исходного числа умножены

; на константу

Полученное произведение размещается на месте исходного числа и занимает на один байт больше.

Пример 2.9. Перевести двоичное число, содержащееся в аккумуляторе в двоично-десятичную систему. При таком преобразовании может получиться трехразрядное двоично-десятичное число. Старшая цифра будет размещена в регистреR0, а две младшие в аккумуляторе.

MOVB, #100 ; загрузкаBдля вычисления

; количества сотен в числе

DIVAB; определение старшей цифры

MOVR0,A; пересылка вR0 старшей

; цифры

XCHA,B; пересылка остатка исходного

; числа в аккумулятор

MOVB, #10 ; загрузкаBдля вычисления

; количества десятков в числе

DIVAB; определение числа десятков

SWAPA; размещение числа десятков

; в старшей тетраде A

ADDA,B; подсуммирование остатка в

; Aобе младшие цифры числа