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

0

]GATE = INTERNAL – внутреннее разрешение счета EXEN2=0

GATE = EXTERNAL – внешнее разрешение счета  EXEN2=1

MODE = 0 – режим самозагрузки CP/RL2=0

MODE = 1 – режим захвата CP/RL2=1

MODE = 2 – режим генератора бодовой скорости RCLK=1 TCLK=1

MODE = 3 – генератор бод. только приемника  RCLK=1 TCLK=0

MODE = 4 – генератор бод. только передатчика RCLK=0 TCLK=1

MODE = 5 – режим выдачи частоты T2OE=1

DIRECTION=UP – считать вперед (увеличивать) DCEN=1

DIRECTION=DOWN – считать назад (уменьшать) DCEN=0

Пример:        CONFIG TIMER2=COUNTER , GATE=INTERNAL , MODE=0 ‘Режим самозагрузки

CONFIG TIMER2=COUNTER , GATE=INTERNAL , MODE=0 , DIRECTION=UP

CONFIG TIMER2 = COUNTER , GATE = INTERNAL , MODE = 1 ‘Режим захвата CONFIG TIMER2=TIMER , GATE=INTERNAL , MODE=2 ‘Бодовый генератор CONFIG TIMER2=TIMER , GATE=INTERNAL , MODE=3 ‘Бод. генер. на прием CONFIG TIMER2=TIMER , GATE=INTERNAL , MODE=4 ‘Бод.генер. на передачу CONFIG TIMER2=TIMER , MODE=5                 ‘Выход частоты

CONFIG WATCHDOG

Действие:      Установка времени срабатывания будильника модели AT89S8252

Синтаксис:    Config Watchdog = Time  Time – время в мс из ряда: 16 , 32, 64 , 128 , 256 , 512 , 1024 и 2048.

Пример:        Config Watchdog = 1024 ‘время срабатывания 1024 мс

CONST

Действие:      Объявить  символьное  имя  числа  (константы).  Определенное  символьное  имя  в  дальнейшем можно   использовать   в   тексте   программы   в   качестве   цифрового   значения   (константы). Символьное имя нельзя использовать в блоке определения непосредственных данных с помощью оператора DATA. Неприятности  при символьном определении чисел возникают в случаях, когда компилятор не понимает определения. В результате, вместо числа записывается нулевой код без указания ошибки.

Синтаксис:    DIM Symbol AS Const Value  Symbol – имя константы. Value – цифровое значение

Const Symbol = Value

Пример:        Dim Ar As Const 5         ‘Ar = 5

Dim Br As Const &B1001    ‘Br = 9

Dim Cr As Const &hab00    ‘Cr = AB00H

‘Новая возможность определения имен констант (начиная с вер.1.0.0.19) Const Cbyte = &HF

Const Cint = -1000

Const Csingle = 1.1

Const Cstring = "test"

COUNTERx

Действие:      Записать значение непосредственно в счетчик таймера. При загрузке счетчик  останавливается

(записывается TRx=0), а затем счет разрешается снова (устанавливается TRx=1).

Синтаксис:    COUNTERX = var или var = COUNTERX

Var – переменная типа byte, Integer/Word variable или константа (последняя только при загрузке).

CounterX – COUNTER0 , COUNTER1 или COUNTER2. Используйте СounterX = 0 для сброса счетчика..  Счетчик может считать от 0 до 255 в режиме 2 (8-битный с самозагрузкой) и до 65535 в режиме 1 (16-битный).

Пример:        Dim A As Byte , C As Integer

Config Timer0 = Counter , Gate = Internal , Mode = 1

Counter0 = 0       ‘очистить Start Counter0     ‘начать счет Do                 ‘цикл

A = Inkey        ‘прочитаем введеное

C = Counter0     ‘считаем таймер

Print C          ‘отпечатаем значение таймера

Loop Until A = 27  ‘пока не пришел символ escape продолжаем

End Оператор: COUNTER0 = 1000

Компилируется: Clr TCON.4

Mov tl0,#232

Mov th0,#3

Setb TCON.4

CPEEK()

Действие:      Возвращает  значение  кода  по  указанному  адресу  из  памяти  команд.  Т.к.  запись  в  память программ процессора модели 8051 невозможна, то операция и соответственно команда CPOKE, имеющаяся в стандартном Бейсике, невозможна.

Синтаксис:    var = CPEEK( address ) Var –  переменная  (байтовая),  которая  будет   содержать считанное значение.  Address – переменная или константа (типа Word или Integer).

Пример:        Dim I As Integer , B1 As Byte For I = 0 To 127

B1 = Сpeek(i)        ‘взять байт из памяти

Printhex B1 ; «  « ; ‘показать

Next

DATA

строковые константы. Байтовые константы в любом виде, предусмотренном Bascom. Константы типа Integer и Word должны быть со значком – %. Константы типа Long – со знаком &. Константы с плавающей точкой – со знаком !. Компилятор позволяет размещить в одной строке разные типы данных. Их разделение при считывании является задачей программиста.

Пример:        tab_byte:                       ‘byte data Data 0 , 1 , 2 , 20 , &hFF , &b000101010

_tab_word:                      ‘integer

data Data 100% , 200% , 32345% , &ha0df , &b0001010001010101

_tab_long:                      ‘long data Data 1000& , 22222222& , &h125690bc

_tab_sing:                      ‘single data Data 1000! , 2000! , 3000! , 4000! , 5000!

_tab_string:                    ‘string data

Data «0123456789» , $35         ‘and new format of the string data

_tab_mix:     ‘mix of constant types on one line DATA «TEST» , 5 , 1000% , -1& , 1.1!

DATA EEPROM:  WRITEEEPROM , READEEPROM

Действие:      Модель микроконтроллера AT89S8252 имеет встроенную EEPROM объемом 2  кБайта. Для ее использования предусмотрены директивы: WRITEEEPROM – записать данные и READEEPROM

–                                                       считать данные.

Синтаксис:    WRITEEEPROM var [, address ] READEEPROM var [, address ] Var – любая переменная BASCOM.  Address – адрес EEPROM в диапазоне от 0 до 2047. Адрес можно не указывать,   он   будет   устанавливаться   автоматически   в   порядке   следования   записей   при компиляции.  При  считывании  переменной  значение  адреса  будет  вставляться  компилятором также  автоматически,  используя  значение,  полученное  (вычисленное)  ранее  при  ее  записи. Естественно,  записи  в  этом  случае  будут  производиться  с  адреса  000  или  после  последнего указанного. Кроме того, при автоматическом выборе адреса данные можно вернуть только в тот регистр, из которого они были записаны, и,  соответственно, нельзя записать данные из одной ячейки внутренней памяти в разные ячейки EEPROM.

Пример:        Dim S As String * 15 , S2 As String * 10

S = «Hello» : S2 = «test» Dim L As Long

L = 12345678 Writeeeprom S : Writeeeprom S2  ‘записать строки

Writeeeprom L                   ‘записать длинную переменную S = «» : S2 = «» : L = 0        ‘очистить переменные Readeeprom L : Print L

Readeeprom S : Print S Readeeprom S2 : Print S2

End

DEBOUNCE

Действие:      Производить периодическую проверку состояние битового порта, и когда ожидаемое изменение уровня  происходит,  то  осуществлять  переход  на  указанную  метку  или  вызывать  указанную подпрограмму. В последнем случае  после исполнения подпрограммы производится возврат к оператору контроля уровня. Периодичность проверки уровня определяется директивой CONFIG DEBOUNCE = ms.

Синтаксис:    DEBOUNCE Px.y , state , label  [ , SUB]

Px.y – имя   порта.   При    state = 0 переход   происходит   при   установлении   на

контролируемой  линии  низкого  уровня  и   при   state = 1 оператор   ждет   установления высокого  уровня.   Label –  адрес  перехода  (GOTO)  или  вызываемой  подпрограммы,  если имеется дополнительное указание SUB. Чтобы  все работало правильно, необходимо к моменту возврата из подпрограммы вернуть  порт в исходное (неактивное) состоянии. Это же правило, кстати, действует и при вызове внешних прерываний.

Пример:        CONFIG DEBOUNCE = 30  ‘30mS

Do   ‘Debounce P1.1 , 1 , Pr ‘здесь ждем поступления выс. уровня

Debounce P1.0 , 0 , Pr , SUB

‘                         ^—– вызывать как подпрограмму

‘                    ^—– метка перехода

‘               ^———- что ждем (здесь «0») ‘         ^—————- имя порта, где ждем Loop

End

Pr:   Print «P1.0 was/is low» : Return

DECLARE SUB

Действие:      Объявить  процедуру  (новую  функцию).  Определение  процедур  дает  возможность  расширить язык   введением   новых   функций.   В   простейшем   случае   обьявленную   процедуру   можно использовать  как  обычную  подпрограмму.     Полное  использование  преимуществ  процедуры заключается в  возможности ее  вызова с различными переменными, подставляемыми в месте использования. Важно, чтобы заменяющие переменные были такого же типа, что и объявленные. Перед  использованием  процедуры  директивой  DIM  должны  быть  объявлены  используемые переменные с указанием имени и типа. Описание процедуры должно производится только после ее объявления.

Синтаксис:    DECLARE SUB Test[(var as type, var1 as type)] Test – имя процедуры.

Var, var1 – имена используемых переменных. Число переменных не должно превышать 10.

Тип переменных – Bit, Byte, Word/Integer, Long или String.

Пример:        Dim a As Byte, b1 As Byte, c As Byte

Declare Sub Test(a As Byte) ‘определение процедуры

A = 1 : b1 = 2: c = 3

Print a ; b1 ; c

Call Test(b1)               ‘Test b1 – можно записывать и так

Print a ;b1 ; c End

Sub Test(a as byte)         ‘описание процедуры

A = b1 ; b1 = c ; c = a + b1

End Sub

DECR, INCR

Действие:      Уменьшить  или  увеличить  переменную  на  единицу.  Исполняется  быстрее,   чем   оператор: var = var – 1. При воздействии на знаковые переменные эти операторы действуют с учетом знака.

Синтаксис:    DECR var INCR var Var – переменная типа: Byte, Integer, Word, Long, Single.

Пример:        Dim A As Byte A = 5                  ‘беззнаковое значение

Decr A : Print A       ‘4

Incr A : Print A       ‘5

DefBit, DefByte, Defint, DefWord

Действие:      Определить тип переменных. Равноценно определению с использование оператора Dim, однако,

возможности немного уже.

Синтаксис:    DEFBIT b1 – определить b1 как битовую переменную.

DEFBYTE c – C как однобайтовую

DEFINT I – I как типа Integer (двухбайтовая со знаком).

DEFWORD x – X как слово

Пример:        Defbit b : DefInt c ‘определить тип как бит и слово (integer) Set b1      ‘set bit to 1

C = 10      ‘let c = 10

DEFLCDCHAR

Действие:      Определить изображение дополнительных символов с кодом от 0 до 7 или от 8  до 15 (те же самые). Для того, чтобы новые символы начали действовать,  необходимо выполнить команду CLS. Для вывода дополнительных символов нужно применять функцию Chr().

Синтаксис:    DEFLCDCHAR   char,r1,r2,r3,r4,r5,r6,r7,r8 Char –  код  (номер)  определяемого символа (0-7). r1-r8

Пример:        Deflcdchar 0,1,2,3,4,5,6,7,8  ‘определить спец. символ

Cls             ‘очистка приводит в действие

Lcd Chr(0)      ‘показать изображение

End

DELAY, WAIT , WAITMS

Действие:      Ждать. Программные временные задержки (при 12 МГц):  Delay – короткая на 100 мкс. WAIT -

на указанное число секунд. WAITMS – на указанное число миллисекунд

Синтаксис:    DELAY , WAIT time (значение в мсек) , WAITMS time  (значение в сек)

Значение time может быть задано как константой, так и переменной.

Пример:        WAIT 3      ‘ждать 3 сек

WAITMS 200  ‘ждать 200 мс

DIM

Действие:      Определить размерность переменных

Синтаксис:    DIM var AS [XRAM/IRAM] type

Var –  любое  имя,  короткое  или  длинное.  Переменная  может  быть  объявлена  как  массив

переменных  с  индексом,  например  ar(n),  и  будет  занимать  n  последовательных  элементов.

Type –  тип  переменной.  Предусмотрены  следующие  значения:        Bit,  Byte, Word, Integer, Long, Single и String

XRAM – указывает, что переменная будет расположена во внешней памяти. IRAM – располагает переменную во внетренней памяти (по умолчанию). Для строковых переменных нужно обязательно указывать длину, например: Dim s As XRAM String * n.

Строковая переменная займет в памяти n+1 байт. Еще одна особенность определения строковой

переменной в том, что здесь назначается только длина буфера, в который будут  помещаться строки  различной  длины.  Истинная  длина  переменной,  носящей  имя  буфера,  зависит  от  ее содержания, но не может (и не должна) превышать  назначенной длины. Битовые переменные

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

использованием, т.е. могут располагаться по всему тексту программы, однако, компилятор сразу зарезервирует место для переменных объявляемых позже.

Пример:        Dim B1 As Bit         ‘бит может быть: 0 или 1

Dim A As Byte         ‘байт от 0 до 255

Dim C As Integer      ‘integer -32768 – +32767

Dim D As String * 10  ‘строка длиной 10 символов

Dim ar(10) As Byte    ‘массив из 10 байтовых переменных

Dim E As Const 5      ‘константы

Dim F As Const &B1001B1

B1 = 1 : Set B1       ‘назначить биты (assign bits) A = 12 : A = A + 1    ‘байты

C = -12 : C = C + 100 ‘слова

Waitms E              ‘ждать 5 мс

Print F : Print B1

End

DISABLE, ENABLE

Действие:      Запретить или разрешить прерывание. Фактически, эти операторы только  устанавливают или сбрасывают соответствующие биты регистра IE

Синтаксис:    DISABLE interrupt , ENABLE interrupt  Interrupt – одно из имен  источников прерываний:   INTERRUPTS, INT0, INT1, SERIAL, TIMER0, TIMER1, TIMER2 или PCA.

Пример:

ENABLE INTERRUPTS

‘enable the setting of interrupts

ENABLE TIMER0

DISABLE SERIAL DISABLE INTERRUPTS

‘enable TIMER0

‘disables the serial interrupt.

‘disable all interrupts

DO .. LOOP

Действие:      Определить цикл. Операторы цикла DO и LOOP устанавливают необходимость  безусловного повторения   выполнения   операторов,   расположенных   между    ними.    Прекращение   цикла происходит только при выполнении условий, заданных с помощью ключевого слова UNTIL. Из цикла также можно выйти, с  помощью операторов GOTO или EXIT из конструкции проверки условий IF … END IF.

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

По теме:

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