Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
образец курс МИУС.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
747.07 Кб
Скачать

4. Разработка блок-схем алгоритмов и программы обработки данных

Разработка прикладного программного обеспечения на языке Ассемблере - творческая задача, требующая от программиста отличного знания программистской модели МК-51, состава и формата команд, способов адресации операндов и т.д. Однако существуют формальные правила составления программ, соблюдение которых позволяет даже начинающему разработчику составлять работоспособные программы. Подробно эти правила рассмотрены в [1], согласно которым для получения текста исходной программы необходимо выполнить следующую последовательность действий:

  • составить подробное описание исходной задачи;

  • выполнить инженерную интерпретацию задачи, желательно с привлечением того или иного аппарата формализации (сети Петри, графа автомата и т.п.);

  • разработать блок-схемы алгоритма работы МПС;

  • разработать детализированные блок-схемы алгоритмов отдельных процедур, выделенных на основе модульного принципа составления программ;

  • распределить рабочие регистры и память МК-51;

  • составить текст исходной программы.

Блок-схема алгоритма обработки данных представлена на рисунке 1.

В соответствии c блоком 2 алгоритма должна быть произведена предварительная установка микроконтроллера (МК-51), т.е. определены начальный адрес программы, константы, приоритет и источники прерывания, режим работы таймера/счетчика Т/С1 и последовательного порта, и задан вид сигнала прерывания (по фронту). Блок 3 программы переводит МК-51 в режим ожидания прихода прерывания. Внешнее прерывание поступает со входа . После прихода прерывания МК-51 читает байт данных (Date) из порта P1 (блок 4) и производит его сравнение с константой (Const) (блок 5). По результатам сравнения МК-51 либо выводит принятый байт через последовательный порт (блок 6), либо формирует на заданной линии порта P3 импульс заданной длительности (блок 7). После этого осуществляется переход в режим ожидания прихода следующего прерывания.

Разобьем блок-схему алгоритма на следующие модули:

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

  • формирование импульса заданной длительности;

  • начальная установка и обработка прерываний.

Последовательный порт МК-51 может использоваться в качестве универсального асинхронного приемо-передатчика с фиксированной или переменной скоростью последовательного обмена и возможностью дуплексного включения. Скорость последовательного обмена в режимах 1 и 3 определяется по формуле (1):

, (1)

где - значение бита SMOD регистра PCON;

- частота синхронизации МК-51;

- десятичное значение содержимого регистра TH1.

Для использования Т/С1 в качестве источника для задания частот и необходимо:

  • запретить прерывания от Т/С1;

  • запрограммировать работу Т/С1 в качестве таймера или счетчика, установив при этом для него один из режимов 0, 1 или 2;

  • запустить Т/С1 на счет.

Обычно для установки скорости передачи данных через последовательный порт таймер Т/С1 включается в режим 2 (режим автозагрузки).

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

.

Примем бит , тогда получим , отсюда .

. Переведем десятичное число в шестнадцатеричную систему счисления .

Составим блок-схему алгоритма передачи данных через последовательный порт. Первым делом необходимо остановить Т/С1, после чего загрузить в регистр TH1 число, определяющее скорость передачи через последовательный порт. Далее необходимо в регистрах SCON и TMOD установить режимы работы последовательного порта и Т/С1 соответственно. После всех установок производится запуск Т/С1 на счет и запускается цикл ожидания окончания передачи. Если передача окончена выполняется очистка флага передачи T1. После чего происходит выдача 9 бит данных в последовательный порт.

Блок схема алгоритма передачи через последовательный порт показана на рисунке 5.

Рисунок 5- Блок схема алгоритма передачи через последовательный порт

Для выдачи в порт импульса заданной длительностью установить заданную линию порта P3 в 1. Сформировать импульс заданной длительности можно, используя либо таймер/счетчик, либо регистры РПД. Блок-схема алгоритма формирования временной задержки большой длительности показана на рисунке 6.

Данный алгоритм использует так называемые вложенные циклы. На начальном этапе в регистр R1 загружается число “большого” цикла X (блок 2), а в регистр R2 – число “малого” цикла Y (блок 3). Эти две команды выполняются за один машинный цикл. С помощью блоков 4, 5 подпрограммы содержимое регистра R2 уменьшается до 0 и осуществляется переход к блоку 6 подпрограммы. Этот цикл удобнее организовать с помощью команды DJNZ Rn, rel которая выполняется МК-51 за два машинных цикла. Аналогично организуется и “большой” цикл (блоки 6, 7). Таким образом, длительность временной задержки, формируемой с помощью этого алгоритма, в машинных циклах можно рассчитать по формуле (2):

(2)

Время задержки в секундах рассчитывается по формуле (3):

. (3)

Рисунок 6 - Блок-схема алгоритма формирования временной задержки

Если задана длительность импульса, формируемого с помощью рассмотренного алгоритма, то необходимо подобрать X и Y так, чтобы выполнялось условие (4):

, (4)

где - заданная длительность импульса

Для того чтобы МК-51 сформировал импульс с точностью плюс/минус 1 цикл в подпрограмму необходимо добавить команду “нет операции” (NOP), число которых можно рассчитать по формуле (5):

. (5)

Если число команд NOP, необходимых для “подгонки” задержки, получится больше 5, то рекомендуется для этих целей использовать локальный цикл, который вставляется в тело подпрограммы после блока 7.

Рассчитаем количество больших и малых циклов необходимых для формирования задержки указанной длительности.

Так как максимальное количество малых циклов не может превышать FF h или 255, получим:

отсюда , .

Так как число циклов не может быть дробным, уменьшим количество малых циклов на 1, т.е. примем Y=254. Получим:

, отсюда .

Рассчитаем число пустых операций:

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

Программа обработки прерывания производит чтения байта порта P1, содержимое которого пересылается в регистр аккумулятор. Следующим этапом происходит сравнение содержимого аккумулятора и регистра R7, в котором храниться константа. Сравнение выполняется следующим образом: из содержимого аккумулятора вычитается содержимое регистра R7 и если флаг переноса С=0 (Date < Const) выполняется передача информации через последовательный порт, иначе - выдача в порт импульса заданной длительности.

Блок-схема алгоритма начальной установки и прерывания показана на рисунке 7.

Рисунок 7 - Блок-схема алгоритма начальной установки и прерывания

Объединив все модули, получим алгоритм программы обработки данных, который показан на рисунке 8.

Рисунок 8 – Блок-схема алгоритма программы обработки данных

На основе полученного алгоритма составим машинный алгоритм и программу на языке Ассемблер.

Машинный алгоритм показан на рисунке 9.

Рисунок 9 – машинный алгоритм программы обработки данных

Программа обработки данных:

START: CLR A; ОЧИСТКА АККУМУЛЯТОРА

MOV P1, #255; ПОДГОТОВКА ПОРТА P1 НА ВВОД

MOV PSW, #00011000B; УСТАНОВКА БАНКА 3

MOV IP, #00010001B; ВЫСШИЙ ПРИОРИТЕТ INT0

MOV IE, #10000001B; ПРЕРЫВАНИЕ ОТ INT0

CLR TR0; ОСТАНОВ ТАЙМЕРА Т/С0

CLR TR1; ОСТАНОВ ТАЙМЕРА Т/С1

MOV R1, A; ОЧИСТКА РЕГИСТРА - СЧЕТЧИКА

MOV R2, A; ОЧИСТКА РЕГИСТРА - СЧЕТЧИКА

MOV R7, #100; ЗАПИСЬ CONST

WAIT: NOP; ПУСТАЯ ОПЕРАЦИЯ

SJMP WAIT; ОЖИДАНИЕ ПРЕРЫВАНИЯ

MOV A ,P1; ЧТЕНИЕ БАЙТА ДАННЫХ ИЗ P1

SUBB A, R7; СРАВНЕНИЕ БАЙТА С CONST

JNC IMPULS; ПЕРЕХОД, ЕСЛИ МЕНЬШЕ

OUT: CLR TR1; ОСТАНОВ Т/С1

MOV TH1, #F3H; ЗНАЧЕНИЕ ДЛЯ СКОРОСТИ 300 бит/с

MOV SCON, #11011100B; УСТАНОВКА РЕЖИМА 3 ПОРТА

MOV TMOD, #00100000B;УСТАНОВКА РЕЖИМА 2 Т/С1

SETB TR1; ЗАПУСК ТАЙМЕРА

LABEL: JNB T1, LABEL; ОЖИДАНИЕ ОКОНЧАНИЯ ПЕРЕДАЧИ

CLR T1; ОЧИСТКА ФЛАГА ПЕРЕДАЧИ

MOV SBUF, A; ВЫДАЧА ДАННЫХ В ПОРТ

SJMP WAIT; ОЖИДАНИЕ ПРЕРЫВАНИЯ

IMPULS: SETB P3.1; УСТАНОВКА БИТА P3.1

MOV R1, #49; ЗАПИСЬ В R1 X

CIKL2: MOV R2, #254; ЗАПИСЬ В R2 Y

CIKL1: DJNZ R2, CIKL1;

DJNZ R1, CIKL2

CLR P3.1 СБРОС БИТА P3.1

SJMP WAIT;