Смекни!
smekni.com

Мікропроцесорні пристрої (стр. 11 из 21)

Перша інструкція, яка буде виконана процесором, це команда GOTO BEGIN, яка передасть управління на адресу 100h і подальша робота продовжиться з цієї адреси. BEGIN - це вибиране користувачем ім'я мітки (мітки завжди повинні починатися з першої позиції рядка), яке Асемблер використовує для адресного посилання. В процесі роботи Асемблер визначає розташування мітки BEGIN і запам'ятовує, що якщо це ім'я буде зустрінуте ще раз, замість нього буде підставлена адреса мітки. Команди CALL і GOTO використовують мітки для посилань в початковому тексті. Тепер подивимося на наступні команди, що виконуються процесором. Команда MOVLW INITA завантажує в робочий регістр W значення, привласнене імені INITA. Це значення задане в заголовку і рівне B'00000000', тобто 00h. Символи B' означають, що дані задані в двійковому форматі. Можна було б написати в цьому ж місці 0 (десятковий) або 0h (шістнадцятковий) і отримати той же самий результат. Двійкове уявлення зручніше використовувати в тих випадках, коли передбачається операція з бітами в регістрі.

Наступна команда MOVWF TRISA завантажує значення з робочого регістра W в регістр управління конфігурацією порту A TRISA. Завдання 0 в розряді цього регістра визначає, що відповідний розряд порту A є виходом. У нашому випадку всі розряди порту A встановлюються виходами. Якби ми захотіли, наприклад, встановити молодший розряд порту A як вхід, ми б задали в секції описи регістрів значення INITA рівним B'00000001'. Якщо по ходу роботи програми нам потрібно буде перевизначати призначення окремих розрядів портів, наприклад, при двонаправленій передачі, то найзручніше задати всі необхідні слова конфігурації в секції опису, як ми зробили для INITA і INITB.

Наступні дві команди MOVLW INITB і MOVWF TRISB визначають конфігурацію порту B. Ми могли б зекономити і не писати команду MOVLW INITB, оскільки в нашому випадку INITB також рівне 0h. Проте ми не стали цього робити, оскільки це може привести до важко виявлених помилок, якщо згодом нам потрібно буде змінити призначення якогонебудь одного розряду. Замість того, щоб змінити тільки один розряд в одному порту, зміняться два розряди з однаковим номером в двох портах. Тому поки програма не закінчена, таку економію робити не бажано, хоча в кінці, на етапі оптимізації коду, такі повтори можна видаляти.

Ось тепер по суті ми тільки підійшли до аналізу основної частини початкового тексту робочої програми – "Виведення дискретних сигналів".

У цій частині програми ми використовували всього три команди:

MOVLW k MOVWF f GOTO k.

Команда MOVLW завантажує байтовий літерал або константу в робочий регістр W. Наступна команда MOVWF пересилає байт з робочого регістра W в заданий регістр f. Команда GOTO передає управління на адресу k. Таким чином, ця частина програми записує в робочий регістр W значення 01010101 і потім видає його вміст на порт B.

Директива асемблера "$" означає поточне значення програмного лічильника (РС). Тому команда GOTO $ означає перехід туди, де ми в даний момент знаходимося. Такий цикл нескінченний, оскільки не існує способу (окрім переривання) вийти з нього. Команда GOTO $ часто застосовується для зупинки коду при відладці.

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

3.4 Перетворення початкового тексту робочої програми

у об'єктний модуль

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

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

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

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

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

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

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

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

Для ОМК сімейств PIC 16/18 також існує інтегроване середовище для розробки робочих програм MPLAB IDE 6.50, у складі якої є всі перераховані вище засоби. Існують і окремі програми-транслятори з Асемблера PASM і MPASM.

Розглянемо трохи докладніше процес перетворення початкового тексту робочої програми для OMK PIC 16/18 з використанням транслятора MPASМ.

3.5 Використання програми-транслятора MPASM

3.5.1. Запуск транслятора

Для того, щоб запустити транслятор необхідно вибрати курсором MPASM.EXE і натиснути "Введення". На екрані з'явиться меню, за допомогою першої опції якого можна вибрати файл з початковим текстом ("власне ім'я".asm), якщо він існує в поточному каталозі. Для цього необхідно вибрати перший пункт і натиснути "Введення", у вікні, що з'явилося, вибрати файл і знову натиснути "Введення".

Друга опція дозволяє вибрати тип процесора. Натискаючи введенням на цей пункт, можна перебирати типи процесорів, поки не буде знайдений потрібний. За допомогою решти пунктів можна вибрати: створювати обьектный файл чи ні, формат НЕХ-файлу і так далі.

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

Аналогічні дії можна провести, написавши в командному рядку DOS наступну команду:

<MPASM ІМ'Я.ASM / P16F**>

і натиснувши "Введення". Тоді трансляція проведеться без входження в меню MPASM.

2.5.2. Результати трансляції

Результатом роботи транслятора є файли з початковим ім'ям і розширеннями НЕХ, OBJ, LST,ERR.

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

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

Файл з розширенням НЕХ містить шістнадцяткові коди команд процесора (мікроконтролера), які використовуються для запису програми в пам'ять програм мікроконтролера за допомогою програматора.

У файлі з розширенням ERR містяться відомості про допущені помилки і некоректні записи, зроблені в програмі. Файл має наступний формат:

<ключове слово (warning, message, error)> [<номер помилки>]<шлях до файлу> <номер рядка> <коментар до помилки>

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

2.5.3 Особливості використання транслятора MPASM

При використанні транслятора MPASM з версіями до 3.11 необхідно враховувати те, що ці програми мають друкарські помилки в командах операцій над регістрами виду MOVF reg. Ці транслятори за умовчанням проводять підстановку, що позначає перенесення результату операції в регістр W.

Окрім цього, ранні версії транслятора MPASM некоректно працюють з другою сторінкою пам'яті ОМК PIC 16F8**. Тому, для коректної роботи програм необхідно безпосередньо самому програмістові перемикати сторінки шляхом установки або скидання 6-го біта в регістрі OPTION.

3.6 Відладка робочих програм

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

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

автономну відладку кожної процедури в статичному режимі, що дозволяє перевірити правильність обчислень, що проводяться, правильність послідовності переходів усередині процедури (відсутність

"зациклення") і т.п.;

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

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