рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

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

Приклад написання вхідного тексту програми - раздел Высокие технологии, ТЕХНОЛОГІЯ РОЗРОБКИ ТА ВІДЛАГОДЖЕННЯ   Нижче Наведений Приклад Написання Початкового Тексту Робочої ...

 

Нижче наведений приклад написання початкового тексту робочої програми для ОМК PIC 16С84 (16F84):

; Приклад початкового тексту програми (назва програми)
LIST P = 16C84, E = 2
;Секція заголовка
; Опис операційних регістрів
TMRO EQU 01h ; Імені TMRO присвоєне ; значення 01h (де, 01h – ; адреса регістра TMRO в ; пам'яті даних ПД)
PC EQU 02h  
STATUS EQU 03h  
FSR EQU 04h  
; Опис регістрів вводу/ виводу
CNTRLPORT EQU 05h ; Імені CNTRLPORT ; присвоєне значення 05h
DATAPORT EQU 06h  
; Опис комірок ОЗП
SCRATCH EQU 0Ch ; Імені SCRATCH ; присвоєне значення 0Сh
DIGIT EQU 0D  
; Опис бітів регістру STATUS
C EQU 0h ; Iдентифікатору (імені) ; С присвоєне значення 0 ; (0-й розряд регістра ; STATUS)
DC EQU 1h  
Z EQU 2h  
PD EQU 3h  
TO EQU 4h  
RP EQU 5h  
; Опис керуючих регістрів
TRISA EQU 85h ; Імені TRISA присвоєне ; значення 85h (де 85h – ; адреса регістра TRISA у ; ПД)
TRISB EQU 86h  
; Опис слів ініціалізації (констант) для порту введення/ виведення, ; що визначають призначення кожного розряду регістрів портів
INITA EQU B'00000000' ; Імені INITA присвоєне ; значення двійкового коду ; 00000000, згідно якому ; всі розряди порту А є ; виходами
INITB EQU B'00000000'  
; Робоча секція ; Початок частини робочої програми, що виконується
  ORG  
  GOTO BEGIN  
  ORG 100h  
BEGIN
; Iніціалізація мікроконтролера
  MOVLW INITA  
  MOVLF TRISA  
  MOVLW INITB  
  MOVWF TRISB  
; Виведення дискретних сигналів
  MOVLW B'01010101' ; Завантажити 01010101 в W
  MOVWF DATAPORT ; Записати W в порт В
  GOTO $ ; Нескінченний цикл
; Секція закінчення END
                   

 

Спробуємо на підставі наведеного прикладу пояснити деякі основні особливості й правила написання вхідних текстів програм для ОМК PIC на мові Асемблера. Для цього будемо аналізувати і обговорювати рядок за рядком дану програму.

По-перше, всі рядки, що починаються зі знака ";" сприймаються асемблеpом як коментарі. Перейдемо до виразу TMR0. Ми задали асемблеpу, що кожний раз, коли зустрінеться слово TMR0, необхідно підставити значення 01h (01 шістнадцятирічне). Слово "EQU" означає pівність.

Таким способом ми надали TMR0 значення 01h. Як видно з рис. 1.2, регістр TMR0 справді має адресу 01h. Ви можете використати 01h кожного разу, коли захочете адресувати регістр TMR0, але це буде значно складніше налагодити, оскільки Ви повинні будете весь час пам'ятати, що 01h означає TMRO. У Вас можуть існувати і дані, що дорівнюють 01h. Використання символьних імен усуває двозначність і дозволяє полегшити читання вхідного тексту. Ви також можете бачити вирази для виявлення регістрів PC, STATUS і FSR. Ім'я PC відповідає регістру з адресою 02h, ім'я STATUS відповідає регістру з адресою 03h, ім'я FSR – регістру з адресою 04h і так далі. Ми також задали імена для портів вводу/виводу, CNTRLPORT (05h) і DATAPORT (06h).

Комірки ОЗП також можуть мати імена. Ми вибрали імена "SCRATCH" для комірки з адресою 0Ch і "DIGIT" для комірки з адресою 0Dh.

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

Ви можете не тільки називати регістри, але й окремі біти усередині регістрів. Зверніть увагу на секцію, що задає регістр STATUS. В табл. 1.2 показано, з чого складається регістр STATUS. Символу С присвоєно значення 0h, оскільки CARRY або C, це нульовий біт слова стану STATUS. Кожного разу, коли ми повинні будемо перевіряти біт CARRY (біт 0), ми будемо користуватися попередньо виявленим символом "C". Кожного разу, коли ми забажаємо звернутися до біта 2 або біта ZERO, ми будемо використовувати символ "Z" замість 02h. Ви можете визначити таким чином повну структуру бітів регістру, навіть якщо Ви після цього не всі з них будете використовувати.

Тепер нам стало ясно, як описуються регістри, і ми можемо перейти до коду, що виконується. Перед тим, як почати код, що виконується, ми повинні задати вираз ORG 0. Це покажчик для асемблеpа, що код, наступний за цим виразом, починається з нульової адреси ППЗУ. Вираз "ORG" використо­вується для розміщення сегментів коду за різними адресами в межах розмірів ППЗУ. Ще один вираз ORG знаходиться перед міткою BEGIN, що має адресу 100h, як задано виразом ORG 100h. Код, що виконується, повинен закінчуватися директивою END, що означає, що за цією директивою будуть відсутні виконувані команди.

При включенні живлення PIC16F84 пересувається на адресу 000h. Перша інструкція, котра буде виконана процесором, це команда GOTO BEGIN, яка передасть керування на адресу 100h і подальша робота продовжиться з цієї адреси. Вираз BEGIN – це ім'я мітки, що вибирається користувачем (мітки завжди повинні починатися з першої позиції рядка), котру асемблеp використовує в якості адресного заслання. В процесі роботи асемблеp виявляє положення мітки BEGIN і запам’ятовує, якщо це ім'я зустрінеться ще раз, замість нього буде підставлена адреса мітки. Команди CALL і GOTO використовують мітки для посилань у початковому тексті.

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

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

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

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

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

MOVLW k,

MOVWF f,

GOTO k.

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

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

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

 

– Конец работы –

Эта тема принадлежит разделу:

ТЕХНОЛОГІЯ РОЗРОБКИ ТА ВІДЛАГОДЖЕННЯ

ТЕХНОЛОГІЯ РОЗРОБКИ ТА ВІДЛАГОДЖЕННЯ РОБОЧИХ ПРОГРАМ ДЛЯ OMK PIC Технологія розробки та... Правила запису програм на мові Асемблера...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Приклад написання вхідного тексту програми

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

РОБОЧИХ ПРОГРАМ ДЛЯ OMK PIC
  Технологія розробки та відлагодження робочих програм для ОМК PIC відрізняється від традиційної [1] тільки набором інструментальних засобів. Написання вхідного тексту програми можлив

МIТКА ОПЕРАЦІЯ ОПЕРАНД (і) КОМЕНТАР
  Ланки (поля) можуть відділятися один від одного довільним числом пропусків. Порядок і позиція полів важливі. Так, мітки повинні починатися в першому стовпчику. Операція (мнемоніка к

Структура робочої програми
  Робоча програма для ОMK PIC 16/17 складається з трьох основних секцій: 1. Секція заголовка; 2. Робоча секція; 3. Секція закінчення. В секції заго

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

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

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

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

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

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

Призначення команд
Після запуску MPSIM необхідно вибрати регістри, що контролюються в області перегляду на екрані монітора. Для цього можна користуватися наступними командами: AD – дозвол

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

Особливості використання симулятора MPSIM
  При використанні симулятора MPSIM версії 5.11 потрібно враховувати те, що обробка переривання починається тільки через 4 такти, а симулятор переходить на обробку переривання через 1

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги