Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Передача символьной строки через последовательный порт.




При передаче символов через последовательный порт в устройство вывода (например, принтер с форматом ASCII) может возникнуть необходимость в выводе служебных сообщений, включающих сообщения об ошибках, диагностику или инструкции для оператора. Эти символьные строки просто описываются при помощи директивы DB.

CR EQU 0DH; Код возврата каретки (ASCII)

LF EQU 0AH; Код перевода строки

ESC EQU 1BH; Код операции ESC

T1 EQU P3.5

TI EQU SCON.1

 

CALL STRING

DB CR,LF; Установка новой строки

DB ‘HALLO!’; Сообщение

DB ESC; Завершение

;..............

 

STRING: POP DPH;Загрузка первого символа

POP DPL

STR1: CLR А

MOVC A,@A+DPTR;Выборка первого символа

STR2: JNB Т1,$; Ожидание готовности

CLR TI

MOV SBUF,А; Выдача символа

INC DPTR; Сдвиг указателя

CLR A

MOVC A,@A+DPTR; Выборка следующего символа

CJNE A,#ESC,STR2; Цикл чтения

MOV А,#1

JMP @A+DPTR; Возврат к программе после чтения

 

6. Выполнить задание варианта 5, используя в качестве временного хранилища данных область в ВПД по адресу С200Н.

7. Переслать содержимое участка памяти длиной 4 байта из РПД по адресу 16Н в ВПД по адресу С200Н.

8. Организовать стек по адресу 12Н и сохранить в нем содержимое регистров банка 3.

Задания 2

1. Переслать массив из одной области памяти в другую, причем четные и нечетные байты поменять местами.

2. Поменять местами два массива в памяти, используя стек.

3. Поменять местами между собой половинки массива.

4. Сформировать новый массив из каждого четвертого байта заданного массива.

5. Записать в каждый пятый элемент массива значение предыдущего байта.

6. Поменять местами каждый второй и каждый третий элемент (байт) массива.

7. В массиве поменять местами байты, равноотстоящие от начала и от конца массива(зеркально отобразить массив относительно середины).

8. Из заданного массива сформировать новый массив, изменив порядок следования элементов на противоположный, и переслать его на место исходного.

Контрольные вопросы.

1. В чем заключается различие команд MOV, MOVC и MOVX.

2. Назовите возможные операнды вышеперечисленных команд.

3. Каким образом можно зарезервировать память в программе.

4. К какой памяти можно обращаться с помощью DPTR.

5. Можно ли командой MOV смоделировать работу команд XCH,XCHD. Обоснуйте ответ.

 

6. Охарактеризовать методы адресации, используемые в формате команды пересылки данных MOV.

7. Каким образом осуществляется в МК51 доступ к памяти программ (ПП).

8. Как производится загрузка регистра-указателя данных DPTR 16-битным адресом. При доступе к какой части памяти МК51 и с помощью какой команды используется этот регистр.

9. Описать механизм выполнения стековых операций в МК51. Для каких целей используются подобные операции.

10. Оценить количество рабочих циклов МК51, необходимое для выполнения отдельных команд пересылки данных С по заданию преподавателя).

 

ЛАБОРАТОРНАЯ РАБОТА №3.

АРИФМЕТИЧЕСКИЕ КОМАНДЫ

 

Практическая часть.

I. Инкремент и декремент.

Декрементировать содержимое ячеек резидентной памяти данных (РПД) по адресам 10-20

 

MOV R0,#10; Загрузка в R0 начального адреса

 

MOV R3, #20-10+1; Загрузка в R3 числа ячеек

L: DEC @R0; Декремент ячейки РПД

INC R0; Продвижение указателя адреса

DJNZ R3,L; Декремент R3 и повтор, пока R3 не равно нулю

II. Сложение и вычитание.

4. Команды ADDC и SUBB учитывают предыдущее состояние флажка переноса (заема), что позволяет производить вычисления с двойной точностью путем повторения операции над последующими старшими байтами операнда. Если входными данными для операции является строка целых чисел без знака, то флажок переноса установится после завершения операции при переполнении (для ADDC) или при исчезновении значащих разрядов (для SUBB). Для отрицательных данных, представленных дополнительным кодом, старший разряд старшего байта исходных данных содержит знак строки, поэтому флажок переполнения (OV) будет указывать на переполнение или исчезновение значащих разрядов.

 

Рассмотрим выполнение программы, суммирующей два двоичных многобайтных числа. Оба слагаемых располагаются в резидентной памяти данных (РПД), начиная с младшего байта. При сложении чисел без знака на переполнение укажет флаг С, а в случае сложения чисел со знаком – флаг OV.

 

N EQU 10; Формат операндов в байтах

ORG 20H

NUM1 DS N; Память для первого числа

NUM2 DS N; Память для второго числа

 

ORG 0C100H; Установка программного счетчика на адрес 0C100h

MOV R0,#NUM1;Запись в R0 начального адреса первого числа

MOV R1,#NUM2;В R1 – начальный адрес второго числа

MOV R2,#N;В R2 – формат операндов в байтах

CLR C;Сброс переноса

L1: MOV A,@R0;Загрузка в аккумулятор текущего байта первого слагаемого

ADDC A,@R1;Сложение байт с учетом переноса

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

INC R0;Продвижение указателей

INC R1

DJNZ R2,L1;Цикл, если не все байты просуммированы

END

 

2. Программа складывает многобайтные BCD-числа, расположенные в резидентной памяти данных (РПД). Регистры R0 и R1 указывают начальные адреса слагаемых. Слагаемые расположены в РПД, начиная с младших байтов. Формат слагаемых одинаков и задается в R2 числом байтов. Результат сложения помещается на место первого слагаемого:

 

 

 

MOV TMOD, #0100000B;настройка счетчика 1

MOV TH1, #0;сброс счетчика импульсов

WAIT0: JB P3.4, WAIT0;ожидание включения счёта

SETB TCON.6;пуск счетчика 1

WAIT1: JNB P3.4, WAIT1;ожидание выключения счёта

CLR TCON.6;останов счетчика 1

MOV A, TH1;(аккумулятор) число импульсов

EXIT:...;выход из процедуры

Ожидание заданного кода на входах порта, например 0Аh на входах порта 1:

MOV A,#0AH; Загрузка

WAIT: CJNE A,P1,WAIT; Ожидание прихода кода

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...