Директиви, оператори та функції Bascom-8051 – ЧАСТИНА 1

Дія:Позначають початок і кінець блоку на мові асемблера, що вставляється в текст програми на Бейсике Використання $ ASM допускається тільки разом з $ END ASM

Приклад:$asm Mer:

Mov r0,#{C} address of c Mov a,#1

Mov @r0,a   store 1 into var c

$end Asm

Примітка Дивись розділ «Правила оформлення асемблерних вставок»

Дія:$ BAUD – встановлює швидкість обміну асинхронного інтерфейсу (UART) Дана директива активізується тільки при використанні команд PRINT, INPUT і зазвичай використовується в блоці ініціалізації мікроконтролера Також необхідно вказувати і частоту кварцового генератора (резонатора) за допомогою директиви $ CRYSTAL (інакше значення буде взято з панелі параметрів компілятора)Увага Якщо в тексті програми не застосовуються оператори типу PRINT і INPUT, то ініціалізація автоматично не виконується – в таймер не завантажується значення коефіцієнта ділення і не встановлюється режим последевательного інтерфейсу, Для цього потрібно додати додаткові оператори ініціалізації таймера і запустити таймер (див приклад)

Синтаксис:$ BAUD = var1 $ CRYSTAL = var2 var1, var2 – константи, чисельно рівні відповідно швидкості в бодах і тактовій частоті в герцах (частоті кварцу)

Приклад:$ Baud = 2400 $ Crystal = 12000000 12 MHz crystal Config Timer2 = Timer, Gate = Internal, Mode = 2 для Timer2

Scon = & h52: Rcap2h = & hff: Rcap2l = & h64: Start Timer2 * варіант для Timer1

Config Timer1 = Timer, Gate = Internal, Mode = 2 для Timer1

Scon = & h52: Pcon = & H80: Th1 = & he6: Start Timer1 * * – ці рядки додаються, якщо в програмі відсутні оператори типу Print і Input, але послід інтерфейс використовується іншим способом

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

Приклад:$default Xram

Dim X As byte у зовнішній памяті XRAM Dim Y As Integer теж у XRAM

Dim Z As IRAM Integer ця змінна визначена в памяті IRAM

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

Синтаксис:$ EXTERNAL myrout [, other] myrout – імя підпрограми

Приклад:$LIB &quotmyliblib&quot

$EXTERNAL _dec76

Дія:Включити в процес компіляції даної програми ASCII (текстовий) файл з поточної позиції

У файлі, що підключається повинні міститися тільки визначення, передбачені BASCOM

Синтаксис:$ INCLUDE <ім'я файлу>

Приклад:$ Include [c: \ bascom \] 123bas [повний шлях] та імя

Дія:Встановлює початкове значення розподілу змінних у внутрішній памяті

Застосовується спільно з директивами $ NOINIT і $ NOSP, які скасовують Автоматичний ініціалізацію мікроконтролера і установку стека

Синтаксис:$ IRAMSTART = constant Constant – початкове значення (0-255)

Приклад:$ NOINIT скасовує ініціалізацію процесора

$ NOSP скасовує ініціалізацію стека

$ IRAMSTART = & H60 початкове значення розподілу памяті

SP = 80 призначити стек

Дія:Встановлює модель велику памяті (більше 2 КБ) При цьому компілятор починає використовувати команди Lcall і Ljmp

Приклад:$ LARGE при компіляції зявляється повідомлення про помилку 148, коли потрібно ця директива

Дія:Встановлює адресу і режим звернення до символьному індикатору в 8-бітному режимі, і підключеному до шини даних процесора D0 .. D7 (при використанні додаткової команди LCDBUS = 4 в 4-бітному режимі з підключення до D4 .. D7) Лінія «E» індикатора підключається через інвертор до лінії процесора «Wr» (P36) Лінія «RS» підключається до формувачу адреси A0 (регістру, замикається сигналом ALE) Лінія «RW» індикатора заземляется, тк читання з індикатора не виробляється

Синтаксис:$ LCD = [& H] address address – 16-розрядний

Приклад:$ LCD = & ha000 звернення до індикатора за адресою a000h, a001h LCD «Hello world»

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

Синтаксис:$ LIB myfilelib myfilelib – імя файлу

Приклад:$ LIB myliblib Вказати імя файлу бібліотеки

$ EXTERNAL _dec76 вказати використовувану підпрограму

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

Приклад:$MAP

A = A – F Print &quotHello&quot Print &quotTest&quot

Буде записано у відповідній секції файлу повідомлень:

Code map

———————————————————– Line                                   Address(hex)

———————————————————–

2

152

3

169

5

180

Дія:Вказує компілятору на необхідність пропускати оператори Break », наявні в тексті програми, і таким чином дозволяє не прибирати їх з остаточного тексту програми

Приклад:$ Nobreak пропускати всі команди зупину відладчика

Дія:Скасовує автоматичну ініціалізацію процесора параметрами, встановленими в меню

«Options» – «Compiler» програми «Bascom» Так як дана директива скасовує всі види ініціалізації, то при її використанні необхідно повністю конфігурувати систему,

включаючи установку початкової адреси внутрішньої памяті (директивою Iramstart) Задаються в тексті програми параметри внутрішнього і зовнішнього обладнання (директиви Config) мають більш високий пріоритет і зазвичай не вимагають застосування директиви $ Noinit

Приклад:$ NOINIT скасовує ініціалізацію процесора

$ IRAMSTART = & H60 початкове значення розподілу памяті

Дія:Директива, яка забороняє ініціалізацію LCD

Синтаксис:$NOLCDINIT

Дія:Замінює висновок повідомлення NAN на повідомлення 00 у тих випадках, коли виведене значення змінної у форматі з плаваючою точкою при перетворенні в строкову змінну не може бути представлено як число (виходить за межі формату відображення, тому що дуже маленьке або дуже велике чи при обчисленнях сталося сталося переповнення)

Приклад:$ NONAN скасовує повідомлення NAN

Дія:$ NONULL = 0 – встановлює звичайний формат запису в програмі полів текстових даних (з завершальним нулем) $ NONULL = -1 – встановлює формат запису полів текстових даних без завершального нуля

Приклад:$ NONULL = -1 скасовує завершальний нуль

DATA цей рядок і наступна рядок

$ NONULL = 0 $ дозволяє установку завершального нуля

DATA є однією текстової константою

Дія:Скасовує автоматичну ініціалізацію стека після блоку змінних При використанні даної директиви необхідно включити в програму оператор ініціалізації регістра стека (SP) Якщо цього не зробити, то покажчик стека залишиться на 07h

Приклад:$ NOSP скасовує ініціалізацію стека

SP = 80 призначити стек

Дія:Включити в програму обєктний код

Синтаксис:$OBJ obj obj включається обєктний код в шістнадцятковому вигляді

Приклад:$ Obj D29122 КОМАНДИ SETB P11, RET

Дія:Повідомляє компілятор розмір зовнішньої памяті

Синтаксис:$ RAMSIZE = [& H] size size – константа

Приклад:$ Ramsize = & h4000 розмір зовнішнього ОЗУ 16 кБ

Дія:Встановлює початок розподілу зовнішньої памяті

Синтаксис:$ RAMSTART = [& H] adress adress – константа

Приклад:$ Ramstart = & h1000 початок розподілу змінних з 1000h

Дія:Вказати імя файлу для визначення імен використовуваних регістрів Застосовується для установки моделі застосовуваного мікроконтролера Що указується файл повинен бути в директорії компілятора УВАГА Ця директива повинна записується перший виконуваної рядком у тексті програми

Синтаксис:$REGFILE = [File]

Приклад:Перед цією директивою можуть бути рядки комменаріев

$REFILE = &quot8052DAT&quot

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

$ Romstart, незалежно від місця розташування, вказує початок виконуваного коду всієї програми Її застосування для установки початку наступної частини програми з бажаного

адреси неможливо

Синтаксис:$ ROMSTART = [& H] adress adress – константа

Приклад:$ Romstart = & h8000 початок розподілу ПЗУ з 8000h

Дія:Перенаправляє дію функції INPUT на зчитування даних з іншого пристрою

Синтаксис:$ SERIALINPUT = label label – імя підпрограми, що розміщає дані, що вводяться з довільного пристрою в акумуляторі

Приклад:$ Serialinput = Myinput визначимо імя програми введення даних

!myinput:

; Тут проводимо необхідні дії

Mov A, Sbuf остан введення в Acc від пристрою Sbuf

Ret

Дія:Перенаправляє дію функції PRINT на запис даних в інший пристрій

Синтаксис:$ SERIALOUTPUT = label label – імя підпрограми, що виводить дані з акумулятора в довільне пристрій

Приклад:$ SERIALOUTPUT = Myioutput опр імя програми виведення даних

! Myoutput: тут проводимо необхідні дії Mov Sbuf, A остан висновок з Acc в пристрої Sbuf

Ret

Дія:Перенаправляє дані з послідовного порту в LCD-індикатор, забезпечуючи режим луни

Синтаксис:$SERIALINPUT2LCD

Приклад:$ SERIALINPUT2LCD показувати дані, що вводяться

Дія:При наявності цієї директиви компілятор генерує код, що виключає цикли очікування

(Програмні затримки операторів WAIT, WAITMS, DELAY), щоб прискорити процес налагодження

Синтаксис:$SIM

Приклад:$ SIM пропускати при налагодженні все затримки

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

TIMEOUT в операторах INPUT, INPUTHEX

Синтаксис:$TIMEOUT

Приклад:$ TIMEOUT буде використана опція TIMEOUT

Джерело: МЛКуліш, ДОВІДНИК З ПРОГРАМУВАННЯ BASCOM-8051, Краснодар 2001

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*