ТОП 10:

Типовые структуры схем алгоритмов обработки данных



В процессе разработки прикладных программ для микропроцессорных систем, построенных на МП К580, и микроконтроллерных систем, построенных на МК48 и МК51, наибольшую сложность представляет разработка программ вычислительных процедур, связанных с ограничениями, накладываемыми особенностями организации МП и МК. К ним относятся:

- отсутствие в системе команд МП эффективных и часто используемых операций, таких как умножение и деление (кроме МК51);

- малоразрядный формат данных и, следовательно, низкая точность их обработки;

- ограниченный диапазон представления данных из-за отсутствия команд обработки чисел с плавающей запятой;

- отсутствие операций десятичной арифметики.

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

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

На рис.2.1…рис.2.6 представлены типовые узлы схем алгоритмов, которые широко используются в программах обработки данных.

Показанная на рис.2.1 дихотомическая (разделенная на две части) структура если - то - иначе применяется в тех случаях, когда необходимо реализовать программный переход к одной из двух вычислительных процедур в зависимости от выполнения некоторого проверяемого условия.

Рис.2.1 Структура если - то - иначе

Структура если – то (рис.2.2) является упрощением предыдущей и используется в тех случаях, когда необходимо реализовать или не реализовывать одну вычислительную процедуру в зависимости от проверяемого условия.

Рис.2.2. Структура если – то

Структура делай – пока (рис.2.3) используется для проверки условия окончания цикла.

Рис.2.3. Структура делай – пока

Представленная на рис.2.4 структура повторяй - до - того как аналогична предыдущей, но порядок следования операторов здесь иной: процедура выполняется до проверки условия.

Рис.2.4. Структура повторяй – до – того как

Структура, процесс – пока приведенная на рис.2.5 представляет собой объединение двух предыдущих структур и позволяет проводить обработку данных по двум независимым процедурам.

Рис.2.5. Структура, процесс – пока

На рис.2.6 показана структура делай - в - зависимости – от, с помощью которой осуществляется выбор действия при многозначных решениях и которая используется для замены цепочек структуры если - то – иначе.

Рис.2.6. Структура делай - в - зависимости – от

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

Приемы программирования

Для программирования МП и МК необходимо знать состав команд, быть хорошо знакомым с назначением и расположением регистров, т.е. знать архитектуру микро-ЭВМ.

Этапы составления программы должны выполняться в следующей последовательности:

1. Определение и анализ задачи;

2. Составления блок схемы алгоритма решения в общем виде и машинного алгоритма;

3. Написание программы на языке Ассемблера;

4. Трансляция программы в машинные коды;

5. Отладка программы (поиск и устранение ошибок);

6. Документирование программы.

Сформулируем общие требования, предъявляемые к программам, составленным на языке Ассемблера.

В общем виде любая команда на языке Ассемблера записывается следующим образом:

Метка: Операция Данные; Комментарий

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

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

HLT – мнемоническое обозначение команды останов МП К580.

Данные – часть команды, в которой может размещаться одно или два восьмиразрядных слова в зависимости от типа команды (адрес ячейки памяти, адрес порта ввода- вывода, непосредственные данные).

Комментарий отделяется от команды точкой с запятой. Комментарием является запись облегчающая понимание назначения команды. Комментарий является необязательной частью команды. Тем не менее, рекомендуется снабжать команды программы комментариями, которые помогают определить роль команды в алгоритме решения задачи.

Следующим шагом в разработке программы является ее трансляция в машинные коды. Обычно эта задача решается с использованием специального ПО – кросс-средств, которые разрабатываются для каждого типа микропроцессора и микроконтроллера отдельно. Однако эта задача может быть решена и вручную.

При ручном методе трансляции рекомендуется выполнить следующую последовательность действий:

1. Находим КОп каждой мнемоники в таблице команд;

2. Определяем операнды (данные и адреса), задавшись начальным адресом ячейки памяти (ЯП), где будет располагаться первая команда программы;

3. Установим адреса ЯП в последовательности каждой команды и операнда.

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

Последним этапом программирования является документирование. На этом этапе составляется ее описание, указывающее в какой последовательности должны выполняться операции, приводятся алгоритмы выполнения программы, составляются списки, данные, адреса используемые подпрограммы и комментарии. Сложные программы требуют тщательно разработанной документации

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

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

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

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

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

; байта в РПД

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

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

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

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

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

; слова

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

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

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

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

; флагов)

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

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

DJNZ R1, LOOP ; цикл

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

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

MOV R0, #8 ; счетчик

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

; адреса ВПД

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

; адреса РПД

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

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

; ВПД

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

; регистру

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

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

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

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

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

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

; 500 бит/с,

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

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

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

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

; передачи

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

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

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

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

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

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

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

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

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

; слагаемого

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

; переноса

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

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

INC R! ;

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

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

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

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

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

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

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

MUL AB ; умножение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; цифры

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

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

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

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

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

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

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

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

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

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

Пример 2.10. Установить биты 0 – 3 порта 1:

ORL P1, #00001111B ; установка P1.0 – P1.3 в 1

Пример 2.11. Сбросить биты 0, 2, 6 порта P2:

ANL P2, #10111010B ; сброс битов 0, 2, 6 порта P2

Пример 2.12. Выбрать нулевой регистровый банк:

ANL PSW, #11100111B ; сброс битов RS1 и RS0

Пример 2.13. Проинвертировать биты порта 1, соответствующие единичным битам аккумулятора:

XRL P2, A ; исключающее ИЛИ порта P2

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

Пример 2.14. Проинвертировать биты 7, 6, 5 порта 0:

XRL P0, #11100000B ; исключающее ИЛИ порта P0

; и константы

Пример 2.15. Проинвертировать биты 0 – 3 аккумулятора:

XRL A, #0FH ; исключающее ИЛИ

; аккумулятора и константы

 

 







Последнее изменение этой страницы: 2016-12-30; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.215.33.158 (0.012 с.)