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

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

Руководство пользователя

Руководство пользователя - раздел Образование, Mpasm™ Руководство Пользователя Перевод Ос...

MPASM™

Руководство пользователя

Перевод основывается на технической документации DS33014G компании Microchip Technology Incorporated, USA.

© 000 "Микро-Чип" Москва - 2001

Распространяется бесплатно.

Полное или частичное воспроизведение материала допускается только с письменного разрешения 000 «Микро-Чип» тел. (095) 737-7545 www.microchip.ru


MPASM USER'S GUIDE

Information contained in this publication regarding device applications and the like is intended by way of suggestion only. No representation or warranty is given and no liability is assumed by Microchip Technology Incorporated with respect to the accuracy or use of such information. Use of Microchip's products as critical components in life support systems is not authorized except with express written approval by Microchip.

0 1999 Microchip Technology Incorporated. All rights reserved.

The Microchip logo, name, PIC, PICmicro, PICMASTER, PICSTART, and PRO MATE are registered trademarks of Microchip Technology Incorporated in the U.S.A. and other countries. MPLAB, and Smart Serial are trademarks of Microchip Technology in the U.S.A. and other countries.

All product/company trademarks mentioned herein are the property of their respective companies.


Содержание

1. Предварительная информация о MPASM ..............…..........5

1.1 Введение....................................................................................……...................... 5

1.2 Основные части раздела..............……................................................. 5

1.3 Что такое MPASM................................................................................... 5

1.4 Назначение MPASM....…...............…..................................................... 5

1.5 Совместимость кода программы.........….............................................. 5

1.6 Совместимость с инструментальными средствами........………..........5

2.2 Основні частини розділу...........……………......................................... 6

2.3 Установка MPASM..............….............................................................. 6

2.4 Короткий огляд асемблера..............................................…................. 6

2.5 Вхідні і вихідні файли MPASM....................................................…...... 8

3. DOS версія MPASM. ......................................................…...................11

3.1 Вступ......................................................................................................11

3.2 Основні частини розділу.......................................................................11

3.3 Інтерфейс командного рядка.…........................................................…11

3.4 Віконний інтерфейс....................................................…........................13

4. Windows версія MPASM. .....................................….............................14

4.1 Вступ.......................................................................................................14

4.2 Основні частини розділу..................................................................…..14

4.3 Віконний інтерфейс............................................................................…14

4.4 Робота з MPASM в інтегрованому середовищі MPLAB IDE...........…15

4.5 Настройка MPLAB IDE для роботи з MPASM. ................................…15

4.6 Компіляція початкового тексту програми. ....................................…...17

4.7 Можливі помилки. ...............................................…...........................…17

5. Директиви MPASM....…....................................................................... 19

5.1 Вступ..........................................................…...................................... 19

5.2 Типи директив MPASM........................................................................ 19

5.3 Список директив MPASM.........................................…........................ 19

5.4__BADRAM - Ідентифікація нереалізованого ОЗУ....……................... 21

5.5 BANKISEL - Вибір банку для непрямої адресації............................... 21

5.6 BANKSEL - Вибір банку для прямої адресації.................................... 21

5.7 CBLOCK- Визначення блоку констант..................….………............... 22

5.8 CODE - Початок коду об'єктного файла в пам'яті програм................22

5.9__CONFIG - Установка бітів конфігурації мікроконтроллера........... 23

5.10 CONSTANT - Визначити символьну константу. .............…...............23

5.11 DA - Збереження рядка в пам'яті програм....................................... 23

5.12 DATA- Збереження значень або тексту в пам'яті програм..............24

5.13 DB - Побайтне збереження даних в пам'яті програм.…...................24

5.14 DE - Резервує 8-розрядне значення в EEPROM пам'яті. ........…….24

5.15#DEFINE - Визначити заміну тексту.................................................. 25

5.16 DT- Визначає таблицю даних.........................................................…25

5.17 DW - Резервує слова пам'яті програм.......................................….....25

5.18 ELSE - Початок альтернативного блоку програми умови IF............26

5.19 END - Закінчення програми.........................……................................26

5.20 ENDC - Закінчення автоматичного блоку констант. ...................…..26

5.21 ENDIF -Закінчення умовного блоку програми..............................…. 26

5.22 ENDM - Закінчення макроса.............................….............................. 27

5.23 ENDW-Завершує цикл While.............................................................. 27

5.24 EQU - Визначення константи асемблера. .........................................27

5.25 ERROR - Формує повідомлення про помилку. ...............…..............27

5.26 ERRORLEVEL - Настройка параметрів виведення про помилки.... 28

5.27 EXITM - Вихід з макроса..................................................................... 28

5.28 EXPAND - Включення тексту макроса в файл лістинг програми.....28

5.29 EXTERN - Визначення зовнішніх міток.......................................…... 29

5.30 FILL - Запис значення в пам'ять програм......................……………..29

5.31 GLOBAL- Зовнішня мітка....................................…............................ 29

5.32 IDATA - Оголошує початок ініціалізації даних в об'єктному файлі. 30

5.33__IDLOCS - Установка значення ID......….......................................... 30

5.34 IF - Початок блоку умови..........................................................…...... 30

5.35 IFDEF - Виконання, якщо визначена символьна мітка.................... 31

5.36 IFNDEF - Виконання, якщо символьна мітка не визначена............ 31

5.37 INCLUDE - Підключення додаткового початкового файла.......…... 31

5.38 LIST- Список параметрів.......................…….......................................32

5.39 LOCAL - Оголосити локальну змінну макроса. ......................................…......32

5.40 MACRO - Визначити макрос..............................................................…........... 33

5.41 __MAXRAM - Визначає максимальний об'єм ОЗУ. ..............................……...33

5.42 MESSG - Сформувати повідомлення...............................................……....... 33

5.43 NOEXPAND - He розвертати текст макроса.................................................... 34

5.44 NOLIST - Вимкнути висновок в файл лістинг. .......................……...................34

5.45 ORG -Встановити адресу програми. ......................................................……...34

5.46 PAGE - Вставити сторінку в файл лістинг програми..........................…......... 34

5.47 PAGESEL - Зробити вибір сторінки. ..........................................................….. 35

5.48 PROCESSOR - Вибір типу мікроконтроллера. ................................…….........35

5.49 RADIX - Система числення за умовчанням. ................................…………......35

5.50 RES - Резервування пам'яті.............................................................................. 36

5.51 SET - Визначення константи.......................................................….................. 36

5.52 SPACE - Вставити пусті рядки....................................................…….............. 36

5.53 SUBTITLE - Визначення підзаголовка програми............................................. 36

5.54 TITLE - Визначення заголовка програми. ...............................................….....37

5.55 UDATA - Початок ініціалізації даних із звичайним розміщенням в пам'яті (для об'єктного файла)....................…………………………………………………………….37

5.56 UDATA_ACS - Початок ініціалізації даних швидкого доступу (для об'єктного файла).............................……………………………………………………………......... 37

5.57 UDATA_OVR - Початок ініціалізації тимчасових даних (для об'єктного файла)...........................................……………………………………………………..... 38

5.58 UDATA_SHR - Початок ініціалізації даних, що розділяються (для об'єктного файла)...............................………………………………………………………............. 38

5.59 #UNDEFINE- Відмінити заміну тексту..............................…............................ 38

5.60 VARIABLE - Визначення символьною змінною. ............................................. 39

5.61 WHILE-Цикл While. ............................................................…........................... 39

6. Використання MPASM для створення переміщуваних об'єктів………………………………………………………………….40

6.1 Вступ................……………………....................................................... 40

6.2 Основні частини розділу............................................................…......40

6.3 Файли сценарія.................................................................................... 40

6.4 Пам'ять програм.................................................................................. 40

6.5 Операнди інструкцій............................................................................ 41

6.6 Розподіл ОЗУ....................................................................................... 41

6.8 Звернення до міток інших модулів. …................................................42

6.9 Робота з банками і сторінками пам'яті. .….........................................42

6.10 Недопустимі директиви......................................................................43

6.11 Формування об'єктного файла. ……..................................................43

6.12 Приклад програми. ............................................................................44

7. Мова макрокоманд.............................……............................................46

7.1 Вступ...................................................................................................... 46

7.2 Основні частини розділу..................................................................... 46

7.3 Синтаксис макрокоманд............................................................…...... 46

7.4 Директиви макрокоманд...................................................................... 46

7.5 Заміна тексту........................................................................................ 47

7.6 Використання макросів…………...........................................................47

7.7 Приклади програм. .......................................................................…....47

8. Синтаксис виразів і операцій. .................................................……....49

8.1 Вступ.................................................................................................…..49

8.2 Основні частини розділу...................................................................... 49

8.3 Текстові рядки....................................................................................... 49

8.4 Числові константи і системи числення.................................................50

8.5 Арифметичні операції.......…................................................................ 51

8.6 High/Low/Upper операції....................................................................... 51

8.7 Операції інкремент/декремент..…................…................................... 52

Додаток А. Формат HEX файлів.....….....................................................53

А.1 Введення. ..……...................................................................................53

А.2 Основні частини розділу...............................….................................. 53

А.З Intel HEX формат INHX8M (.HEX)...................................................... 53

А.4 Intel Split HEX формат INHX8S (.HXL/.HXH)..................................... 53

A.5 Intel HEX формат INHX32 (.HEX)................................….................... 54

Додаток В. Повідомлення MPASM...........................…….......................55

B.1 Введення. ............................................................................……….......55

8.2 Основні частини розділу..............................…..................................... 55

8.3 Повідомлення про помилки..…........................................................... 55

8.4 Попередження….................................................................................. 59

8.5 Інформаційні повідомлення.........….................................................... 61


1. Попередня інформація об MPASM

1.1 Вступ

У цьому розділі будуть розглянуті основні характеристики MPASM.

1.2 Основні частини розділу

Що таке MPASM

Призначення MPASM

Сумісність коду програми

Сумісність з інструментальними засобами

Що таке MPASM

Асемблер MPASM працює під управлінням операційних систем MS-DOS V5.0 і Microsoft Windows 95/98/NT на PC сумісних комп'ютерах. 1.4 Призначення MPASM MPASM забезпечує універсальний інструмент розробки програм для 12/14/16-розрядний мікроконтроллерів PICmicro.

Вступ

Цей розділ присвячений опису версій MPASM для ОС DOS (MPASM.EXE і MPASM_DP.EXE). DOS версія (MPASM. EXE) виконується з командного рядка DOS або DOS вікна в Windows. Розширена DOS версія (MPASM_DP.EXE) працює точно також, і може використовуватися, коли для DOS версії не вистачає пам'яті.

3.2 Основні частини розділу

Інтерфейс командного рядка Віконний інтерфейс

3.3 Інтерфейс командного рядка

MPASM може бути запущений з командного рядка:

MPASM [/ <параметр> [/ <параметр>. ..]][ <ім'я файла>] або

MPASM_DP [/ <параметр> [/ <параметр>. ..]][ <ім'я файла>] Де:

/ <параметр> - один з параметрів компіляції / <ім'я файла> - ім'я початкового файла

Наприклад:

Якщо початковий файл test.asm знаходиться в поточній директорії, то команда компіляції може бути наступна:

MPASM /е /I test

Параметри настройки, прийняті за умовчанням, можуть бути змінені таким чином:

/<параметр> Вмикає параметр

/<параметр> + Вмикає параметр

/ <параметр> - Вимикає параметр

/ <параметр> <ім'я файла> Включає параметр і перенаправляти висновок у вказаний файл.

Якщо ім'я початкового файла не вказане, то MPASM запускається в режимі віконного інтерфейсу.

 

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

 

Параметр   За умовчанням   Опис  
?   -   Виклик короткої допомоги  
а   INHX8M   Встановлює формат HEX файла: /а < hex-фори мат> Де <hех-формат> може приймати одне із значень INHX8M INHX8S INHX32  
с   Включено   Включення/вимикаючий чутливості до регістра символів  
d   -   Визначати символи: /dDebug /dMax=5 /dString="abc"  
е   Включено   Включення/вимикаючий/установка директорії для файла списку помилок /е включене /е + включене /е- вимкнене /е <директорії> ім'я файла - включено, встановлена директорія і ім'я файла  
h   -   Виклик короткої допомоги  
  Включено   Включення/вимикаючий/установка директорії для файла лістинг програми /1 включене /1 + включене /1 – вимкнене /1 <директорії> ім'я файла - включено, встановлена директорія і ім'я файла  
m   Включено   Включення/вимикання повного тесту макроса в файли лістинг програми  
  Вимкнено   Включення/вимикання/установка директорії для об'єктного файла /про включено /про + включено /про- вимкнено /про <директорія> ім'я файла - включено, встановлена директорія і ім'я файла  
Р   -   Вказівка типу мікроконтроллера /р <тип мікроконтроллера> де <тип миікроконтроллера> - найменування типу мікроконтроллера PICmicro, наприклад РІС16С54  
q   Вимкнено   Включення/вимикаючий режиму придушення виведення на екран.  
r   HEX   Встановлює система числення за умовчанням / r <формат> Де < формат> може приймати одне із значень HEX - шестнадцатеричная DEC – десятерична ОСТ - вісімкова  
t     Довжина символа табуляції /1 <довжина>  
w     Встановлює рівень деталізування виведення на екран /w <рівень> Де < рівень> може приймати одне із значень 0 - всі повідомлення 1 повідомлення про помилки і попередження 2 – тільки повідомлення про помилки  
х   Вимкнено   Включення/вимикаючий/установка директорії для файла крос посилань /х включено /х + включене /х- вимкнене /х <директорії> ім'я файла -включене, встановлена директорія і ім'я файла  

 

3.4 Віконний інтерфейс

Віконний інтерфейс MPASM для операційної системи DOS V 5.0 і вище працює в текстовому режимі монітора. Приклад робочого вікна показаний на малюнку. Тут Ви можете указати ім'я початкового файла і інші параметри компіляції.

Рис 3.1

3.4.1 Source File

Укажіть ім'я початкового файла. Ім'я файла може містити шлях DOS і символи розширення. Якщо Ви використовуєте символи розширення (* або? ), Вам буде показаний список всіх файлів що задовольняють масці, з яких ви можете вибрати необхідний файл. Для автоматичного введення в рядок "*.ASM" натисніть кнопку <ТАВ>.

3.4.2 Processor Type

Якщо Ви не указали тип мікроконтроллера в початковому файлі, укажіть його в цьому полі. За допомогою стрілок на клавіатурі перейдіть в полі вибору типу мікроконтроллера і натисненням клавіші <RET> виберете потрібний тип.

3.4.3 Error File

Файл помилок компіляції (<sourcename>.ERR) створюється за умовчанням. За допомогою стрілок на клавіатурі перейдіть в полі вказівки імені файла. Клавішею <RET> виберете створювати (YES) чи ні (N0) файл. Натисніть на клавішу <ТАВ> для перекладу курсора в затінену область і введення нового імені файла. У імені файла помилок не допускаються групові символи.

3.4.4 Cross Reference File

За умовчанням файл перехресних посилань <sourcename>.XRF не створюється. За допомогою стрілок на клавіатурі перейдіть в полі вказівки імені файла. Клавішею <RET> виберете створювати (YES) чи ні (N0) файл. Натисніть на клавішу <ТАВ> для перекладу курсора в затінену область і введення нового імені файла. У імені файла перехресних посилань не допускаються групові символи.

3.4.5 Listing File

Файл лістинг програми (<sourcename>.LST) створюється за умовчанням. За допомогою стрілок на клавіатурі перейдіть в полі вказівки імені файла. Клавішею <RET> виберете створювати (YES) чи ні (N0) файл. Натисніть на клавішу <ТАВ> для перекладу курсора в затінену область і введення нового імені файла. У імені файла лістинг програми не допускаються групові символи.

3.4.6 HEX Dump Type

Укажіть тип і ім'я. HEX файла. За допомогою стрілок на клавіатурі перейдіть в полі вказівки імені файла. Клавішею <RET> виберете тип HEX файла. Натисніть на клавішу <ТАВ> для перекладу курсора в затінену область і введення нового імені файла.

3.4.7 Assemble to Object File

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

 

4. Windows версія MPASM

4.1 Вступ

У розділі розглянуті питання роботи версією MPASM для Windows (MPASMWIN.EXE) як окремого додатку, так і в складі MPLAB IDE.

4.2 Основні частини розділу

Віконний інтерфейс

Робота з MPASM в інтегрованому середовищі MPLAB IDE Настройка MPLAB IDE для роботи з MPASM Компіляція початкового тексту програми Можливі помилки

4.3 Віконний інтерфейс

MPASM для операційної системи Windows З.х/95/98/NT підтримує графічний інтерфейс настройки параметрів компіляції початкового файла програми.

рис 4.1

Примітка. При запуску MPASM з інтегрованої середи розробки MPLAB IDE, інтерфейс настройки параметрів не доступний. Для правильної настройки параметрів компіляції звернетеся до відповідного розділу документації MPLAB User's Guide.

Натисніть кнопку Browse для вибору файла початкового тексту програми. Укажіть необхідні параметри і натисніть кнопку Assemble для початку компіляції

Radix - система числення за умовчанням;

Warning Level - рівень виведення;

Hex Output - формат HEX файла;

Generated Files - файли, що створюються;

Case Sensitivity - включення/вимикаючий чутливості до регістра символів;

Macro Expansion - розвертати макрос в файлі лістинг програми;

Processor - тип микроконтроллера;

Tab Size - довжина табуляції;

Extra Options - використати настройки, вказані в командному рядку (див. розділ 3.3);

Save Settings on Exit - зберегти настройки MPASM в файлі MPLAB.INI. Ці настройки будуть використовуватися при подальших запусках MPASMWIN.

 

4.4 Робота з MPASM в інтегрованому середовищі MPLAB IDE

MPLAB проект складається з вузлів, показаних на малюнку 4-2, які представляють файли що використовуються в проекті:

Цільовий вузол - заключний висновок

- Шістнадцатерічний файл коду

Вузли проекту - компоненти

- Початкові файли проекту

У цьому розділі розглянуті аспекти взаємодії MPLAB і MPASM. Додаткову інформацію про створення проектів в середовищі MPLAB дивитеся в технічній документації MPLAB User's Guide (DS51025).

Рис 4.2

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

4.5 Настройка MPLAB IDE для роботи з MPASM

Необхідно виконати наступні кроки для роботи з MPASM в середовищі MPLAB:

1. Після створення проекту (Project>New Project), відкриється діалогове вікно настройки проекту. Виберіть HEX файл (наприклад, tutor84.hex) в списку файлів проекту Project Files і натисніть кнопку Node Properties для настройки параметрів компіляції.

 

 

рис 4.2

 

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

Рис 4.4 3. Приєднайте початковий файл до проекту (натисніть кнопку Add Node в діалоговому вікні настройки проекту).

 

рис 4.5


4. Натисніть ОК для підтвердження настройок.

 

 

рис 4.6

4.6 Компіляція початкового тексту програми

Запуск компіляції проекту виконується в MPLAB IDE командою Project>Make Project. HEX файли автоматично завантажуються в пам'ять програм.

Разом з файлом коду створюються додаткові файли. Докладну інформацію про додаткові файли що генеруються при компіляції початкового файла дивитеся в розділі 2.5.

4.7 Можливі помилки

У разі виникнення помилок в роботі MPASM при компіляції проекту рекомендується перевірити наступні параметри:

Виберіть пункт меню Project>lnstall Language Tool... і перевірте правильність вказівки шляху до файла MPASMWIN.EXE і установку прапора Windowed. Як альтернатива, може бути вказаний файл MPASM.EXE, але в цьому випадку повинен бути встановлений прапор Command-Line.

 

рис 4.7

 

Якщо Ви використовуєте MPASM.EXE DOS версії і отримуєте попередження об недостачі пам'яті в комп'ютері перевірте параметри роботи DOS програми в середовищі Windows. Використовуючи програму «Провідник», що включається в операційну систему Windows, натисніть правою кнопкою «миші» на файлі MPASM.EXE і виберіть пункт «Властивості».

 

 

рис 4.8

Виберіть параметр «змінні середи» (Initial Environment) рівний 2048. Якщо одночасно використовується велика кількість додатків, параметри яких вказані в файлі Autoexec.bat, необхідно вибрати більше значення параметра « змінні середи».

 

5. Директиви MPASM 5.1 Введення

У цьому розділі будуть детально описані всі директиви MPASM.

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

Багато які директиви асемблера мають додаткові імена і формати. Вони призначені для забезпечення сумісності з більш ранніми версіями асемблера і індивідуальними методами програмування. Для отримання мінімального об'єму коду програми рекомендується використати директиви MPASM, описані в даному документі.

5.2 Типи директив MPASM

Існує п'ять основних типів директив:

директиви контролю - управляють створенням розділів умовно компільованого коду;

директиви даних - управляють розподілом пам'яті і призначенням символічних імен змінним і константам;

директиви лістинг - визначають формат і склад файла лістинг. Ці директиви дозволяють: вказувати заголовки, нумерувати сторінки і настроювати інші параметри;

макро директиви - управляють роботою макросів і розподілом даних в тілі макроса;

директиви об'єктного файла - використовуються тільки при створенні об'єктного файла.

5.3 Список директив MPASM

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

• синтаксис;

• опис;

• приклад.

Директива   Опис   Синтаксис  
BADRAM   Ідентифікація нереалізованого ОЗУ   badram <expr>[-<expr>][, <ехрг> [-<ехрг>]]  
BANKISEL   Вибір банку для непрямої адресації   bankisel <label>  
BANKSEL   Вибір банку для прямої адресації   banksel <label>  
CBLOCK   Визначення блоку констант   cblock [<expr>]  
CODE   Початок коду об'єктного файла в пам'яті програм   [<name>] code [<address>]  
CONFIG   Установка бітів конфігурації мікроконтроллера   config <expr> OR config <addr>, <expr>  
CONSTANT   Визначити символьну константу   constant <label> [-<expr>,...,<label> [-<expr>] ]  
DA   Збереження рядка в пам'яті програм   [<label>] da <expr> [, <expr2>,. .., <exprn>]  
DATA   Збереження значень або тексту в пам'яті програм   [<label>] data <expr>,[,<expr>,...,<expr>] [<label>] data "<text string>" [,"<text string> ",...]  
    Побайтне збереження даних в   [<label>] db <expr>[,<expr>,...,<expr>]  
DB   пам'яті програм   [<label>] db "<text string>" [,"<text string> ",...]  
DE #DEFINE   Резервує 8-розрядне значення в EEPROM пам'яті Визначає заміну тексту   [<label>] de <expr>[,<expr>,...,<expr>] [<label>] de "<textstring>"[,"<textstring> ",...] ttdefine <name> [<string>] ^define <name> [<arg>,..., <arg>] <string>  
DT   Визначає таблицю даних   [<label>] dt <expr>[,<expr>,...,<expr>] [<label>] dt "<text string>"[,"<text string> ",...]  
DW   Резервує слова пам'яті програм   [<label>] dw <expr>[,<expr>,...,<expr>] [<label>] dw "<text string>" [,"<text string> ",...]  
ELSE   Початок альтернативного блоку програми умови IF   else  
END   Закінчення програми   end  
EN DC   Закінчення автоматичного блоку констант   endc  
ENDIF   Закінчення умовного блоку програми   endif  
ENDM   Закінчення макроса   endm  
ENDW   Завершує цикл While   endw  
EQU   Визначення константи асемблера   <label> equ <expr>  
ERROR   Формує повідомлення про помилку   error "<text string>"  
ERRORLEVEL EXITM   Настройка параметрів виведення про помилки Вихід з макроса   errorlevel 0 l¦2 <+ -xmessage number> exitm  
EXPAND   Включення тексту макроса в файл лістинг програми   expand  
EXTERN   Визначення зовнішніх міток   extern <label> [, <label>]  
FILL   Запис значення в пам'ять програм   [<label>] fill <expr>, <count>  
GLOBAL I DATA   Зовнішня мітка Оголошує початок ініціалізації даних в об'єктному файлі   global <label> [, <label>] [<name>] idata [<address>]  
IDLOCS   Установка значення ID   idlocs <expr>  
IF   Початок блоку умови   if <expr>  
IFDEF   Виконання, якщо визначена символьна мітка   ifdef <label>  
IFNDEF   Виконання, якщо символьна мітка не визначена   ifndef <label>  
INCLUDE   Підключення додаткового початкового файла   include «include file» ¦"<include file>"  
LIST   Список параметрів   list [<list option>,...,<list option>]  
LOCAL   Оголосити локальну змінну макроса   local <label>[,<label>]  
MACRO   Визначити макрос   <label> macro [<arg>,...,<arg>]  
MAXRAM   Визначає максимальний об'єм ОЗУ   maxram <expr>  
MESSG   Сформувати повідомлення   messg "<message text>"  
NOEXPAND   Не розвертати текст макроса   noexpand  
NOLIST   Вимкнути висновок в файл лістинг   nolist  
ORG   Встановити адресу програми   <label> org <expr>  
PAGE   Вставити сторінку в файл лістинг програми   page  
PAGESEL PROCESSOR   Зробити вибір сторінки Вибір типу мікроконтроллера   pagesel <label> processor <processsor type>  
RADIX   Система числення за умовчанням   radix <default radix>  
RES   Резервування пам'яті   [<label>] res <mem units>  
SET   Визначення константи   <label> set <expr>  
SPACE   Вставити пусті рядки   space <expr>  
SUBTITLE   Визначення підзаголовка програми   subtitle "<sub text>"  
TITLE   Визначення заголовка програми   title "<title text>"  
UDATA   Початок ініціалізації даних із звичайним розміщенням в пам'яті (для об'єктного файла)   [<label>] udata [<RAM address>]  
UDATAACS   Початок ініціалізації даних швидкого доступу (для об'єктного файла)   [<label >] udata acs [<RAM address?]  
UDATAOVR   Початок ініціалізації тимчасових даних (для об'єктного файла)   [<label >] udata ovr [<RAM address>]  
UDATASHR   Початок ініціалізації даних, що розділяються (для об'єктного файла)   [<label >] udata shr [<RAM address;»]  
#UNDEFINE VARIABLE   Відмінити заміну тексту Визначення символьною   ftundefine <label>  
    Змінної      
WHILE   Цикл While   while <expr>  

 


5.4 _ _BADRAM - Ідентифікація нереалізованого ОЗУ

5.4.1 Синтаксис

_ _badram <expr>[-<expr>][, <ехрг>[-<ехрг>]]

5.4.2 Опис

Директиви _ _MAXRAM і _ _BADRAM визначають адреси нереалізованих регістрів ОЗУ. _ _BADRAM визначає індивідуальну адресу нереалізованого регістра. Дана директива призначена для використання спільно з директивою _ _MAXRAM. Кожне значення <ехрг>, директиви _ J3ADRAM, повинне бути меншим вказаного в _ _MAXRAM. Після директиви _ _MAXRAM, в тексті програми, точна карта нереалізованого ОЗУ створюється директивами _ J3ADRAM.

Для вказівки діапазону адрес нереалізованого ОЗУ використайте синтаксис <minloc> - <maxloc>.

5.4.3 Приклад

Див. приклад для _ _MAXRAM

5.4.4 Див. також __MAXRAM

5.5 BANKISEL - Вибір банку для непрямої адресації

5.5.1 Синтаксис

bankieel <label>

5.5.2 Опис

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

Лінкер генерує відповідний код для вибору банку пам'яті. Для 14 - розрядних микроконтроллеров виконується вплив на біт IRP в регістрі STATUS відповідно до банку розміщення регістра. Для 16-розрядних микроконтроллеров генеруються команда MOVLB або MOVLR. Якщо користувач сам вибирає робочий банк пам'яті, то ніяких додаткових інструкцій в код програми додано не буде.

Додаткову інформацію дивитеся в розділі 6.

5.5.3 Приклад

movlw Varl movwf FSR bankisel Varl

movwf INDF

5.5.4 Див. також BANKSEL, PAGESEL

5.6 BANKSEL - Вибір банку для прямої адресації

5.6.1 Синтаксис

banksel <label>

5.6.2 Опис

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

Лінкер генерує відповідний код для вибору банку пам'яті. Для 12-розрядних мікроконтроллеров встановлює/скидає біт в регістрі FSR. Для 14-розрядних мікроконтроллеров - змінюються біти в регістрі STATUS. Для 16-розрядних мікроконтроллеров генеруються команда MOVLB або MOVLR. Для вдосконалених 16-розрядних мікроконтроллеров буде сгенерирована команда MOVLB. Якщо в мікроконтроллері тільки один банк пам'яті ніякий додатковий код генеруватися не буде.

Додаткову інформацію дивитеся в розділі 6.

5.6.3 Приклад

banksel Varl movwf Varl

5.6.4 Див. також BANKISEL, PAGESEL

 

5.7 CBLOCK - Визначення блоку констант

5.7.1 Синтаксис

cblock [<expr>]

<label>[:<increment>] [,<label> [:<increment>] ] endc

5.7.2 Опис

Визначити список іменованих констант. Кожна іменована константа <label> має деяке значення, описане вище по тексту програми. Мета даної директиви полягає в тому, щоб указати адреси розміщення декількох констант. Список іменованих констант закінчується директивою ENDC.

<expr> - вказує стартову адресу для першої константи. Якщо адреса не вказана, то використовується заключне значення попереднього CBLOCK. Якщо перший CBLOCK не має ніякого значення <ехрг>, то розміщення починається з нульової адреси.

<increment> - вказує прирости адреси для поточної іменованої константи.

Іменовані константи в одному рядку розділяються комами.

Директива CBLOCK використовується для розміщення констант в пам'яті програм і пам'яті даних.

5.7.3 Приклад

cblock 0х20; name_1 буде мати; адреса 20

name_l, name_2; name_2, 21

name_3, name_4; name_4 адреса 23. endc cblock 0х30

TwoByteVar: 0, TwoByteHigh, TwoByteLow

Queue: QUEUE_SIZE

QueueHead, QueueTail

Doublel:2, Double2:2 endc

5.7.4 Див. також ENDC

5.8 CODE - Початок коду об'єктного файла в пам'яті програм

5.8.1 Синтаксис

[<label>] code [<ROM address>]

5.8.2 Опис

Використовується при генерації об'єктного файла. Оголошує початок секції коду програми. Якщо <label> не вказана, секції привласнюється ім'я. code. Якщо не вказана адреса секції, то їй буде привласнено поточне значення адреси в пам'яті програм.

Примітка. Не допускається використання двох однакових імен секцій.

Додаткову інформацію дивитеся в розділі 6.

5.8.3 Приклад

RESET code H'OIFF' goto START

5.8.4 Див. також

EXTERN, GLOBAL, IDATA, UDATA, UDATA ACS, UDATA OVR, UDATA SHR

 

5.9 _ _CONFIG - Установка бітів конфігурації мікроконтроллера

5.9.1 Синтаксис

_ _config <expr> OR _ _config <addr>, <expr>

5.9.2 Опис

Встановлює біти конфігурації микроконтроллера у відповідності зі значенням <ехрг>. Для микроконтроллеров сімейства Р1С18СХХХ додатково вказується адреса <addr> розміщення конфігураційний бітів. Докладний опис конфігураційний бітів дивитеся в технічній документації на відповідний микроконтроллер.

Заздалегідь, перед директивою _ _CONFIG, треба указати тип микроконтроллера за допомогою директиви LIST або PROCESSOR. Для микроконтроллеров сімейства Р1С17СХХХ в директиві LIST необхідно указати вихідний формат HEX файла INHX32.

5.9.3 Приклад

list р=17c42, f=INHX32 _ _config h'ffff';Конфігурація за умовчанням

5.9.4 Див. також

__IDLOCS, LIST, PROCESSOR

CONSTANT- Визначити символьну константу

constant <label>[=<expr>,...,<label>[=<expr>] ] 5.10.2 Опис Створює символьну константу для використання у виразах MPASM. Існуюча константа не може бути визначена повторно, а…

Приклад

dw slow else dw fast endif endm 5.18.4 Див. також ENDIF, IF

JDLOCS - Установка значення ID

_ _idlocs <expr> 5.33.2 Опис Для мікроконтроллеров Р1С12СХХХ, Р1С14000 і Р1С16ХХХ вказується 4 шістнадцатиразрядних півбайта ID. Для…

IF - Початок блоку умови

if <expr> 5.34.2 Опис Початок виконання умовного блоку. Якщо вираження <ехрг> оцінюється істинним, то виконується код програми після…

NOEXPAND - Не розвертати текст макроса

5.43.1 Синтаксис

noexpand

5.43.2 Опис

Директива не дозволяє розвертати текст макроса в файлі лістинг програми при його виклику.

5.43.3 Див. також EXPAND

5.44 NOLIST - Вимкнути висновок в файл лістинг

5.44.1 Синтаксис

nolist

5.44.2 Опис

Вимкнути висновок в файл лістинг.

5.44.3 Див. також LIST

ORG - Встановити адресу програми

<label> огд <ехрг> 5.45.2 Опис Встановити <ехрг> адресу програми. Якщо вказана мітка <label> то вона буде мати адресу <ехрг>. Якщо…

WHILE - Цикл While

while <expr> endw 5.61.2 Опис

Вступ

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

6.2 Основні частини розділу

Файли сценарія Пам'ять програм Операнди інструкцій Розподіл ОЗУ Біти конфігурації і ID Звернення до міток інших модулів Робота з банками ОЗУ Недопустимі директиви Формування об'єктного файла Приклад програми

6.3 Файли сценарія

Microchip розробив стандартні файли сценарія (наприклад p17c756.inc), які повинні використовуватися при отриманні об'єктного коду. Дані файли визначають параметри і набір регістрів спеціального призначення конкретного мікроконтроллеру.

6.4 Пам'ять програм

Тексту програми повинна передувати директива CODE, що визначає секцію переміщуваного коду.

6.4.1 Абсолютний код

Start CLRW

OPTION

6.4.2 Переміщуваний код

CODE Start CLRW

OPTION

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

Кожна секція пам'яті програм повинна бути смежна в межах початкового тексту. Секції не можна розбивати на частині. Фізична адреса коду в пам'яті програм може бути встановлена, указавши необов'язковий параметр директиви CODE <ROM address>.

Вказівка фізичної адреси може бути необхідна в наступних випадках:

визначення вектора переривання;

для розташування коду програми в межах сторінки пам'яті програм.

6.4.3 Приклад переміщуваного коду

Reset CODE H'OIFF' GOTO Start

Main CODE CLRW OPTION

 

6.5 Операнди інструкцій

Існують деякі обмеження по використанню операндів в інструкціях. Операнди в інструкціях повинні мати наступну форму:

[HIGH¦LOW¦UPPER] (relocatable symbol> + <constant offset>)

Де:

relocatable symbol > - будь-яка мітка, яка визначає адресу в пам'яті програм або даних;

<constant offset> - вираження, яке дозволене і маюче значення в межах від-32768 до +32767.

Значенняrelocatable symbol> або<constant offset> може бути пропущене.

Операнди форми:

<relocatable symbol> - <relocatable symbol>

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

Для позначення змінних бітів у вираженні використовуються додаткові покажчики:

LOW - змінюються біти 0-7;

HIGH - змінюються біти 8-15;

UPPER - змінюються біти 16-21.

6.6 Розподіл ОЗУ

Розподіл ОЗУ повинен бути виконаний в секції даних. Існує п'ять типів секцій даних:

UDATA - неініціалізувати дані. Це найбільш загальний тип розміщення даних. Осередки, зарезервовані в цій секції, не ініціалізувати, а звернення до даних проводиться за рахунок міток або непрямо.

UDATA_ACS - неініціалізувати дані доступу. Ця секція даних використовується для змінних, які будуть вміщені в пам'ять швидкого доступу микроконтроллеров сімейства Р1С18СХХХ. Для звернення до пам'яті швидкого доступу використовуються спеціальні команди.

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

UDATA_SHR - неініціалізувати дані, що розділяються. Дані цієї секції будуть розміщені в осередках ОЗУ, які доступні з всіх банків пам'яті даних.

IDATA - Ініціалізувати дані. Лінкер сформує таблицю пошуку, яка дозволить привласнити змінним вказані в цій секції значення. Звернення до даних виконується тільки з використанням міток або непрямою адресацією.

У прикладах показані варіанти визначення змінних.

6.6.1 Абсолютний код

CBLOCK 0х20

inputGain, OutputGain; Управління циклами HistoryVector; Повинно дорівнювати нулю Tempi, Temp2, ТетрЗ; Використовуються в обчисленнях

ENDC

6.6.2 Переміщуваний код

IDATA HistoryVector DB ПРО

UDATA InputGain RES I OutputGain RES 1

UDATA_OVR Tempi RES 1 Temp2 RES 1 ТетрЗ RES 1

Адреса ініціалізації даних в пам'яті можна встановити, указавши необов'язковий параметр <RAM address>. Якщо в програмі використовується тип секції даних більше одного разу, то для кожної секції необхідно указати унікальне ім'я. Якщо назва секції не вказана, то їм привласнюються імена:. idata,. udata,. udata_acs,. udata_ovr,. udata_shr.

При ініціалізації даних в секції IDATA директиви DB, DW і DATA можуть використовуватися для визначення даних. DB визначають послідовність байт в пам'яті. DW і DATA визначають послідовності слів даних (молодший байт, старший байт).

 

У наступному прикладі показано як будуть ініціалізувати дані:

6.6.3 Переміщуваний код

00001 LIST р=17C44

00002 IDATA 0000 01 02 03 00003 Bytes DB 1,2,3 0003 34 12 78 56 00004 Words DW H'1234', "H'5678' 0007 41 42 43 00 00005 String DB ABC", 0

6.7 Биті конфігурації і ID

Для визначення бітів конфігурації і ID бітів застосовуйте директиви _ _CONFIG і _ _IDLOCS. Тільки в одному об'єктному модулі проекту можна використати вказані директиви до секції CODE. Після використання даних директив поточна секція не визначена.

6.8 Звернення до міток інших модулів

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

Модулі, що використовують ці мітки, повинні оголосити їх директивою EXTERN. Приклад використання директив GLOBAL і EXTERN.

6.8.1 Модуль, що Підключається

UDATA InputGain RES 1 OutputGain RES 1

GLOBAL InputGain, OutputGain

CODE Filter

GLOBAL Filter

6.8.2 Основний модуль

EXTERN InputGain, OutputGain, Filter

UDATA Reading RES 1

CODE

MOVLW GAIN1 MOVWF InputGain MOVLW GAIN2 MOVWF OutputGain MOVF Reading, W CALL Filter

6.9 Робота з банками і сторінками пам'яті

У більшості випадків використовуються декілька банків ОЗУ і сторінок пам'яті програм мікроконтроллера. При цьому необхідно настроювати потрібний робочий банк або сторінку пам'яті програм для звернення до мітки. Так як при формуванні об'єктного файла заздалегідь не відоме розміщення змінних і міток в пам'яті програм були розроблені дві директиви BANKSEL і PAGESEL. Дані директиви вказують лінкер сгенерировати код вибору потрібного банку даних або сторінки пам'яті програм.

Приклади використання вказаних директив показані нижче.

6.9.1 Абсолютний код

"LIST Р=12С509 ftinclude P12C509.INC"

Varl EQU H' 10' Var2 EQU H'30'

MOVLW InitialValue

BCF FSR, 5

MOVWF Varl

BSF FSR, 5

MOVWF Var2

BSF STATUS, PAO

CALL Subroutine

Subroutine CLRW; In Page 1 RETLW 0

6.9.2 Переміщуваний код

"LIST Р=12C509 ftinclude P12C509.INC"

UDATA Varl RES 1 Var2 RES 1

CODE

MOVLW InitialValue BANKSEL Varl MOVWF Varl BANKSEL Var2 MOVWF Var2

PAGESEL Subroutine CALL Subroutine

Subroutine CLRW RETLW 0

6.10 Недопустимі директиви

Всі директиви доступні для формування об'єктного файла, за винятком директиви ORG. Дану директиву необхідно замінити на директиву CODE, як показано нижче.

6.10.1 Абсолютний код

Reset ORG H'OIPF' GOTO Start

6.10.2 Переміщуваний код

Reset CODE H'OIFF' GOTO Start

6.11 Формування об'єктного файла

Отримати об'єктний файл можна компіляцією відредагованого початкового тексту програми різними версіями MPASM:

1. При використанні MPASM для операційної системи Windows, перевірте установку прапора "Object File".

2. У разі використання DOS версії MPASM з управлінням з командного рядка - введіть параметр /про.

3. У віконній версії MPASM для DOS встановите "Yes" в рядку "Assemble to Object File". Отриманий об'єктний файл будете розширенням. о.

 

6.12 Приклад програми

6.12.1 Абсолютний код

"LIST Р=16C54 ftINCLUDE P16C5X.INC"

cblock Н '020'

mulcnd RES 1; 8- битный множник

mulpir res l; 8- битное множене

H_byte res l; Старший байт 16-битного результату

L_byte res l; Молодший байт 16-битного результату

count res l; Лічильник

тру cirf H_byte

cirf L_byte

movlw 8

movwf count

movf mulcnd, w

bcf STATUS, З Loop rrf mulpir, F

btfsc STATUS, З

addwf H_byte, F

rrf H_byte, F

rrf L_byte, F

decfsz count, F

goto loop

retlw 0

•А******************************************************

; Тестова програма

start cirw

option

main movf PORTB, w movwf mulpir movf PORTB, W movwf mulcnd

call_m call тру goto main

ORG OlFFh goto start

END

Підпрограма множення двох 8-розрядних чисел, може використовуватися і в інших проектах. Створивши об'єктний файл програми, він може бути підключений до проекту, коли це необхідне. Представлений файл може бути розділений на дві частини: 1 - вызывная частина, що включається в основний текст; 2 - основна програма, яка може бути включена в бібліотеку.

6.12.2 Переміщуваний код, основна частина

"LIST Р=1бС54 ftINCLUDE P16C5X.INC"

EXTERN mulcnd, mulpir, H_byte, L_byte EXTERN mpy

CODE

start cirw

option

main movf PORTB, W movwf mulpir movf PORTB, W movwf mulcnd

call_m call mpy goto main

Reset CODE H'OIFF'

goto start END

 

6.12.3 Переміщуваний код, бібліотечна частина

"LIST Р=16C54 ftINCLUDE P16C5X.INC"

UDATA

mulcnd RES 1; 8- битный множник mulpir res l; 8- битное H_byte, що множиться res l; Старший байт 16-битного результату L_byte res l; Молодший байт 16-битного результату count res l; Лічильник

GLOBAL mulcnd, mulpir, H_byte, L_byte

CODE mpy

GLOBAL mpy

cirf H_byte cirf L_byte movlw 8 movwf count movf muland, W bcf STATUS, З loop rrf mulpir, F

btfsc STATUS, З addwf H_byte, F rrf H_byte, F rrf L_byte, F decfsz count, F goto loop

retlw 0 END

 

Мова макрокоманд

Вступ

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

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

Основні аргументу на користь використання макросів:

більш високий рівень написання програми;

текст програми зручний для читання;

зменшення числа помилок;

спрощення можливих змін.

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

7.2 Основні частини розділу

Синтаксис макрокоманд Директиви макрокоманд Заміна тексту Використання макросів Приклади програм

7.3 Синтаксис макрокоманд

Макроси мають наступний синтаксис:

<label> macro [<argl>,<агд2>. .., <агдп>]

endm

Де:

<label> - влучна MPASM;

<arg> - будь-яка кількість необов'язкових аргументів.

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

У тіло макроса можуть бути включені будь-які інструкції микроконтроллера, директиви або макродирективи MPASM (наприклад, LOCAL). Опис директив дивитеся в розділі 5. MPASM продовжує обробляти інструкції і директиви тіла макроса доти, поки не зустріне директиву ЕХ1ТМ або ENDM.

Примітка. Для виклику макроса не допускається використання команд гілкування.

7.4 Директиви макрокоманд

Частина директив використовується для формування макрокоманди, і не можуть використовуватися поза макросом:

MACRO LOCAL ЕХ1ТМ ENDM

При написанні макрокоманд Ви можете використати ці і інші директиви MPASM, що підтримуються.

Примітка. Попередній синтаксис написання крапкових макрокоманд більше не підтримується. З метою сумісності з попередніми версіями підтримується формат асемблера ASM17. Для забезпечення висхідної сумісності рекомендується використати тільки директиви MPASM, описані в даному документі.

 

7.5 Заміна тексту

У межах тіла макроса може бути виконана заміна ланцюжка символів і значення вираження.

<arg> - заміна імені аргументу, використовується як частина макро звертання;

#v(<expr>) - повертає значення <ехрг>. Використовується для створення унікальною змінною із загальними префіксами або суфіксами. Не може використовуватися в директивах умов (IDEF, WHILE). Ці параметри можуть використовуватися в тілі макроса, виключаючи його вирази.

Приклад макроса

define_table macro

local а = Про

while а < 3 entryftv(a) dw 0 а += 1

endw

endm

Виконані дії:

entryO dw 0 entryl dw 0 entry 2 dw 0 entry 3 dw 0

7.6 Використання макросів

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

<macro_name> [<arg>,. .., <агд>] Де:

<macro_name> - назва заздалегідь певного макроса;

<arg> - необхідні аргументи.

Макрозапрос не займає місце в пам'яті програм. Однак тіло макроса буде розташоване з поточної адреси. Коми можуть використовуватися для резервування положення аргументу. Список аргументів закінчується

символом пропуск або крапка з комою.

Директива ЕХ1ТМ (див. розділ 5) забезпечує додатковий метод завершення макроса з ігноруванням

директиви ENDM. Якщо використовується вкладена структура макросів, то по директиві ЕХ1ТМ викличе перехід на верхній

рівень макрокоманд.

7.7 Приклади програм

7.7.1 Множення двох 8-розрядних чисел

Приклад макроса множення двох 8-розрядних чисел для мікроконтроллера Р1С17С42 з мінімізацією часу обчислення.

"subtitle macro definitions" page

multiply macro argi, arg2, dest_hi, dest_lo

local i = 0; оголошення локальною змінною

movlw argi; отримання movwf, що множиться mulpir

movlw arg2; збереження множника в регістрі W

drf dest_hi; очищення регістрів результату cirf dest_lo

bcf ALUSTA, З; скидання біта З

while i < 8; цикл, поки 8 біт не будемо здвинуті rrcf mulpir btfsc ALUSTA, З addwf dest_hi rrcf dest_hi rrcf dest_lo i += 1

endw; кінець обчислень endm; кінець макроса

 

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

Макрокоманда виконує множення по алгоритму, в якому використовується зсув праворуч і доповнення для кожного розряду 8-битного множника. Директива WHILE використовується для організації циклу всередині макроса, поки значення змінної Т менше 8.

Кінець циклу відмічений директивою ENDW. Виконання інструкцій всередині циклу буде відбуватися доти, поки умова WHILE не стане помилковою.

Завершення макроса відмічене директивою ENDM.

7.7.2 Порівняння констант Приклад програми порівняння змінних з використанням макрокоманди.

"include 16cxx.reg"

cfl_jge macro file, con, jump_to movlw con & Oxff subwf file, w btfsc status, carry goto jump_to endm

Виклик процедури макроса:

cfl_jge switch_val, max_switch, switch_on

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

movlw max_switch & Oxff subwf switch_val, w btfsc status, carry goto switch_on

 

8. Синтаксис виразів і операцій

8.1 Вступ

У розділі описуються формати виразів, синтаксис і оператори MPASM.

8.2 Основні частини розділу

Текстові рядки

Числові константи і системи числення

Арифметичні операції

High/Low/Upper операції

Операції инкремента/декремент

8.3 Текстові рядки

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

Збільшити довжину символьного рядка можна додатковим використанням директиви DW.

Директива DW зберігає текстовий рядок в послідовності слів пам'яті програм. Якщо текстовий рядок має непарну кількість символів, то для директив DW і DATA останній байт буде дорівнювати ООП.

Якщо текстовий рядок повинен мати один литеральный операнд, то повинен бути вказаний один символ, інакше станеться помилка.

Приклад збереження текстового рядка.

7465 7374 696Е "dw testing output string onen"

6720 6F75 7470

7574 2073 7472

696Е 6720 6F6E

650A

"ftdefine str testing output string two" BO 61 movlw 'a' 7465 7374 696Е data testing first output string" 6720 6669 7273 7420 6F75 7470 7574 2073 7472 696Е 6700

MPASM приймає деякі ANSI 'С' послідовності для формування деяких характерних знаків.

 

Послідовність символів   Опис   HEX значення  
а   Попередження    
Ь   Повернення на один символ    
f   Формат   ОС  
n   Новий рядок   ОА  
r   Переклад каретки   OD  
t   Горизонтальна табуляція    
v   Вертикальна табуляція   0У  
\   Похила межа ліворуч   5С  
?   Питання   3F  
V   Апостроф    
"   Лапки    
00   Вісімкове значення      
хНН   Шістнадцатеричне значення      

 

8.4 Числові константи і системи числення

MPASM підтримує числа наступних систем числення:

шістнадцатерічні;

десятеричні;

вісімкові;

двійкові;

символи ASCII.

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

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

Примітка. MPASM працює з проміжними значеннями у виразах як з 32-розрядними числами. У разі перевищення вказаної межі буде сформоване відповідне попередження.

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

 

Тип   Синтаксис   Приклад  
Шестнадцатеричный Десятеричний   H'<hex digits>' Ox<hexdigits> D'<digits>'   H'9f Ox9f D'100'  
Вісімковий   0'<octal digits>'   0'777'  
Двійковий   B'<binary digits>'   B'00111001'  
ASCII   '<character>' A' <character>'   ' З" A'C'  

 

 

8.5 Арифметичні операції

Список арифметичних операцій

Символ   Опис   Приклад  
$   Зміна лічильника програми PC   goto $ + 3  
(   Ліва дужка   1 + (d * 4)  
)   Права дужка   (Length + 1) * 256  
    НЕ з логічним доповненням   if 1 (а == b)  
-   Заперечення з доповненням двох   -1 * Length  
~   Доповнення   flags = -flags  
High   Повертає старший байт   movlw high CTR Table  
Low   Повертає молодший байт   movlw low CTR Table  
Upper   Повертає верхній байт   movlw upper CTR Table  
*   Множення   а = b * з  
/   Розподіл   а = b / з  
%   Модуль   entry len = tot len % 16  
+   Складання   tot len = entry len * 8 + 1  
-   Віднімання   entrylen = (tot - 1) / 8  
«   Здвинути ліворуч   flags = flags « 1  
»   Здвинути праворуч   flags = flags » 1  
>=   Більше або рівно   if entry idx >= num entries  
>   Більше   if entry idx > num entries  
<   Менше   if entry idx < num entries  
<=   Менше або рівно   if entry idx <= num entries  
==   Рівно   if entry idx == num entries  
=   Не рівно   if entry idx 1= num entries  
&   Побітове І   flags = flags & ERRORBIT  
Л   Що Побітове виключає АБО   flags = flags ^ ERROR BIT  
    Побітове АБО   flags = flags ERRORBIT  
&&   Логічне І   if (len == 512) && (b == з)  
  Логічне АБО   if (len == 512) (b == з)  
=   Привласнити значення   entry index = 0  
+=   Скласти і привласнити значення Відняти і привласнити значення   entry index += 1 entry index -= 1  
*   Помножити і привласнити значення   entry index *= entry length  
/=   Розділити і привласнити значення   entry total /= entry length  
%=   Взяти модуль і привласнити значення   entry index %= 8  
«=   Здвинути ліворуч і привласнити значення   flags «= 3  
»=   Здвинути праворуч і привласнити значення   flags »= 3  
&=   Виконати І і привласнити значення   flags &= ERROR FLAG  
=   Виконати АБО і привласнити значення   flags = ERRORFLAG  
Л^   Виконати те, що виключає АБО і привласнити значення   flags ^= ERROR FLAG  
++   Інкремент   l ++  
-   Декремент   l --  

 

8.6 High/Low/Upper операції

8.6.1. Синтаксис

high <operand> low <operand> upper <operand>

8.6.2 Опис

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

8.6.3 Приклад

movlw low size

movpf wreg, low size lo

movlw high size

movpf wreg, high size_hi

 

8.7 Операції інкремент/декремент

8.7.1 Синтаксис

<variable>++ <variable>--

8.7.2 Опис

Виконують інкремент/декремент значення змінною. Дані операнди повинні використовуватися на окремому рядку і не можуть бути включені у вирази.

8.7.3 Приклад

Loop Count = 4

while LoopCount > 0

rif Reg, f LoopCount - -

endw


Додаток А. Формат HEX файлів. А.1 Введення

У даному розділі будуть розглянуті формати MPASM HEX файлів, що генеруються.

А.2 Основні частини розділу

Intel HEX формат INHX8M (для стандартних програматорів)

Intel Split HEX формат INHX8S (для ODD/EVEN ROM програматорів)

Intel HEX формат INHX32 (для 16-битных программаторов)

А.З Intel HEX формат INHX8M (.HEX)

Кожний рядок починається із 9 знакового префікса і закінчується 2-х знаковою контрольною сумою. :ВВААААТТНННН....НННСС Де:

А.5 Intel HEX формат INHX32 (.HEX)

Кожний рядок починається із 9 знакового префікса і закінчується 2-х знаковою контрольною сумою. :ВВААААТТНННН....НННСС Де:

Out of memory.

Недостатньо пам'яті для макроса, #define або внутрішньої обробки.

Закрийте відкриті додатки і спробуйте виконати компіляцію знов. Якщо дана помилка сталася при виконанні компіляції MPASM DOS версії, спробуйте виконати компіляцію MPASM Windows версією.

Symbol table full.

Недостатньо пам'яті для розміщення таблиці символів.

Закрийте відкриті додатки і спробуйте виконати компіляцію знов. Якщо дана помилка сталася при виконанні компіляції MPASM DOS версії, спробуйте виконати компіляцію MPASM Windows версією або MPASM_DP версією.

Temp file creation error.

Неможливо створити тимчасовий файл. Перевірте об'єм вільного місця на диску.

Cannot open file.

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

String substitution too complex.

Дуже багато вкладень #define.

Illegal digit.

Неправильна цифра в числі. Допускаються наступні цифри в числах:

Двійковому 0-1;

Вісімковому 0-7;

Десятеричному 0-9;

Шестнадцатерічном 0-F.

Illegal character.

Використання недопустимого символа в імені мітки. Допускаються наступні символи в іменах міток: a..z;

А..Z; 0..9; _. Ім'я мітки не повинне починатися з цифри.

Unmatched (

Ліва дужка не має відповідну праву дужку. Наприклад, "DATA (1+2".

Unmatched)

Права дужка не має відповідну ліву дужку. Наприклад, "DATA 1+2)".

Missing symbol.

Відсутність символа. Директива EQU або SET не має <label> для привласнення значення.

Missing operator.

Відсутність арифметичного оператора у вираженні. Наприклад, "DATA 1 2".

Symbol not previously defined.

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

 

Divide by zero.

Виявлення розподілу на нуль під час оцінки вираження.

Duplicate label.

Оголошення змінною більше за один раз (наприклад, в директивах EQU або CBLOCK).

Address label duplicated or different in second pass.

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

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

Address wrapped around 0.

Адреса виконання програми може досягати значення FFFF, після чого буде мати адресу 0.

Overwriting previous address contents.

Код був заздалегідь визначений для даної адреси.

Code too fragmented.

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

Call or jump not allowed at this address.

Перехід не може бути виконаний. Наприклад, всі команди CALL для мікроконтролерів Р1С16С5х повинні обертатися до молодшої сторінки пам'яті програм.

Illegal label.

Мітка не може бути вказана на цьому рядку. Розмістіть мітку вище за директиву. Так само HIGH, LOW, PAGE і BANK не допустимі імена міток.

Illegal opcode.

Недопустимий код інструкції.

Illegal directive.

Недопустима директива для даного типу мікроконтролеру. Наприклад, директива __IDLOCS не може використовуватися для мікроконтролерів Р1С17С42.

Illegal argument.

Неправильний аргумент. Наприклад, LIST STUPID.

Illegal condition.

Неправильний блок умов. Наприклад, відсутність директиви ENDIF.

Argument out of range.

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

Too many arguments.

Дуже багато аргументів для макроса, що викликається.

Missing argument(s).

Вказані не всі аргументи в макросі, що викликається або команді.

Expected.

Очікувався інший тип аргументу. Очікуваний список буде вказаний.

Processor type previously defined.

Вибрані різні типи мікроконтролерів.

Processor type is undefined.

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

Unknown processor.

Вибраний тип, що непідтримується мікроконтролеру.

Hex file format INHX32 required.

Була визначена адреса більше 32Кбайт. Наприклад, вказуючи біти конфігурації для мікроконтролерів сімейства Р1С17СХХ.

 

Illegal hex file format.

У директиві LIST був визначений незнайомий формат HEX файла.

Macro name missing.

Спроба визначення макроса без назви.

Duplicate macro name.

Дублювання імені макроса.

Macros nested too deep.

Перевищений максимальний рівень вкладеності макросів.

Include files nested too deep.

Перевищений максимальний рівень вкладеності файлів.

Maximum of 100 lines inside WHILE-ENDW.

Цикл містить більше за 100 рядків.

WHILE must terminate within 256 iterations.

Цикл має більше за 256 повторень. Запобігання нескінченному циклу.

Whiles nested too deep.

Перевищений максимальний рівень вкладень циклів.

IFs nested too deep.

Перевищений максимальний рівень вкладень блоків умов.

Illegal nesting.

Недопустиме використання директив циклу, визначення макроса або блоку умови. Наприклад, якщо ви маєте блок умови IF всередині циклу WHILE і виявлена директива ENDW раніше за INDIF.

Unmatched ENDC.

Знайдена директива ENDC без директиви CBLOCK.

Unmatched ENDM.

Знайдена директива ENDM без директиви MACRO.

Unmatched EXITM.

Знайдена директива EXITM без директиви MACRO.

Directive not allowed when generating an object file.

Знайдена недопустима директива ORG при генерації об'єктного файла. Замість директиви ORG створіть секцію. code і якщо необхідно укажіть адресу.

Expanded source line exceeded 200 characters.

Перевищена максимальна довжина (200 знаків) символьного рядка в директиві #DEFINE або в параметрі макроса. Зверніть увагу, що в директиву #DEFINE коментарі не включаються на відміну від макросів.

Directive only allowed when generating an object file section.

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

Labels must be defined in а code or data section when making an object file.

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

Operand contains unresolvable labels or is too complex.

При генерації об'єктного коду операнди повинні мати наступний синтаксис:

[HIGH¦LOW]([<relocatable address label>]+[<offset>]).

Executable code and data must be defined in an appropriate section.

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

Page or Bank bits cannot be evaluated for the operand.

Сторінка пам'яті програм або банк пам'яті не можуть бути визначені для операнда relocatable address label> або <сопз1ап0.директивами PAGESEL, BANKSEL або BANKISEL.

 

Each object file section must be contiguous.

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

All overlaid sections of the same name must have the same starting address.

Оголошена секція UDATA_OVR з існуючим ім'ям, але іншою адресою.

Operand must be an address label.

Виникає під час генерації об'єктного файла при спробі оголосити мітки створені директивою SET або EQU (а не в секції даних) як глобальні.

UNKNOWN ERROR.

Сталася помилка, яку MPASM не може розпізнати. Це не є помилкою, описаному в цьому додатку. Зв'яжіться з інженерами компанії Microchip (FAE), якщо Ви не можете усунути цю помилку.

 

В.4 Попередження

Symbol not previously defined.

Послідовність символів вказана в директиві #UNDIFINE не була заздалегідь визначена.

Argument out of range. Least significant bits used.

Аргумент не відповідає місцю розміщення. Наприклад, літерали повинні бути 8-розрядні.

Found opcode in column 1.

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

Found pseudo-op in column 1.

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

Found directive in column 1.

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

Found call to macro in column 1.

Макрокоманда була виявлена в першій колонці, призначеній для міток.

Found label after column 1.

Мітка була виявлена не в першій колонці, що часто приймається за мнемоніку команди з неправильним синтаксисом.

Label truncated at 32 characters.

Довжина мітки більше за 32 знаків.

Missing quote.

Пропущений апостроф. Наприклад, DATA ' А.

Extra),

У кінці рядка була знайдена зайва кома.

Extraneous arguments on the line.

Знайдені зайві аргументи в рядку. На це попередження потрібно звертати увагу, так як воно часто виникає через неправильну інтерпретацію запису (наприклад, OPTION EQU 0х81 з LIST FREE).

Expected

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

The EXTERN directive should only be used when making а. 0 file.

Директива EXTERN повинна використовуватися тільки при генерації об'єктного файла. Попередження замінює помилку 149.

Unmatched (

Знайдена зайва дужка. Попередження використовується, якщо дужка не впливає на значення вираження.

Processor superseded by command line. Verify processor symbol.

Тип мікроконтролеру був визначений на одному рядку з інструкцією. Інструкція має більший пріоритет.

Radix superseded by command line.

Система числення за умовчанням була визначена на одному рядку з інструкцією. Інструкція має більший пріоритет.

Hex file format specified on command line.

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

Expected DEC, ОСТ, HEX. Will use HEX.

Невідомий тип системи числення.

Invalid RAM location specified.

Неправильний розподіл ОЗУ директивами _ _MAXRAM і _ J3ADRAM для даного типу мікроконтролера. Зверніть увагу, що файли опису, що підключаються мікроконтролерів містять директиви _ _MAXRAM і __BADRAM.

Address exceeds maximum range for this processor.

Адресована пам'ять програм, яка не існує в даному мікроконтролері.

 

Invalid message number.

Недійсний номер повідомлення, викликаного для відображення або маскування.

Error messages cannot be disabled.

Повідомлення про помилки не можуть бути заборонені директивою EERORLEVEL.

Redefining processor

Вибраний мікроконтролер повторно вибирається директивою LIST або PROCESSOR.

Use of this instruction is not recommended.

Використовується інструкція, що не рекомендується. Наприклад, TRIS або OPTION для мікроконтролерів Р1С16СХХ.

Invalid label in operand.

Неправильна мітка в операнді. Наприклад, коли в операнді інструкції CALL зустрічається ім'я макрокоманди.

UNKNOWN WARNING

Невідоме попередження MPASM. Це не є попередженням, описаному в цьому додатку. Зв'яжіться з інженерами компанії Microchip (FAE), якщо Ви не можете усунути це попередження.

 

В. 5 Інформаційні повідомлення

301 MESSAGE:

Повідомлення користувача, викликане директивою MESSG.

Register in operand not in bank 0. Ensure that bank bits are correct.

Адреса регістра була визначена значенням, в якому міститися біти вибору банку пам'яті. Наприклад, адресація пам'яті даних в Р1С16СХХХ визначається 7 бітами в операнді команди і одним/двома бітами в регістрі STATUS.

Program word too large. Truncated to core size.

Дуже велике слово програми. Для мікроконтролерів Р1С12СХХі Р1С16С5Х 12-розрядні команди. Для мікроконтролерів Р1С16СХХ 14-розрядні команди.

ID Locations value too large. Last four hex digits used.

Дуже велике значення адреси розташування ID бітів. Для визначення адреси використовуються чотири останні цифри.

Using default destination of 1 (file).

Використання значення за умовчанням.

Crossing page boundary - ensure page bits are set.

Отриманий код програми перетинає кордон сторінки пам'яті програм.

Setting page bits.

Сторінка пам'яті програм настроюється псевдокомандами LGOTO і LCALL.

Warning level superseded by command line value.

Рівень виведення відповідає встановленому в командному рядку. Параметр командного рядка має перевагу.

Macro expansion superseded by command line.

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

Superseding current maximum RAM and RAM map.

Використання директиви __MAXRAM.

Page or Bank selection not needed for this device. No code generated.

Якщо мікроконтролер містить одну сторінку пам'яті програм або один банк пам'яті даних, то директиви PAGESEL, BANKSEL або BANKISEL не будуть приводити до генерації додаткового коду програми.

CBLOCK constants will start with а value of 0.

Перша директива CBLOCK не вказує адресу розміщення даних.

UNKNOWN MESSAGE

Невідоме повідомлення. Це не є повідомленням, описаному в цьому додатку. Зв'яжіться з інженерами компанії Microchip (FAE), якщо Ви не можете усунути це повідомлення.

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

Используемые теги: руководство, пользователя0.057

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

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

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

Еще рефераты, курсовые, дипломные работы на эту тему:

Руководство пользователя презервативами
Так возникло данное руководство. Hадеюсь, что все нижеизложенное будет интересно как начинающим, так и опытным пользователям АПТЕКА ИЛИ ЛАРЕК Hачнем… Hаконец, для продавцов презервативы отличаются только ценой, поэтому вместо… Extra Durex, Ceylor - презервативы с особыми свойствами смазки Ceylor или латекса Durex. Скажем так - на любителя…

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ Система автоматизации банковской деятельности «DiasoftBANK 4x4 WorkFlow»
Для работы с системой DiasoftBANK 4x4WorkFlow от пользователя требуется наличие минимальных навыковработы в windows 98 и выше, а также… Пользователь должен обладать знаниями в области экономики… Соответствие имен приложений и их исполняемых файловследующее Общесистемныеприложения ADMIN.EXE Администратор,…

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ Система автоматизации банковской деятельности «DiasoftBANK 4x4 WorkFlow»
Для работы с системой DiasoftBANK 4x4WorkFlow от пользователя требуется наличие минимальных навыковработы в windows 98 и выше, а также… Пользователь должен обладать знаниями в области экономики… Соответствие имен приложений и их исполняемых файловследующее Общесистемныеприложения ADMIN.EXE Администратор,…

Руководство пользователя графическим пакетом RusPlan 5.0
Національний технічний університет Харківський політехнічний інститут... Кафедра обчислювальної техніки та програмування...

Разработка онтологий 101: руководство по созданию Вашей первой онтологии
Не редактировал материал избыточен на но СУЩНОСТЬ передана хорошо... В результате нужно научиться строить свою под свою философию и... Г Н...

Смирнова Н.Н. Операционная система Линукс: начальный курс пользователя. Учебное пособие Смирнова, Панова, Касаткина БГТУ 2007
Список литературы... Учебники... Энди Таненбаум Современные операционные системы е е издание...

Сетевые ОС для серверов; сетевые ОС для пользователей
Главными задачами являются разделение ресурсов сети например дисковые пространства и администрирование сети С помощью сетевых функций системный... ГЛАВА Назначение и функции операционной... ПРИМЕЧАНИЕ...

Для большинства пользователей
На сайте allrefs.net читайте: Для большинства пользователей. ВВЕДЕНИЕ...

Индивидуальные задания 3 Получить список групп пользователей, зарегистрированных в системе первое поле файла /etc/group
К лабораторной работе... Вариант... Создать архив arh tar состоящий из нескольких файлов Добавить в архив файлы без его распаковки Вывести список...

Инструкция Пользователя программы Omega Research TradeStation 2000
Пользователя программы... Omega Research TradeStation...

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