Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


РОЗРОБКА ПІДПРОГРАМ НА МОВІ МАШИННИХ КОДІВ




 

3.1 Мета роботи та об’єкт дослідження

 

Мета роботи: експериментально дослідити підпрограми на мові машинних кодів.

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

Об’єкт дослідження – програмне забезпечення експериментальної установки на базі мікропроцесорного комплекту типу “УМК”.

 

3.2 Завдання на підготовку до лабораторної роботи

 

3.2.1 Загальні відомості

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

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

Для звертання до підпрограми використовується команда CALL <адреса>,яка має довжину 3 байти. В першому байті записується код команди, в другому – молодший байт адреси початку підпрограми, в третьому – страшний байт адреси початку підпрограми. Під час виконання команди CALL мікропроцесор відсилає вміст програмного лічильника (адресу повернення) в стек. (Стек – одновимірна безадресна пам’ять, в якій записування та зчитуванні інформації відбувається через одну комірку пам’яті, яку називають вершиною стеку).

Мікропроцесор повернеться до адреси повернення тоді, коли зустріне в підпрограмі команду RET(повернення із підпрограми).Тобто МП почне виконувати команду, яка йде за командою CALL. Адресу повернення можливо також зберігати і в 16-розрядному регістрі. Але в цьому випадку, якщо одна підпрограма використовує іншу підпрограму (вкладені підпрограми), перша адреса повернення буде втрачена. Для вирішення цієї проблеми і використовується стек. Коли одна підпрограма викликає іншу, адреси повернення послідовно запам’ятовуються в стек і переміщуються там. При виконанні команди RET адреси послідовно дістаються із стеку.

На рисунку 3.1 представлено алгоритм організації вкладених підпрограм. Згідно з нього, при виконанні команди САLL 950Н в стек записується адреса повернення і передається керування підпрограмі 1, яка починається з комірки 950Н. Коли в підпрограмі 1 зустрічається команда САLL F00Н, відбувається запис другої адреси повернення і передача керування підпрограмі 2. Після виконання підпрограми 2 і виконання команди RET відбувається зчитування вершини стека й передача керування команді, яка йде за командою САLL F00Н. Після виконання команди RET в підпрограмі 2 із вершини стека буде зчитано першу адресу повернення і керування буде передано команді, яка йде за командою САLL 950Н.

 

 

Рисунок 3.1. Організація вкладених підпрограм на мові машинних кодів

 

Як було зазначено, мікропроцесор використовує для стеку визначенні комірки ОЗП, адреси яких задаються програмою МОНІТОР. Спеціальний регістр мікропроцесора – покажчик стеку (SP) містить адресу вершини стеку. Область стеку в ОЗП визначається при занесенні в покажчик стеку необхідної адреси.

Програма МОНІТОР при включенні живлення і натискання на клавішу СКИД заносить в покажчик стеку адресу його вершини. Це дозволяє використовувати стек без попереднього встановлення покажчика стеку. Програма може самостійно встановлювати покажчик стеку. Однак при натисканні на кнопку СКИД в наступний раз, програма МОНІТОР знову встановить попереднє значення покажчика стеку. Глибина допустимого рівня вкладення підпрограм залежить від типу мікропроцесорної системи та мови програмування.

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

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

Внутрішня затримка може виконуватися незалежно від роботи МП і тому МП може виконувати в цей час іншу роботу. Мікропроцесору необхідно тільки періодично опитувати розряд порту, до якого підключено вихід таймера. Для запуску таймера необхідно в відповідний розряд подати „1”.

Внутрішня затримка може бути апаратною та програмною.

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

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

Будь-який мікропроцесор здатен виконувати найпростіші операції – додавання та віднімання. Спробуємо створити підпрограму затримки використовуючи дію віднімання. Для цього необхідно взяти 2 будь-яких регістра МП із 8 відомих (окрім регістру А, так як його можна використати для виконання інших завдань). Нехай ми обрали регістри В і С. Тепер, використовуючи команду безпосереднього завантаження МVI R, <байт>, запишемо в них деякі числа і почнемо віднімати з цих чисел по одиниці. Віднімання будемо проводити за допомогою команди DCR R, яка віднімає від вмісту вказаного регістру одиницю і результат віднімання записує в той же регістр. Віднімання будемо проводити до того часу, поки результат не стане дорівнювати “0”. Цю операцію краще за все виконати за допомогою команди умовного переходу, яка аналізує регістр стану.

Спробуємо скласти підпрограму затримки у вигляді таблиці. Для за­побігання перетину адресних просторів, основну програму будемо запи­су­вати починаючи з адреси 800Н, а підпрограму – з адреси 900Н (табл. 3.1).

В розробленій підпрограмі в регістри В і С завантажуються числа, які формують тривалість затримки. При цьому регістр С утворює внутрішній контур затримки, а В – зовнішній. Якщо мітку К2 встановити в місце, вказане “*”, то підпрограма буде виконувати 256 (FFН) + 112 (70Н) = 368 віднімань, на кожне з яких буде витрачено деякий час. Якщо ж мітку К2 поставити за адресою 902Н, то кількість віднімань буде 256 × 112 = 28672, тому що після кожного зменшення на 1 вмісту регістру В, регістр С знову завантажується числом 255 і цикл віднімань повторюється. Для отримання більш тривалих затримок необхідно використовувати другий варіант встановлення мітки.

Таблиця 3.1


Поделиться:

Дата добавления: 2015-09-15; просмотров: 52; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты