Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metoda / Metod_prakt-Mikroprocesori-2008-ukr.doc
Скачиваний:
18
Добавлен:
16.03.2016
Размер:
1.16 Mб
Скачать

2 Алгоритми і програми проектування мікропроцесорних систем

2.1 Мета занять

Вивчити відмітні особливості проектування електронних апаратів з вбудованими мікропроцесорними засобами, етапи проектування програмної частини. Розглянути методи побудови алгоритмів та їх реалізацію у машинних кодах.

2.2 Методичні вказівки з організації самостійної роботи студентів

Для системи, що містить МП, потрібне проектування як апаратних, так і програмних засобів [1].

Проектування апаратної частини може бути виконано з використанням стандартної методології проектування апаратури.

Проектування програмного забезпечення краще за все може бути виконано з використанням мови проектування, подібного природній мові.

Програмне забезпечення будується шляхом перетворення конструкцій мови проектування на мову програмування мікрокомп'ютера (МК). Програмування – це опис послідовності дій користувача, які мають виконуватися для вирішення поставленого завдання. Для успішного вирішення завдання необхідно пройти через певні етапи програмування:

1. Постановка завдання. В деяких випадках постановка завдання не завжди очевидна. Якщо це так, то втрачається багато сил і засобів. Коректна постановка завдання – гарантія успішного його розв`язання.

2. Вибір найбільш прийнятного методу розв`язання. На цьому етапі здійснюється вибір з безлічі можливих методів розв`язання задачі. При цьому необхідно врахувати конкретні властивості вживаного ОП, тобто швидкодію, об'єм пам'яті, наявність стандартних програм тощо.

3. Визначення типів вхідних і вихідних даних. Необхідно визначити форму опису і відображення використовуваних під час розв`язання задачі даних, які часто можуть мати складну і нерідко неявну структуру. Тут необхідний детальний аналіз даних, визначення точності обробки даних, особливо якщо вони надходять від датчиків з великою погрішністю.

4. Проектування і аналіз розв`язання, зокрема порівняння схем, описів тощо. Тут необхідно визначити окремі кроки розв`язання і організувати їх логічну послідовність дій для виконання. Цю послідовність можна відобразити у вигляді схеми алгоритму.

5. Кодування алгоритму мовою програмування. Часто саме цей етап помилково називають програмуванням, хоча, по суті, кодування – це тільки частина всього процесу створення програми.

6. Перевірка і відлагодження програми. Для виправлення помилок необхідно ретельно проаналізувати текст програми.

Весь процес, як правило, носить ітераційний характер. Якщо одержаний розв`язок не задовольняє користувача з причини невисокої точності, недостатньої швидкодії або з яких-небудь інших причин, йому доводиться маніпулювати початковими даними, шукати інший метод розв`язання, інакше планувати виконання завдання.

Одним з важливих етапів програмування є етап складання послідовності дій для вирішення поставленого завдання, тобто побудови алгоритму. Реалізувати це можна з використанням мови проектування, або шляхом складання схем.

Використання мови проектування можна розглянути за допомогою простого прикладу.

Приклад 2.1. Нехай маємо систему з мікрокомп'ютера з двома виходами (рис. 2.1), яка має реалізовувати функцію перетворення, наведену на рис. 2.2.

Рисунок 2.1 – Структурна схема мікрокомп'ютерної системи

За наявності у системи входів і виходів можна зробити висновок про те, що мікрокомп'ютер повинен мати можливість перевіряти значення кожного входу, а також встановлювати кожний з виходів у певні значення.

Мовою проектування в операціях перевірки та установки використовуються прості конструкції.

Перевірити Вх.1 і запам'ятати його значення.

Встановити значення Вих.1, рівне 6.

Рисунок 2.2 – Функція перетворення

Необхідно також мати можливість перевіряти умови, яким задовольняють значення кожного зі входів, що зберігаються, для встановлення вихідних значень. З цією метою використовується умовна конструкція, яка в загальному вигляді може бути подана як: ЯКЩО (умови перевірки – істина). ТО (виконати що-небудь). ІНАКШЕ (виконати що-небудь інше). Таким чином, для даного прикладу опис мовою проектування спочатку матиме вигляд:

1. Перевірити Вх1 і зберігати його значення.

2. Перевірити Вх2 і зберігати його значення.

3. Якщо 4 8 Вх1 8 8, встановити Вих1 = 6.

4. Інакше Вих1 встановити = 0.

5. Якщо 2 8 Вх2 8 6, встановити Вих2 = 4.

6. Інакше Вич2 встановити = 0.

Коли система функціонує, мікрокомп'ютер виконує запрограмовані операції крок за кроком. Після того, як входи перевірені, немає впевненості, що потім при повторній перевірці один з них не виявиться зміненим. Тому необхідна така операція, яка дозволяла б виконувати інші операції мови проектування нескінчену кількість разів.

З цією метою використовується конструкція:

«ВИКОНУВАТИ БЕЗПЕРЕРВНО» . . . . . «КІНЕЦЬ»

У цій конструкції набір операцій, розташований ВИКОНУВАТИ БЕЗПЕРЕРВНО і КІНЕЦЬ, має повторитися без кінця.

В цьому випадку, одного разу розпочавшись, операція перевірки значень входів повторюватиметься стільки часу, скільки система залишається у дії.

З вищенаведеного прикладу можна зробити такі висновки:

  • мікрокомп'ютер є послідовним пристроєм і в кожен момент часу виконує тільки одну операцію;

  • у багатьох випадках, щоб змінити функціональну поведінку мікрокомп'ютерної системи, необхідно змінити лише деякі операції в описі програми мовою проектування.

МКП| маніпулює тільки цифровими даними. Якщо в системі є аналогові сигнали, для перетворення вхідних сигналів в цифрову форму необхідний АЦП|, а для перетворення вихідних сигналів в аналогову форму – ЦАП|.

Найбільш зручна показова форма подання алгоритму Розвязок задачі – графічна, у вигляді схеми [2]. Вона складається з упорядкованої сукупності умовних геометричних фігур, що несуть інформацію про певний характер операцій, умову, що накладається, прийняті позначення. Основні форми, які використовуються для подання схем алгоритмів згідно з діючими стандартами, наведені у додатку А.

Схеми алгоритмів можуть бути трьох типів: системні; укрупнені (основні); детальні (докладні).

Приклад 2.2. Скласти схему алгоритму формування двох наборів цілих чисел, що знаходяться в діапазоні від -5 до +5.

Розвязок. Шляхом сортування організувати два набори, один з яких включає позитивні числа, а інший – негативні. Укрупнена схема алгоритму Розвязок цієї задачі наведений на рис. 2.3.

Рисунок 2.3 – Схема алгоритму з розгалуженням

Під час програмування можливе використання підпрограм. Підпрограма – це частина програми, використовувана зазвичай кілька разів у процесі її виконання. Проте текст підпрограми записується програмістом тільки один раз. Коли ж програмісту необхідно скористатися підпрограмою, достатньо вказати в програмі відповідну команду виклику (звертання до підпрограми), що адресується до області пам'яті, в якій розташована підпрограма. З цією метою в мові програмування для більшості МП| існує команда CALL (викликати). У цій команді після коду операції (CALL) зазначається ім'я підпрограми, яке присвоєне фізичній адресі в області пам'яті, де розташована дана підпрограма.

Останньою виконуваною командою підпрограми є команда RET (return – повернення). За цією командою виконується повернення до основної програми, перерваної командою виклику.

Реалізація необхідного алгоритму обчислення досягається шляхом підготовки, відлагодження і запису в ПЗП відповідної програми. Мікропроцесор здатний сприймати лише програми, що складаються з послідовності команд, поданих двійковими кодами. Програмування безпосередньо в машинних кодах вимагає постійної операції багаторозрядними двійковими числами, які являють як коди команд, так і коди операндів.

Приклад 2.3. Реалізувати в машинних кодах програму складання двох чисел, одне з яких 01100100 знаходиться в регістрі загального призначення (РЗП|) В, а друге – 00010111 розташоване в елементі пам'яті з адресою 0000000010001111.

Розв’язок. У даному випадку МП| має шістнадцятирозрядну| шину адреси. Фрагмент програми наведений у табл|. 2.1.

Таблиця 2.1 – Програма складання в машинних кодах

Таблиця 2.2 – Програма складання в шістнадцяткових| кодах

Адреса пам'яті

Мнемокод

Мнемокод

Адреса

Н - код

Vt

0000 0000 0000 0100

01111000

MOV A,B

0004

78

5

0000 0000 0000 0101

00100001

LXI H

0005

21

16

0000 0000 0000 0110

10001111

0006

8F

0000 0000 0000 0111

00000000

0007

00

0000 0000 0000 1000

10000110

ADD M

0008

86

7

0000 0000 0000 1001

01110110

HLT

0009

76

7

. . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . .

. . . . . .

. . . .

0000 0000 0000 0100

00010111

008F

17

Перша команда – пересилання вмісту регістра В в акумулятор – є однобайтовою. Код операції розташований у ПЗП за адресою 0000 0000 0000 0100, яка для даної програми є початковою.

Наступна команда – трибайтова, має код операції 00100001, що являє перший байт команди. Другий і третій байти, розташовані в чергових осередках ПЗП, містять відповідно молодшу і старшу частині адреси 1000 1111 0000 0000, передані за цією командою в регістрову пару H і L.

Розгляд такої простої програми показує, наскільки незручним і недостатньо наочним є відображення чисел у машинних двійкових кодах. Дещо простіше і зрозуміліше запис машинних кодів проводити в шістнадцятковій| системі.

У табл|. 2.2 наведений фрагмент тієї самої програми, записаної в шістнадцяткових| кодах. Поряд з кодом операції показані його мнемонічне зображення і найменування операндів, прийняті в системі команд даного МП|. Наприклад, шістнадцятковий| код команди 78, що має мнемонічне позначення MOV A,B, відповідає операції пересилання вмісту регістра В в акумулятор А. У табл|. 2.2 також вказане число тактів Vt, необхідне для виконання кожної команди. Для виконання всієї програми потрібно 35 машинних тактів.

Найбільш зручним методом написання програм є використання мнемонічних кодів, що складаються з абревіатури повної назви інструкції. В цьому випадку мнемокод відображає змістовний сенс виконуваної операції.

Приклад 2.4. Визначити модуль числа.

Розв’язок. Під час дослідження сигналів часто доводиться оцінювати погрішність вимірювання за модулем. У зв'язку з тим, що від’ємні числа подаються в додаткових кодах, при визначенні модуля не можна обмежитися тільки відкиданням знаку числа, інформація про яке поміщена в старшому біті. Якщо число позитивне, то його слід помножити на -1. Знак можна визначити, використовуючи операцію маскування або засилання старшого біта в тригер перенесення з подальшим його аналізом. У даному випадку ці операції небажані, оскільки супроводжуються зміною вмісту акумулятора. Доцільно застосувати команду логічного складання вмісту акумулятора з самим собою. При цьому вміст акумулятора не змінюється, а прапорці встановлюються у відповідні стани. Умовний перехід виконується за вмістом тригера знаку.

На рис. 2.4 зображена схема алгоритму визначення модуля числа, що знаходиться в регістрі Е.

Рисунок 2.4 – Схема алгоритму визначення модуля числа

Алгоритм працює так. Число з регістра Е пересилається в акумулятор. У результаті виконання операції логічного складання акумулятора з самим собою в тригер знаку записується старший біт числа. За допомогою команди умовного переходу здійснюється розгалуження програми. Якщо S=0 (позитивне число) умова не виконується, то проводиться зміна знака числа і модуль числа з акумулятора пересилається в регістр Е. Знак числа змінюється застосуванням операції доповнення, що полягає в інвертуванні усіх розрядів числа (команда CMA) з подальшим збільшенням одиниці до молодшого розряду (команда INR A). Якщо умова S=0 виконується (число позитивне), то за умовним переходом JР M2 три останні команди не виконуються, вміст регістра Е не змінюється, а виконання програми продовжується з адреси 01F8, відповідно мітки М2. Програма в машинних кодах з коментарями наведена в табл. 2.3.

Таблиця 2.3 – Програма визначення модуля числа

Мітка

Мнемокод

Операнд

Адреса

Н-код

Коментар

MOV

A, E

01F0

7B

Пересилання в акумулятор

5

ORA

A

01F1

B7

Визначення знака числа

4

JP

M2

01F2

F2

Умовний перехід за позитивним значенням

10

01F3

F8

01F4

10

CMA

A

01F5

2F

Зміна знака числа

4

INR

A

01F6

3C

5

MOV

E, A

01F7

5F

Пересилка в регістр Е

5

M2:

10F8

2.3 Контрольні запитання і завдання

1. Які етапи програмування передують кодуванню алгоритму мовою програмування?

2. Які етапи програмування виконуються після етапу визначення типів вхідних і вихідних змінних?

3. Які вимоги висуваються до алгоритмів?

4. Які можливі типи схем алгоритмів і їхня область застосування?

5. У яких випадках переважне написання програм у машинних двійкових кодах?

6. У яких випадках переважне написання програм у мнемокодах?

7. Що розуміється під вкладенням підпрограм?

2.4 Приклади аудиторних і домашніх завдань

Приклад 2.6. Організувати програмно лічильник циклів.

Розв’язок. Для реалізації завдання складається перелік кроків, тобто схема алгоритму.

Схема алгоритму наведена на рис. 2.5, а фрагмент програми – у табл. 2.4.

Рисунок 2.5 – Схема алгоритму рахунку циклів

Для МП з регістр-акумуляторною архітектурою як лічильник циклів може бути один РЗП, наприклад, регістр В. За командою в нього заноситься число N, що визначає кількість повторюваних циклів. У даному завданні умовно встановлюється N=16. Для визначеності приймаємо, що ділянка програми, яку необхідно повторити 16 разів, починається командою логічної операції що «ВИКЛЮЧАЄ АБО» XRA A, розташованої за адресою 1002, і закінчується командою MOV D, A. Ця команда розташована за адресою 10А1H і пересилає дані з акумулятора в регістр D. Після кожного виконання цієї ділянки програми вміст лічильника (регістра В) зменшується на одиницю за допомогою команди DCR B (адреса 10А2). До тих пір, поки вміст регістра В відмінний від нуля, ознака Z має нульове значення і програма переходить до виконання команди, адреса 1002 якого міститься в другому і третьому байтах команди JNZ (перехід за відсутності нуля). Вказана адреса позначена у програмі міткою М, тобто мітка М1 є мнемонічним позначенням адреси 1002.

Таблиця 2.4 – Програма рахунку циклів

Мітка

Мнемокод

Операнд

Адреса

Н - код

Коментар

Vt

. . . . . . .

. . . . . . .

. . . . . .

. . . . . .

. . . . . . . . . .

. .

MVI

B, 16

1000

06

Встановлення лічильника

7

1001

10

N=16 у (B)

M1:

XRA

A

1002

AF

Обнулення ознаки перенесення

4

Продовження табл. 2.4

. . . . . . .

. . . . . . .

. . . . . .

. . . . . .

. . . . . . . . . .

. .

MOV

D, A

10A1

57

Пересилання вмісту А в регістр D (D:=A)

5

DCR

B

10A2

05

Зменшення вмісту лічильника на 1

5

JNZ

M1

10A3

C2

Перехід за умовою (N)  0 до елемента пам'яті з адресою 1002

10

10A4

02

10A5

10

. . . . . . .

. . . . . . .

. . . . . .

. . . . . .

. . . . . . . . . .

. .

Якщо в результаті чергового віднімання одиниці вміст регістра У виявиться рівним нулю (Z=1), то програма перейде до виконання команди, розташованої за JNZ. Відбувається вихід з циклічної ділянки програми. Якщо регістр В має вісім двійкових розрядів, то розглянута структура програми дозволяє організувати лічильник від 1 до 255 циклів.

Приклад 2.7. Визначити з двох позитивних чисел одне максимальне.

Розв’язок. Під час обробки сигналів часто з’являється необхідність визначення максимального з декількох позитивних чисел. Такі завдання виникають, наприклад, під час виявлення корисних сигналів або під час знаходження максимального значення сигналу при заданому інтервалі часу. Знаходження максимального з декількох чисел зводиться до послідовного визначення максимального з двох чисел.

Вважатимемо, що одне з чисел, які перевіряються, знаходиться в регістрі А, друге – в регістрі В. Потрібно після визначення більше число помістити в регістр В, а менше – в акумулятор. Схема алгоритму реалізації даного завдання наведена на рис. 2.6, а програма в машинних кодах – у табл. 2.5.

Рисунок 2.6 – Схема алгоритму знаходження

максимального з двох позитивних чисел

У системі команд МП є команда порівняння СМР, яка не змінює вмісту акумулятора, проте встановлює трігер ознаки CY (перенесення) в одиничний стан, якщо вміст акумулятора менше вмісту регістра.

Таблиця 2.5 – Програма знаходження більшого з двох позитивних чисел

Мітка

Мнемокод

Операнд

Адреса

Н-код

Коментар

Vt

CMP

B

00A1

B8

Порівняння чисел

7

JC

M1

00А2

DA

Перехід на М1, якщо (А) <(В)

10

00А3

А8

00А4

00

MOV

C, A

00A5

4F

Обмін вмісту між акумулятором і регістром B через регістр З

5

MOV

A, B

00A6

7B

5

MOV

B, C

00A7

41

5

M1:

00A8

Соседние файлы в папке metoda