РАЗРАБОТКА БЛОК-СХЕМ АЛГОРИТМОВ И ПРОГРАММЫ ОБРАБОТКИ ДАННЫХ




Разработка прикладного программного обеспечения на языке Ассемблере - творческая задача, требующая от программиста отличного знания программистской модели МК-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.

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

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

отсюда , .

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

, отсюда .

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

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

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

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

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

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

 

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

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

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

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

 

 

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

 

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

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; ОЧИСТКА РЕГИСТРА - СЧЕТЧИКА

MOVR7,#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

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

SJMPWAIT;

 

ЛИТЕРАТУРА

1. ГореликА.В., ГореликВ.Ю., ЕрмаковА.Е., ЕрмаковаО.П. Микропроцессорные информационно-управляющие системы железнодорожного транспорта. – М.: МИИТ, 2011. – 230 с.

2. Однокристальные микро-ЭВМ./ Боборыкин А.В., Липовецкий Г.П. и др. М.: МИКАП, 1994. - 400 с.

3. Сташин В.В., Урусов А.В., Мологонцева О.Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. М.: Энергоатомиздат, 1990. - 224 с.

 

Приложение. Листинг программы

START:

CLRA

MOVP1, #255

MOV PSW, #00011000B

MOV IP, #00010001B

MOV IE, #10000001B

CLR TR0

CLR TR1

MOV R1, A

MOV R2, A

MOV R7, #100

WAIT:

NOP

SJMP WAIT

MOV A, P1

SUBB A, R7

JNC IMPULS

OUT:

CLR TR1

MOV TH1, #F3H

MOV SCON, #11011100B

MOV TMOD, #00100000B

SETB TR1

LABEL:

JNB T1, LABEL

CLR T1

MOV SBUF, A

SJMP WAIT;

IMPULS:

SETB P3.1

MOV R1, #49

CIKL2:

MOV R2, #254

CIKL1:

DJNZ R2, CIKL1;

DJNZ R1, CIKL2;

CLR P3.1

SJMP WAIT;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: