- •1.2.3 Контрольні запитання і завдання
- •1.2.4 Приклади аудиторних і домашніх завдань
- •1.3 Заняття 2. Двійкова арифметика і основні функції алгебри логіки
- •1.3.2 Методичні вказівки з організації самостійної роботи студентів
- •1.3.3 Контрольні запитання і завдання
- •1.3.4 Приклади аудиторних і домашніх завдань
- •2 Алгоритми і програми проектування мікропроцесорних систем
- •2.1 Мета занять
- •2.2 Методичні вказівки з організації самостійної роботи студентів
- •2.3 Контрольні запитання і завдання
- •2.4 Приклади аудиторних і домашніх завдань
- •3.2.3 Контрольні запитання і завдання
- •3.2.4 Приклади аудиторних і домашніх завдань
- •3.3 Заняття 2,3. Групи команд
- •3.3.1 Мета занять
- •3.3.2 Методичні вказівки з організації самостійної роботи студентів
- •3.3.3 Контрольні запитання і завдання
- •3.3.4 Приклади аудиторних і домашніх завдань
- •4.2.3 Контрольні запитання і завдання
- •4.2.4 Приклади аудиторних і домашніх завдань
- •4.3 Заняття 2. Алгоритми і програми обміну інформацією через послідовний порт
- •4.3.1 Мета занять
- •4.3.2 Методичні вказівки з організації самостійної роботи студентів
- •4.3.3 Контрольні запитання і завдання
- •4.3.4 Приклади аудиторних і домашніх завдань
- •4.4 Заняття 3. Алгоритми і програми обробки інформації в режимі переривань
- •4.4.1 Мета заняття
- •4.4.2 Методичні вказівки з організації самостійної роботи студентів
- •4.4.3 Контрольні запитання і завдання
- •4.4.4 Приклади аудиторних і домашніх завдань
- •61166 Харків, просп. Леніна, 14
1.3.3 Контрольні запитання і завдання
1. Складіть наведені нижче двійкові числа:
0000 0101 1000 1001 0101 0101 101 1001
+ ; + ; + ; + ; + .
0001 0001 0000 1111 1010 1010 011 011
2. Виконайте операцію віднімання двійкових чисел:
1001 1111 0001 1001 0011 1001 1001 1111 1001
- ; - ; - ; - ; - .
111 0000 0011 0101 1101 1111 0000 1001 0001
3. Визначити десяткові еквіваленти результатів складання і віднімання по пунктах 1 і 2 відповідно.
4. Виконати множення наведених нижче пар двійкових чисел:
101 0110 0101 1101 0111 1001
· ; · ; · ; · ; · .
011 0111 0010 1101 1000 1010
5. Складіть з логічних схем комбінаційну схему для однорозрядного напівсуматора і складіть таблицю істинності.
1.3.4 Приклади аудиторних і домашніх завдань
Приклад 1.7. Обчислити різницю чисел 5810 - 2310 в двійковій системі числення.
Розв`язок.
Крок 1. Визначити додатковий код числа 2310.
Двійковий еквівалент числа 2310 . = 00010111
Його зворотний код 11101000.
+
Додати одиницю 00000001.
=
Виходить додатковий код 11101001.
Крок 2. Обчислити різницю шляхом складання двійкового еквівалента числа 5810 і додаткового кода числа 23.
5810. 00111010
+
ДК23 11101001
=
1. 00100011 - різниця (58-23) = + 35.
одиниця
перенесення, відкидається у разі
позитивного результату.
Приклад 1.8. Обчислити різницю чисел 2310 - 5810.
Розв`язок.
Крок 1. Визначення додаткового коду числа 581:
00111010 – прямий код числа 5810;
11000101 – зворотний код числа;
+
00000001 – одиниця;
11000110 – додатковий код.
Крок 2. Обчислення різниці:
00010111 – прямий код числа 2310;
+
11000110 – додатковий код числа 5810;
11011101 – різниця (23-58) = - 35 в додатковому коді, оскільки в старшому розряді є одиниця.
Крок 3. Визначення абсолютного значення різниці:
11011101 – додатковий код різниці;
00100010 – зворотний код;
+
00000001 – одиниця;
00100011 – абсолютне значення різниці (3510).
Під час розв`язання задач у двійковій системі числення рекомендується отримані результати перевіряти за допомогою десяткової арифметики.
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 – Програма визначення модуля числа
Мітка |
Мнемокод |
Операнд |
Адреса |
Н-код |
Коментар |
Vт |
|
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 |
|
|
|
