Програмне забезпечення вбудованих систем управління на базі однокристальних мікропроцесорів

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ ВБУДОВАНИХ СИСТЕМ УПРАВЛІННЯ НА БАЗІ однокристальних мікропроцесорів (МП)

1. Програмна модель МП з регістр-акумуляторної архітектурою

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

Програмна модель МПС, побудованої на базі однокристального 8-розрядного МП складається з програмно доступних регістрів, восьмирозрядних осередків ОЗУ і восьмирозрядних портів введення / виводу. Розряди регістрів нумеруються справа наліво цілими числами починаючи з нуля. Програмно-доступними регістрами такого МП є регістри спеціальних функцій (РСФ) і регістри загального призначення (РОН). До регістрам спеціальних функцій відносяться: акумулятор (А), регістр ознак (F), регістр покажчика стека (SP), регістр лічильника команд (PC).

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

Регістр ознак (F) - це восьмирозрядний регістр, що містить ознаки результату виконання команд (рис.1.1).

Для більшості команд ознаки встановлюються таким чином:

ознака S - одиниця, якщо сьомий розряд результату дорівнює одиниці, в іншому випадку - нуль;

ознака нуля Z - одиниця, якщо у всіх розрядах результату нулі, в іншому випадку - нуль;

ознака додаткового перенесення AC - одиниця при перенесенні з третього розряду або при позиці у третій розряд результату, в іншому випадку - нуль;

ознака парності P - одиниця, якщо результат у двійковому коді містить парну кількість одиниць, в іншому випадку - нуль;

ознака перенесення CY - одиниця при перенесенні з сьомого розряду або при позиці в сьомий розряд результату, в іншому випадку - нуль.

Регістр покажчик стека (SP) - це шестнадцатіразрядний регістр, який містить адресу вершини стека. Стік - це динамічна послідовна структура даних в ОЗУ, організована таким чином, що чергова запис даних завжди здійснюється в вершину (початок) стека. Максимальний розмір стека дорівнює адресується ємності пам'яті. У вершину стека можуть записуватися тільки шестнадцатібітних дані.

При запису даних у стек вміст регістра покажчика зменшується на 2, а при зчитуванні - збільшується на 2.

Регістр лічильника команд (PC) - це шестнадцатіразрядний регістр, який вказує адреса наступної команди, яка повинна бути виконана мікропроцесором.

Регістри загального призначення, як правило, позначаються літерами B, C, D, E, H, L, А. Регістри В і С, D і E, H і L в деяких командах розглядаються як шестнадцатіразрядние регістри, звані регістровими парами. Регістри B, D, і H утворюють старші вісім розрядів реєстрових пар, а регістри C, E, і L - молодші.

Програмно-доступні восьмирозрядних осередки ОЗУ використовуються в якості пам'яті МПС. Розряди осередки ОЗУ нумеруються справа наліво цілими числами, починаючи з нуля. Максимальна ємність пам'яті, реалізованої запам'ятовуючим пристроєм, дорівнює 65 536 байт.

Програмно-доступні восьмирозрядних порти використовуються для введення і виведення. Максимальне число регістрів для введення даних складає 256, для виведення даних - стільки ж.

Програмна модель 16-розрядного МП відрізняється збільшенням як кількості програмно-доступних регістрів, так і їх розрядністю [16]. За своїм призначенням вони поділяються на три групи.

Регістри загального призначення AX, BX, CX, DX використовуються для зберігання проміжних результатів і можуть без обмеження брати участь у виконанні арифметичних і логічних операцій. При виконанні операцій над ланцюжками байтів і слів цих регістрів пропонуються спеціальні функції.

Вказівні та індексні регістри (SP, BP, SI, DI) призначені для зберігання 16-розрядних адрес (внутрішньосегментний зсувів) і забезпечують при цьому непряму адресацію і динамічне обчислення ефективного адреси пам'яті.

Сегментні регістри (CS, DS, SS, ES) зберігають початкові адреси чотирьох сегментів пам'яті, використовуваних в поточній програмі: команд, стека, і двох сегментів даних.

Є програмно доступний регістр ознак (прапоровим) (рис.1.2), молодший байт якого FL повністю відповідає регістру прапорів розглянутого вище МП і називаються арифметичними прапорами, а старший байт FH містить чотири додаткових прапора (TF, IF, DF, OF), три перші з яких відносяться до прапорів управління МП.

TF - прапор трасування (простежування). При TF = 1 МП переходить в покомандний (покроковий) режим роботи, який застосовується при налагодженні програм, коли автоматично генерується сигнал внутрішнього переривання після виконання кожної команди. При цьому виконується перехід на відповідну підпрограму, яка зазвичай забезпечує індикацію вмісту внутрішніх регістрів МП.

IF - прапор дозволу переривань, керований за допомогою команди CLI і STI: при IF = 1 МП сприймає і реагує на запит переривання по входу INTR; при IF = 0 переривання з цього входу забороняються (маскуються) і МП ігнорує запити переривань.

DF - прапор напрямку, керований командами CLD і STD, визначає порядок обробки ланцюжків у відповідних командах (при DF = 0 від менших адрес до великих і навпаки при DF = 1).

OF - прапор переповнення, що сигналізує про втрату старшого біта результату складання або віднімання у зв'язку з переповненням розрядної сітки при роботі зі знаковими числами.

При виконанні команд операнди можуть зберігатися в програмно-доступних регістрах мікропроцесора або в пам'яті МПС. Для вказівки операнда в регістрі використовується: реєстрова адресація і реєстрова неявна адресація.

ПРИКЛАД:

MOVA, B

ADCB

CMA

Для вказівки операнда в пам'яті використовуються адресації: безпосередня, пряма, побічно-реєстрова і стекова.

ПРИКЛАД:

LDA 8324H; пряма

IN FA; пряма

ADC M; побічно-реєстрова

PUSH PSW; стекова

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

Для кожного МП є свій список команд. За функціональним призначенням, як правило, вони діляться на групи: команди пересилання даних, арифметичні команди, команди логічних операцій, команди передачі управління, команди управління мікропроцесором.

Група команд пересилки даних:

команди пересилання даних загального призначення (MOV, MVI, LDA, STA, LHLD, SHLD, LXI, LDAX, SPHL, STAX, XCHG, XTHL);

команди звернення до стека (PUSH і POP);

команди введення (IN) і виводу (OUT).

Група арифметичних команд:

команди складання (ADD, ADI, ADC, ACI, INR, INX, DAD);

команди віднімання (SUB, SUI, SBB, SBI, DCR, DCX);

команди множення (MUL);

команди поділу (DIV);

команда десяткової корекції вмісту акумулятора (DAA).

Група команд логічних операцій:

логічні команди (ANA, ANI, ORA, ORI, XRA, XRI);

команди порівняння (CMP, CPI);

команди зсуву (RLC, RRC, RAL, RAR);

команди інверсії вмісту акумулятора (CMA).

Група команд передачі управління:

команди безумовного переходу (JMP);

команди умовного переходу (JNC, JC, JNZ, JZ, JPO, JPE, JP, JM);

команди безумовного виклику підпрограм (CALL, RST);

команди умовного виклику підпрограм (CNZ, CZ, CNC, CC, CPO, CPE);

команда безумовного повернення з підпрограми (RET);

команда умовного повернення з підпрограм (RNZ, RZ, RNC, RC, RC, RPO, RPE, RP, RM).

Група команд управління мікропроцесором:

команди управління ознакою переносу (CMC, STC, CLC);

команди прапорами (EI, DI, CLI, STI);

команда "немає операції" (NOP);

команда зупину мікропроцесора (HLT).

Кількість базових команд МП становить кілька десятків, а з урахуванням їх модифікацій досягає декількох сотень.

Час виконання команди, що оцінюється числом тактів МП. Знаючи частоту генератора тактових імпульсів (FГТІ), можна визначити тривалість одного такту; T (мкс) = 1/FГТІ (МГц), а значить і час виконання команди, що має істотне значення при програмній генерації тимчасових інтервалів.

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

2. Мова проектування МПС, вбудованої в ЕА

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

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

Схеми мови проектування можна розглянути за допомогою простого прикладу. Нехай маємо систему з мікрокомп'ютера з двома виходами (рис.1.3), яка повинна реалізовувати функцію перетворення, представлену на рис.1.1.

Малюнок 1.3 - Структурна схема мікрокомп'ютерної системи

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

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

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

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

Малюнок 1.4 - Функція перетворення

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

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

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

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

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

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

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

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

Для цієї мети використовується конструкція:

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

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

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

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

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

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

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

3 Складання схем алгоритмів

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

Розглянемо як приклад завдання формування двох наборів цілих чисел, що лежать в діапазоні від -5 до +5. Шляхом сортування організується два набори, один з яких включає в себе позитивні числа, а інший - негативні.

Схема алгоритму вирішення цього завдання показана на рис. 1.5.

Малюнок 1.5 - Схема алгоритму з розгалуженням

4 Підпрограми

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

Крім того, по команді виконуються дії, необхідні для повернення до основної програми після виконання підпрограми:

а) у лічильнику команд фіксується адресу команди в основній програмі, яка слідує за командою виклику;

б) вміст лічильника команд (адреса повернення) завантажується в стек, вміст покажчика стека модифікується;

в) в лічильник команд завантажується адреса, що задається командою виклику. Після цього може початися виконання підпрограми.

Останньою виконуваної командою підпрограми є команда RET (return - повернення). За цією командою виконується повернення до основної програми, перерваної командою виклику. Команда повернення містить тільки код операції. За цією командою відбувається наступне: а) лічильник команд отримує з стека адресу команди в основній програмі, наступної за командою виклику; б) вміст покажчика стека відповідно модифікується.

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

З однієї програми можна робити звернення до кількох підпрограм.

Одна підпрограма може звернутися до іншої. Така побудова підпрограм називаються вкладеними.

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

5 Програмування в машинних кодах

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

Як приклад лінійної програми в машинних двійкових кодах розглянемо програму складання двох чисел, одне з яких 01100100 знаходиться в регістрі загального призначення (РОН) У, а друге - 00010111 розташоване в комірці пам'яті з адресою 0000 0000 тисячі 1111. Нагадаємо, що даний МП має шестнадцатіразрядную шину адреси. Фрагмент програми наведено в табл. 1.1.

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

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

Мнемокод

0000 0000 0000 0100

01111000

0000 0000 0000 0101

00100001

0000 0000 0000 0110

10001111

0000 0000 0000 0111

00000000

0000 0000 0000 1000

10000110

0000 0000 0000 1001

01110110

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

. . . . . . . . .

0000 0000 0000 0100

00010111

Таблиця 1.2 - Програма складання в шістнадцятиричних кодах

Мнемокод

Адреса

Н - код

Vt

MOV A, B

0004

78

5

LXI H

0005

21

16


0006

8F



0007

00


ADD M

0008

86

7

HLT

0009

76

7

. . . . . . . . .

. . . . . .

. . . . . .

. . . .


008F

17


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

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

Мікропроцесор при виконанні програми послідовно звертається до комірок пам'яті і виконує по черзі всі команди. Нагадаємо, що коди операцій і операнди зберігаються в пам'яті в однаковому вигляді і їх розрізнення здійснюється мікропрограмами виконання команд, закладеними в МП. Остання команда має код 01110110 і є командою зупинки (HLT).

В результаті виконання програми в акумуляторі виявиться записаним число 01111011.

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

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

Практично зручніше програмувати безпосередньо в мнемокода, а потім представляти шістнадцяткові коди адрес і операндів, отримані від розподілу пам'яті.

6 Програмування в мнемокода

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

Приклад 1.1. Організація лічильників циклів. Схема алгоритму рахунку показана на рис. 1.6, а фрагмент програми наведено в табл. 1.3.

Малюнок 1.6 - Схема алгоритму рахунку циклів

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

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

Мітка

Мнемокод

Операнд

Адреса

Н - код

Коментар

Vt


. . . . . . .

. . . . . . .

. . . . . .

. . . . . .

. . . . . . . . . .

. .


MVI

B, 16

1000

06

Установка лічильника

7




1001

10

N = 16 в (B)


M1:

XRA

A

1002

AF

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

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 циклів. При необхідності отримання великого числа циклів для організації лічильника слід використовувати реєстрові пари (наприклад, В і С). Завантаження такої пари здійснюється за допомогою команди LXI B, а замість команди DCR У необхідно використовувати команду DCX B (декремент реєстрової пари).

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

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

Малюнок 1.7 - Схема алгоритму визначення модуля числа

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

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

Малюнок 1.8 - Схема алгоритму знаходження більшого з двох позитивних чисел

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

Мітка

Мнемокод

Операнд

Адреса

Н-код

Коментар


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




Для визначеності будемо вважати, що одне з чисел знаходиться в акумуляторі, а інше - в регістрі В. Потрібно більше число помістити в регістр В, а менше - в акумулятор. Схема алгоритму показана на рис. 1.8, а програма в машинних кодах наведена в табл. 1.5.

Малюнок 1.9 - Схема алгоритму формування тимчасової затримки

Таблиця 1.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




Приклад 1.1. Організація тимчасової затримки тривалістю 100мкс.

Програму, що забезпечує таку затримку, оформимо у вигляді підпрограми, яку назвемо DEL. Це символічне ім'я будемо використовувати у вигляді мітки, що вказує початкову адресу підпрограми. Схема алгоритму формування тимчасової затримки зображена на рис. 1.9, а програма поміщена в табл. 1.6. Початковий адресу підпрограми записаний в другому і третьому байтах команди, за допомогою якої відбувається звернення до підпрограми DEL. При виконанні підпрограми в регістр В повинно бути записано число циклів Х, яке спочатку невідомо. Вміст регістра У зменшується на одиницю до тих пір, поки не стане рівним нулю. При цьому ознака Z встановлюється в одиничний стан (Z = 1) і відбувається вихід з циклу.

Підпрограма непрацездатна до тих пір, поки не буде встановлено на X.

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

Команди MVI B, X, CALL DEL і RET використовується один раз. Якщо частота генератора, що задає МП становить 2МГц, кожен такт триває 0.5мкс. У цьому випадку час виконання перерахованих команд складе 17мкс.

Для отримання затримки часу, що дорівнює 100мкс, циклічний ділянку програми повинен виконуватися стільки разів, і цей процес завершився за 100-17 = 83мкс. Час виконання команд DCR B і JNZ M1 складає 2. 5 +5 = 7. 5 мкс. Затримку 83мкс не можна отримати багаторазовим повторенням команд циклу, оскільки 83 не ділиться на 7.5 без залишку.

Якщо повторити циклічний ділянку програми X = 10 разів, то отримаємо тимчасову затримку 75 мкс. Решта 835 = 8 мкс можна компенсувати введенням поспіль чотирьох команд NOP (К = 4). Значення X = 0A, відповідне необхідного числа циклів, заноситься у другій байт команди MVI B, X.

Таблиця 1.6 - Програма формування тимчасової затримки тривалістю 100мкс

Мітка

Мнемокод, операнд

Адреса

Н-код

Коментар


CALL DEL

01C0

CD

Виклик підпрограми формування тимчасової затримки

17



01С1

09





01С2

0A



. . .

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

. . . .

. . . .

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

. . .

DEL:

MVI B, X

0A09

06

Запис в регістр У числа X = 0A

7



0A0A

0A



M1:

DCR B

0A0B

05

Зменшення вмісту регістра У на 1

5


JNZ M1

0A0C

С2

Повторити цикл, якщо результат не дорівнює нулю

105



0A0D

0B





0A0E

0A




NOP

0A0F

00

Порожні операції

4


NOP

0A10

00


4


NOP

0A11

00


4


NOP

0A12

00


4


RET

0A13

C9

Повернення до основної програми

10

7 Програмування на мові асемблера

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

Командний рядок при цьому розділяється на чотири поля:

полі «МІТКА»

полі «КОД ОПЕРАЦІЇ»

полі «Операнд»

Поле «КОМЕНТАРІ»

Поля можуть відділятися один від одного довільним числом пробілів, але не менше одного.

Мітка. У полі мітки розміщується символічне ім'я комірки пам'яті, в якій зберігається зазначена команда або операнд. Мітка являє собою буквено-цифрову комбінацію, що починається з букви. Використовуються тільки букви латинського алфавіту. Деякі асемблери допускають використання в мітках символу підкреслення (_). Довжина позначки не повинна перевищувати шести символів. Мітка завершується двокрапкою (:).

Псевдокоманди асемблера не перетворюються в двійкові коди, а тому не можуть мати міток. Виняток становлять псевдокоманди резервування пам'яті і визначення даних (DS, DB, DW). У псевдокоманди, здійснюють визначення символічних імен, в полі мітки записується визначається символічне ім'я, після якого двокрапка не ставиться.

В якості символічних імен та міток не можуть бути використані мнемокод команд, псевдокоманди і операторів асемблера, а також мнемонічні позначення регістрів та інших внутрішніх блоків МП або МК.

Код операція. У цьому полі записується мнемонічне позначення команди МП або МК або псевдокоманди асемблера, яке є скороченням (абревіатурою) повного англійського найменування виконуваної дії. Наприклад: МОV - movе - перемістити, JМР - jump - перейти, DВ - define bуtе - визначити байт.

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

Операнди. У цьому полі визначаються операнди (або операнд), що беруть участь в операції. Команди асемблера можуть бути без-, одно-або двухоперанднимі. Операнди розділяються комою (,).

Операнд може бути заданий безпосередньо або у вигляді його адреси (прямого чи непрямого). Безпосередній операнд представляється числом. У деяких МП він задається в команді.

ПРИКЛАД:

MVIA, 15H

LXIH, 23BEH

ACI25

У МК сімейства MCS 51 записується з обов'язковим зазначенням префікса безпосереднього операнда (#) (MOV A, # 25 або з символічним ім'ям: ADDC A, # OPER2). Адреса операнда може бути заданий мнемонічним позначенням регістра (INC Rn; MOV A, D), символічним ім'ям (MOV A, MEMORY). Дороговказом на непряму адресацію може служити для одних МП буква М (MOV M, A; ADD M), для інших префікс @ (MOV @ Ri, 2FH). Операндом може бути прямий адресу комірки пам'яті (JMP 8324H; CALL 115BH; JNC 1F5AH), порту вводу / виводу (IN F9H, OUT BAH) або їх символічні імена (JMP LABEL; MOV A, P3).

Використовувані в якості операндів символічні імена і мітки повинні бути визначені, а числа представлені з вказівкою системи числення, для чого використовується суфікс (літера, що стоїть після числа): В - для двійкової, Q - для вісімковій, D - для десяткової і Н - для шістнадцятковій. Число без суфікса за замовчуванням вважається десятковим.

Обробка виразів у процесі трансляції. Деякі асемблери допускають використання виразів у полі операндів, значення яких обчислюються в процесі трансляції.

Вираз є сукупність символічних імен і чисел, пов'язаних операторами асемблера. Оператори асемблера забезпечують виконання арифметичних ("+" - додавання, "-" - віднімання, * - множення, / - ціле розподіл) і логічних (ОR - АБО, аnd - І, ХОR - виключає АБО) операцій у форматі 2-байтних слів .

Коментар. Поле коментаря може бути використано програмістом для текстового або символьного пояснення логічної організації прикладної програми. Поле коментаря повністю ігнорується асемблером, а тому в ньому допустимо використовувати будь-які символи. За правилами мови асемблера полі коментаря починається після крапки з комою (;).

Псевдокоманди асемблера. Ассемблірующая програма транслює вихідну програму в об'єктні коди. Хоча транслює програма бере на себе багато хто з рутинних завдань програміста, таких як присвоєння дійсних адрес, перетворення чисел, привласнення дійсних значень символьним змінним і т.п., програміст все ж таки повинен вказати їй деякі параметри: початковий адресу прикладної програми, кінець ассембліруемой програми, формати даних і т.п. Всю цю інформацію програміст вставляє у вихідний текст своєї прикладної програми у вигляді псевдокоманди (директив) асемблера, які тільки управляють процесом трансляції і не перетворюються в коди об'єктної програми.

Псевдокоманди ORG 10Н задає асемблеру адресу комірки пам'яті (10Н), в якій повинна бути розташована наступна за нею команда прикладної програми.

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

PETEQU13

призводить до того, що в процесі ассемблирования всюди, де зустрінеться символічне ім'я PET, воно буде замінено числом 13.

Символічні імена операндів, переобумовлених в процесі виконання програми, визначаються псевдокоманди SET:

ALFASET3

. . .

. . .

ALFASETALFA +1

Асемблер MCS-51 дозволяє визначити символічне ім'я як адресу внутрішніх (псевдокоманди DATA), зовнішніх (XDATA) даних або адресу біта (псевдокоманди BIT). Наприклад, директива

ERROR_FLAGBIT25H.3

визначає символічне ім'я ERROR_FLAG як третій біт осередки ОЗУ з адресою 25Н.

Псевдокоманди DB забезпечує занесення в ПП константи, що представляє собою байт.

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

У результаті трансляції повинна бути отримана карта пам'яті програм, де кожній комірці пам'яті поставлений у відповідність зберігається в ній код.

Відповідно до формату команд для представлення їх об'єктних кодів відводяться одна, дві або три осередки пам'яті програм.

Приклад програми на мові асемблера:

ORG801FH; Присвоєння початкової адреси для

; Підпрограми DELET (затримка)

COUNTEQUXXXXH; Присвоєння символічного імені

; Значенням XXXXH (кількість циклів

; В підпрограмі для формування

; Затримки)

PUSHPSW, 11 тактів. Збереження в стеку

; Програмно доступні регістри

; (A, F, H, L)

PUSHH, 11 тактів

LXIH, COUNT; 10 т. Установка лічильника циклів у

; Реєстрової парі (H) (L)

CICL: DCXH; 5т.Уменьшеніе лічильника циклів на 1

MOVA, L; 4т. і перевірка

ORAH; 4т. на "нуль"

JNZCIC1; 10т. If XXXX ¹ 0 GOTO CICL

POPH; 10т. Відновлення програмно-

POPPSW; 10т. доступних регістрів перед

; Виходом з підпрограми

RET; 10т. Вихід

8 Введення, редагування, трансляція та налагодження прикладних програм

Написанням тексту програми закінчується перший етап розробки прикладного програмного забезпечення - "від постановки задачі до вихідної програму" і починається наступний - "від вихідної програми до об'єктному модулю".

Для простих програм об'єктний код може бути отриманий вручну (ручна трансляція). Однак для більш складних програм потрібні спеціальні засоби автоматизації підготовки програм. Зазвичай такі кошти використовують великі ємності пам'яті і широкий набір периферійних пристроїв, в силу чого вони не можуть бути резидентними, а використовуються тільки на мікроЕОМ.

У мінімальний склад програмного забезпечення крос-засобів входять:

системна програма для введення вихідного тексту прикладної програми, його редагування і запису на зовнішній носій інформації - так званий редактор текстів;

програма-транслятор, що забезпечує перетворення вихідного тексту прикладної програми в об'єктний модуль (ASM).

Більш потужні крос-засоби припускають наявність редактора зовнішніх зв'язків (LINK), що дозволяє включати в програму модулі, розроблені незалежно один від одного, і програму, що забезпечує настройку переміщуються програмних модулів на абсолютні адреси (LOCATE).

Для введення вихідного тексту прикладної програми необхідно викликати редактор текстів, вказавши йому тип носія, на якому буде створений вихідний файл.

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

ASSEMBLY COMPLETE NO ERRORS

_

або повідомлення

ASSEMBLY COMPLETE NNN ERRORS <LLL>

_

із зазначенням кількості помилок (NNN) і номери останньої помилкового рядка (LLL) за наявності синтаксичних помилок.

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

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

Література

  1. Таверньє К. PIC-мікроконтролери. Практика застосування: Пер. з фр. -М: ДМКПресс, 2008. - 272 с.: Іл. (Серія «Довідник»).

  2. Борзенко А.Є. IBM PC: пристрій, ремонт, модернізація. - 2-е вид. перераб. і доп. - М.: ТОВ фірма «Комп'ютер Прес», 2006. - 344с.: Іл.

  3. Цифрові інтегральні мікросхеми: Справ. / М. І. Богданович, І.М. Грель, В.А. Прохоренко, В.В. Шалімо.-Мн.: Білорусь, 2001. - 493 с.: Іл.

  4. ДСТУ 3008-95. Документація. Звіти у сфері науки і техніки. Структура і правила оформлення.

  5. Охорона праці в обчислювальних центрах. Ю.Г. Собаров и др. - М.: Машинобудування, 2000. - 192с.

    Додати в блог або на сайт

    Цей текст може містити помилки.

    Програмування, комп'ютери, інформатика і кібернетика | Контрольна робота
    107.6кб. | скачати


    Схожі роботи:
    Апаратне і програмне забезпечення простих мікропроцесорних систем 2
    Апаратне і програмне забезпечення простих мікропроцесорних систем
    Основні поняття та програмне забезпечення систем реального часу
    Програмне забезпечення управління автоматизованим комплексом багатоканального зв`язку
    Програмне забезпечення ПК Cистемне програмне забезпечення
    Дослідження систем управління по функції фінансового забезпечення
    Особливості створення інформаційного забезпечення систем організаційного управління
    Методика створення програмного забезпечення для систем управління підприємствами з використанням типових
    Програмне забезпечення
© Усі права захищені
написати до нас