Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МИУС.docx
Скачиваний:
87
Добавлен:
21.05.2017
Размер:
1.69 Mб
Скачать
  1. Разработка блок-схем алгоритмов и программы

ОБРАБОТКИ ДАННЫХ

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

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

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

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

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

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

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

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

В соответствии c блоком 2 алгоритма должна быть произведена предварительная установка микроконтроллера (МК-51), т.е. определены начальный адрес программы, константы, приоритет и источники прерывания, режим работы таймера/счетчика Т/С1 и последовательного порта, должен быть очищен аккумулятор и регистры-счетчики и задан вид сигнала прерывания (по фронту). Блок 3 программы переводит МК-51 в режим

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

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

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

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

  • обработка прерываний.

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

fn1 = fn3

=

2SMOD

fBQ

,

(1)

32 ⋅12 ⋅[256

− (TH )]

где SMOD - значение бита SMOD регистра PCON; fBQ - частота синхронизации МК-51;

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

Для использованияТ/С1 в качестве источника для задания частот Fn1 и Fn3

необходимо:

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

10

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

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

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

Рассчитаем автозагружаемое значение для получения необходимой скорости передачи через УАПП:

F = 2SMOD f BQ (32 *12 *[256 − TH ])

где SMOD - значение бита SMOD регистра управления мощностью PCON;

fBQ - частота синхронизации МК-51, TH - десятичное значение содержимого

регистра TH1.

TH = 256 2SMOD f BQ (32 *12 * F)

TH = 256 −1⋅ 5*106 (32 *12 *300) = 256 − 43 = 213d = D5h

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

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

5.

Останов Т/С1

TH1← A1H

SCON← Режим работы п/п

TMOD← Режим работы T/C1

Запуск Т\С1

нет Передача

окончена

да

Очистка флага передачи

SBUF← 9 бит данных

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

Для выдачи в порт импульса заданной длительностью установить заданную линию порта P3 в 5. Сформировать импульс заданной длительности можно, используя либо

11

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

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

tЗЦ = 1+ (1+ 2 Y + 2) X

(2)

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

tЗ

=

1

⋅12 *[1+ (3 + 2 ⋅Y ) ⋅ X ].

(3)

f

Начало

1

2

Загрузка в R1 числа циклов X

1

3

Загрузка в R2 числа циклов Y

4

Декремент R2

Y

Нет

(R2) = 0?

5

X

Да

6

Декремент R1

Нет

(R1) = 0?

7

Да

8

Выход

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

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

tЗ tЗАД ,

(4)

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

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

N =

tЗАД tЗ

fBQ .

(5)

12

12

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

Рассчитаем необходимые значения для формирования определенной временной задержки:

T = 55 мс = 55*103 с.

fBQ = 5 МГц = 5*106 Гц.

T = [1 + X (3 + 2Y )]12 f BQ T * f BQ 12 = [1 + X (3 + 2Y )]

55*103 *5*106 = 55*5*103. 12 = [1+ X (3 + 2Y )]= 22917

Рассчитаем оптимальные значения X и Y: X=68d и Y=167d.

1+ (3 + 2*167)*68 = 22917

Значения X и Y получены методом полного перебора. По X и Y от 1 до 255,

функция[1+ X (3 + 2Y )]− T * fBQ /12→ 0.

Рассчитаем количество операций NOP:

55*103

1

⋅12 *[22917]

55 *10

3

55 10

3

N =

5*106

6

6

⋅ 5*10

=

⋅ 5*10

=

12

12

= 120 ⋅ 5*106 = 0 .

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

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

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

показан на рисунке 8.

13

Начало

Очистка

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

Подготовка порта P1 на ввод

Установка банка регистров

Установка приоритета прерывания

Разрешение

прерывания

Очистка Т/С1

Запись в регистр R7 const

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

14

Начало

Очистка

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

Подготовка порта P1 на ввод

Установка банка регистров

Установка приоритета прерывания

Разрешение

прерывания

Очистка Т/С1

R7 ← const

нет Прерывание пришло

да

A← P1

1 2

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

15

1

A←A - R7

Да C=1

Нет C=0

Data < Const

P33.0.4←1

Останов Т/С1

R1←8868

TH1←D5FCH

SCON← Режим

R2←150167

работы п/п

TMOD← Режим

работы T/C1

R2←R2 - 1

Запуск Т\С1

Нет Z=0

R2=0 ?

Да Z=1

Нет T1=0

Передача

R1←R1 - 1

окончена

Да T1=1

Нет Z=0

Очистка флага

R1=0 ?

передачи

Да Z=1

SBUF← 9 бит данных

P33.0.4←0

2

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

В P1 значения попадают c внешнего устройства, и заносится в программном эмуляторе, реализуя получение данных устройств управления МПС.

На основе полученного алгоритма составим программу на языке Ассемблер. Программа обработки данных:

Метки

Команды в мнемокоде

Комментарии

START:

CLR A;

ОЧИСТКА АККУМУЛЯТОРА

MOV P1,#255;

ПОДГОТОВКА ПОРТА P1 НА ВВОД

MOV

УСТАНОВКА БАНКА 2

PSW,#00010000B;

MOV IP,#00000100B;

ВЫСШИЙ ПРИОРИТЕТ INT1

MOV IE,#10000100B;

РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ INT1

CLR TR1;

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

MOV R7,#100;

ЗАПИСЬ CONST

16

WAIT:

NOP;

ПУСТАЯ ОПЕРАЦИЯ, НЕОБХОДИМА, ЧТОБЫ

ОБНАРУЖИТЬ ПОЯВЛЕНИЕ БИТА ПРЕРЫВАНИЯ

SJMP WAIT;

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

MOV P1,#101

ЗАПИСЬ DATA

MOV A,P1;

ЧТЕНИЕ БАЙТА ДАННЫХ ИЗ P1

SUBB A,R7;

СРАВНЕНИЕ БАЙТА С CONST

JNC IMPULS;

ПЕРЕХОД, ЕСЛИ РЕЗУЛЬТАТ МЕНЬШЕ

OUT:

CLR TR1;

ОСТАНОВ Т/С1

MOV TH1,#213;

ЗНАЧЕНИЕ ДЛЯ СКОРОСТИ

MOV

УСТАНОВКА РЕЖИМА 3 ПОРТА

SCON,#11011100B;

MOV

УСТАНОВКА РЕЖИМА 2 Т/С1

TMOD,#00100000B;

SETB TR1;

ЗАПУСК ТАЙМЕРА

LABEL:

JNB T1,LABEL;

ОЖИДАНИЕ ОКОНЧАНИЯ ПЕРЕДАЧИ

CLR T1;

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

MOV SBUF,A;

ВЫДАЧА ДАННЫХ В ПОРТ

SJMP WAIT;

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

IMPULS:

SETB P3.0;

УСТАНОВКА БИТА P3.0

MOV R1,#68;

ЗАПИСЬ В R1 X

CYCLE2:

MOV R2,#167;

ЗАПИСЬ В R2 Y

CYCLE1:

DJNZ R2,CYCLE1;

ДЕКРЕМЕНТ Y И ПЕРЕХОД

DJNZ R1,CYCLE2;

ДЕКРЕМЕНТ X И ПЕРЕХОД

CLR P3.0;

СБРОС БИТА P3.0

SJMP WAIT;

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

17

Список использованных источников

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

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

1994. – 400 с.

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

18

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

START: CLR A;

MOV P1,#255;

MOV PSW,#00010000B;

MOV IP,#00000100B;

MOV IE,#10000100B;

CLR TR1;

MOV R7,#100;

WAIT: NOP;

SJMP WAIT;

MOV P1,#101

MOV A,P1;

SUBB A,R7;

JNC IMPULS;

OUT: CLR TR1;

MOV TH1,#213;

MOV SCON,#11011100B;

MOV TMOD,#00100000B;

SETB TR1;

LABEL: JNB T1,LABEL;

CLR T1;

MOV SBUF,A;

SJMP WAIT;

IMPULS: SETB P3.0;

MOV R1,#68;

CYCLE2: MOV R2,#167;

CYCLE1: DJNZ R2,CYCLE1;

DJNZ R1,CYCLE2;

CLR P3.0;

SJMP WAIT;

19

20

21

22

23

24

25