Главная » Bascom-8051, Basic, Железо » Директивы, операторы и функции Bascom-8051 – ЧАСТЬ 1

0
$ASM – $END ASM

Действие:      Обозначают начало и конец блока на языке ассемблера, вставляемого в текст  программы на Бейсике. Использование $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, $CRYSTAL

Действие:      $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, но послед. интерфейс используется ‘другим способом

$DEFAULT XRAM

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

Пример:        $default Xram

Dim X As byte         ‘во внешней памяти XRAM Dim Y As Integer      ‘тоже в XRAM

Dim Z As IRAM Integer ‘эта переменная определена в памяти IRAM

$EXTERNAL

Действие:      Директива,   определяющая   используемую   ассемблерную   подпрограмму   или   подпрограммы пользователя.  Это  позволяет  включать  с  процесс  ассемблирования  только  необходимые  для данного случая подпрограммы из всех, содержащихся в библиотеке. Однако, последнее в данной версии пока не работает – включается вся библиотека.

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

Пример:        $LIB "mylib.lib"

$EXTERNAL _dec76

$INCLUDE

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

В подключаемом файле должны содержаться только определения, предусмотренные BASCOM.

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

Пример:        $include [c:\bascom\]123.bas  ‘[полный путь] и имя

$IRAMSTART

Действие:      Устанавливает   начальное   значение   распределения   переменных   во   внутренней    памяти.

Применяется  совместно  с  директивами  $NOINIT и  $NOSP,    отменяющими  автоматичекую инициализацию микроконтроллера и установку стека.

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

Пример:        $NOINIT           ‘отменяет инициализацию процессора

$NOSP             ‘отменяет инициализацию стека

$IRAMSTART = &H60 ‘начальное значение распределения памяти

SP = 80           ‘назначить стек

$LARGE

Действие:      Устанавливает  модель  большой  памяти  (более  2  КБайт).  При  этом   компилятор   начинает использовать команды  Lcall и  Ljmp.

Пример:        $LARGE ‘при компиляции появляется сообщение об ошибке 148, ‘когда требуется эта директива

$LCD

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

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

Пример:        $LCD = &ha000 ‘обращение к индикатору по адресу a000h,a001h LCD «Hello world»

$LIB

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

Синтаксис:     $LIB myfile.lib myfile.lib – имя файла.

Пример:        $LIB "mylib.lib"  ‘указать имя файла библиотеки

$EXTERNAL _dec76  ‘указать используемую подпрограмму

$MAP

Действие:      Указывает компилятору на необходимость записывать в файле сообщений  шестнадцатеричный адрес начала исполняемого кода каждой строки исходного текста программы. Применяется для облегчения отладки программы.

Пример:        $MAP

A = A – F Print "Hello" Print "Test"

Будет записано в соответствующей секции файла сообщений :

Code map

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

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

2

152

3

169

5

180

$NOBREAK

Действие:      Указывает компилятору на необходимость пропускать операторы Break»,  имеющиеся в тексте программы,  и таким образом позволяет не убирать их из окончательного текста программы.

Пример:        $Nobreak   ‘пропускать все команды останова отладчика

$NOINIT

Действие:      Отменяет  автоматическую  инициализацию  процессора параметрами,  установленными  в  меню

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

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

Пример:        $NOINIT           ‘отменяет инициализацию процессора

$IRAMSTART = &H60 ‘начальное значение распределения памяти

$NOLCDINIT

Действие:      Директива, запрещающая инициализацию LCD.

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

$NONAN

Действие:      Заменяет вывод сообщения “NAN” на сообщение “0.0” в тех случаях, когда выводимое значение переменной в формате с плавающей точкой при  преобразовании в строковую переменную не может  быть  представлено  как  число  (выходит  за  пределы  формата  отображения,  т.к.  очень маленькое или очень большое или при вычислениях произошло произошло переполнение).

Пример:        $NONAN  ‘отменяет сообщение “NAN”

$NONULL

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

Пример:        $NONULL = -1           ‘отменяет завершающий нуль

DATA “эта строка и следующая строка ”

$NONULL = 0$           ‘разрешает установку завершающего нуля

DATA “являются одной текстовой константой”

$NOSP

Действие:      Отменяет автоматическую инициализацию стека после блока переменных. При  использовании данной директивы необходимо включить в программу оператор  инициализации регистра стека (SP). Если этого не сделать, то указатель стека останется на 07h.

Пример:        $NOSP   ‘отменяет инициализацию стека

SP = 80 ‘назначить стек

$OBJ

Действие:      Включить в программу объектный код

Синтаксис:    $OBJ obj obj - включаемый объектный код в шестнадцатеричном виде

Пример:        $obj D29122  ‘КОМАНДЫ SETB P1.1, RET

$RAMSIZE

Действие:      Сообщает компилятору размер внешней памяти

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

Пример:        $Ramsize = &h4000 ‘размер внешнего ОЗУ 16 кБ

$RAMSTART

Действие:      Устанавливает начало распределения внешней памяти.

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

Пример:        $Ramstart = &h1000 ‘начало распределения переменных с 1000h

$REGFILE

Действие:      Указать имя файла для определения имен используемых регистров. Применяется для установки модели  применяемого  микроконтроллера.  Указываемый  файл   должен  быть  в  директории компилятора. ВНИМАНИЕ! Эта директива должна записывается первой исполняемой строкой в тексте программы.

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

Пример:        ‘перед этой директивой могут быть строки комменариев

$REFILE = "8052.DAT"

$ROMSTART

Действие:      Устанавливает  начало  распределения  программной  памяти.  Эта  директива  не   похожа  на привычный  оператор  ORG,  применяемый  при  программировании  на  ассемблере.  Директива

$Romstart,  независимо  от  места  расположения,    указывает  начало  исполняемого  кода  всей программы! Ее применение для установки начала  последующей части программы с желаемого

адреса невозможно.

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

Пример:        $Romstart = &h8000 ‘начало распределения ПЗУ с 8000h

$SERIALINPUT

Действие:      Перенаправляет действие функции INPUT на считывание данных из другого устройства.

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

Пример:        $Serialinput = Myinput  ‘определим имя программы ввода данных

!myinput:

;здесь проводим необходимые действия

Mov A , Sbuf ;посл. ввод в Acc от устройства Sbuf

Ret

$SERIALOUTPUT

Действие:      Перенаправляет действие функции PRINT на запись данных в другое устройство

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

Пример:        $SERIALOUTPUT = Myioutput  ‘опр. имя программы вывода данных

!myoutput:                ;здесь проводим необходимые действия   Mov Sbuf , A ;посл. вывод из Acc в устройства Sbuf

Ret

$SERIALINPUT2LCD

Действие:      Перенаправляет данные из последовательного порта в LCD-индикатор, обеспечивая режим эха.

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

Пример:        $SERIALINPUT2LCD ’показывать вводимые данные

$SIM

Действие:      При  наличии  этой  директивы  компилятор  генерирует  код,  исключающий  циклы  ожидания

(программные задержки операторов WAIT, WAITMS, DELAY), чтобы ускорить процесс отладки.

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

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

$TIMEOUT

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

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

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

Пример:        $TIMEOUT ‘будет использована опция TIMEOUT

Источник: М.Л.Кулиш, СПРАВОЧНИК ПО ПРОГРАММИРОВАНИЮ BASCOM-8051, Краснодар 2001

По теме:

  • Комментарии