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

0

Пример:        Dim Addressw As Const 160 ‘адрес микросхем типа 24Cxx Dim Wadr As Word          ‘адрес считываемой переменной Dim Fld As Single         ‘приемник данных

‘п/п считывания 4-байт. числа из AT24с01A,AT24c02 – AT24c16

Rds_24c: $asm     mov A , {wadr + 1} ;готовим старший байт, cодержащий

Rl A                  ;старшие разряды адреса Orl A , #{Addressw}   ;добавим код микросхемы Mov B , A

$end Asm

I2cstart              ‘старт

I2cwbyte B            ‘первый байт режима

$asm

mov A , {wadr + 0}

$end Asm

I2cwbyte Acc          ‘младший адрес в EEPROM

Set B.0               ‘переключим в режим считывания

I2cstart              ‘повторим старт

I2cwbyte B            ‘байт режима

I2crbyte Acc , 8      ‘считали 1-й байт с опцией ACK (8)

$asm

mov {Fld + 0} , A

$end Asm

I2crbyte Acc , 8      ‘2-й байт

$asm

mov {Fld + 1} , A

$end Asm

I2crbyte Acc , 8      ‘3-й байт

$asm

mov {Fld + 2} , A

$end Asm

I2crbyte Acc , 9      ‘последний байт с опцией NOACK (9)

$asm

mov {Fld + 3} , A

$end Asm

I2cstop               ‘стоп

Return

IDLE

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

Синтаксис:    IDLE

Пример:        Mc: ‘цикл ожидание бита, устанавливаемого в прерывании

Do

Idle ‘останов для снижения энергопотребления

If Bit_a=1 Then ‘проснулся и проверяет: есть событие?

Bit_a=0 : Goto Wba ‘да – отработать

End If Loop

Wba:

Set P1.1 ‘действие, вызванное событием в прерывании

Goto Mc  ‘обратно в цикл ожидания

IF, ELSE , ELSEIF, END IF

Действие:      Проверить условия, в результате которых выполняются или пропускаются указанные  действия.

Производится  проверка  значений  и  сравнение  всех  типов  переменных,   включая   значения отдельных битов одно-, двух- и четырехбайтных переменных!!!

Синтаксис:    1-я конструкция. Исполняется действие Action 1 если выполнено условие expression 1:

IF  expression 1 THEN

‘Action 1

END IF

2-я конструкция. Исполняется действие Action 1 если выполнено условие expression 1 и Action 2

если не выполнено:

IF  expression 1 THEN ‘Action 1

ELSE

‘Action 2

END IF

3-я конструкция. Исполняется Action 1, если выполнено условие expression 1, Action  2 если не

выполнено, однако при условии выполнения expression 2, и Action 3, если не выполнено ни одно из предыдущих условий. Может быть задано несколько проверок дополнительных условий:

IF  expression 1 THEN ‘Action 1

ELSEIF expression 2 THEN

‘Action 2

ELSE

‘Action 3

END IF

Пример 1:      DIM A AS INTEGER A = 10

IF A = 10 THEN                         ‘проверка

PRINT « This part is executed.»     ‘это отпечатается

ELSE    PRINT « This will never be executed.» THEN

PRINT «BIT 15 IS SET» END IF

REM Пример использования в одной строке

IF THEN IF A.15 = 0 THEN PRINT «BIT 15=0» ELSE PRINT «BIT 15=1»

END IF

Пример 2:      Dim X As Integer

‘новая возможность проверки – сравнение со значением символа

If X = "A" Then ‘when X = 65 the test will pass

Пример 3:         ‘новая возможность проверки – запись опертора в одну строку

If X = 10 Then Goto M1 Else Goto M2

INP(), OUT

Действие:      Первая  функция  возвращает  переменной  значение  из  ячейки  во  внешней  памяти,  вторая  – записывает  значение  переменной  в  ячейку  внешней  памяти.   Функции  перемещают  только байтовые данные.

Синтаксис:    var = INP(address) OUT address, value

Var –  числовая  переменная.   Address –  адрес  ячейки. Адрес  может  задаваться  одно-  или двухбайтной  переменной.    Value –  записываемое   значение  или  переменная,  содержащая записываемые данные.

Пример:

Dim a As Byte

a = INP(&H8000)  ‘считать по адресу 8000h PRINT a

OUT &H8000,1     ‘записать 1 по адресу 8000h

‘Будет следующий генериться код последнего оператора: ‘ Mov A,#1

‘ Mov dptr,#h’8000 ‘ Movx @dptr,a

INSTR ()

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

Синтаксис:     var = INSTR( start , string , substr ) var = INSTR( string , substr )

Var – числовая переменная, принимающая значение позиции типа byte и

возвращающая 0, если заданное включение не найдено. Start – параметр, который  может  отсутствовать  и  задает  первую  позицию,  с  которой начнется поиск. Если параметр не указан, поиск начинается с позиции 1. String – имя строки, в которой ищется включение.

Substr – имя строки, содержащей искомое включение.

Пример:        Dim S As String * 10 , Z as String * 5

Dim bP as Byte

s = "This is a test"         ‘строка, в которой ищем

Z = "is"                     ‘эту строку

BP = Instr(s,z) : Print bP   ‘если ищем сначала – это позиция 6

bP = Instr(4,s,z) : Print bP ‘если ищем с четвертой позиции это – 3

End

INPUT, INPUTHEX, INPUTBIN

Действие:      Функция INPUT может быть использована, когда в системе имеется  интерфейс  RS-232. При подключении к нему компьютера с программой эмулятора терминала  (или другой программой, воспроизводящей аналогичные функции) имеется  возможность ввода значений  переменных в текстовом виде (числовых и  символьных). BASCOM также поддерживает с помощью функция INPUTHEX ввод  переменных в HEX-коде, записанном символами (каждый байт записывается двумя символами). Прием заканчивается при поступлении символа <RETURN> (0dh).

Функция INPUTBIN записывает принятые последовательным портом значения «как есть». Ввод заканчивается, как только переменная заполнится, т.е. будет принято  необходимое число байт (один для байтовой переменной, два для слова).

Синтаксис:    INPUT [“prompt”] , var [, varn] [NOECHO] [ TIMEOUT = xx] INPUTHEX [“prompt”] , var  [, varn] [NOECHO] [ TIMEOUT = xx]

INPUTBIN var1 [,varn] Prompt – приглашение (сообщение, которое будет выводится на терминал перед вводом переменной).

Var, varn – переменные (их может быть несколько), значения которых вводятся. NOECHO – опция, запрещающая эхо (передачи обратно введенных символов). TIMEOUT – опция, указывающая на необходимость проверки времени ввода. В версии

компилятора старше 2.01 эту опцию перед использованием необходимо объявить директивой

$TIMEOUT

XX – параметр задержки до 2^31, по истечению которой произойдет возврат даже при отсутствии ввода данных. Единица времени ожидания приблизительно равна 100 мкс(при 12 МГц). При использовании этой опции компилятор занимает в памяти четыре байта для счетчика времени.

Пример:        $baud = 1200               ‘порт должен быть настроен

$crystal = 12000000

$timeout                   ‘будет применяться ввод с тайм-аутом!

Dim V As Byte , B1 As Byte Dim C As Integer , D As Byte

Dim S As String * 15       ‘только если поддерживается XRAM Input «Введите V» , V      ‘вводить только десятичные цифры Input B1                   ‘без запроса

Inputhex «Enter hex number (4 bytes)» , C ‘только шестнадц.

Print C

Inputhex «Enter hex byte (2 bytes)» , D ‘2 байта шестнадцатер. Print D Input «More variables» , C , D  ‘несколько переменных Print C ; « »  ; D

Input C Noecho                   ‘без эха

Input «Enter your name» , S Print «Hello» ; S

Input S Noecho Timeout = 10000   ‘без эха символьную строку

‘на ввод строки 400 мс

Print S

INKEY, WAITKEY

Действие:      Функция  INKEY  возвращает  ASCII  значение  первого  символа  в  последовательном  входном буфере. Если буфер пуст, возвращается нуль.

Функция  WAITKEY  действует  почти  также,  но  возврат  происходит  только   после  приема символа.

Синтаксис:    var = INKEY var = WAITKEY

var –  переменная  типа  Byte,  Integer,  Word,  Long  или  String.  Если  символ   не   введен,

возвращается нулевое значение

Пример:        DO               ‘начать цикл

A = INKEY       ‘проверить буфер

IF A > 0 THEN  ‘есть символ? (>0) PRINT A      ‘да, показать его

END IF

LOOP             ‘замкнуть петлю

A = Waitkey      ‘здесь просто ждать символа

LCASE(), UCASE()

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

Синтаксис:    dest = LCASE(source) и dest = UCASE(source) dest – строка-приемник.  Source – строка-источник.

Пример:        Dim S as string * 12 , Z as string * 12

S = “asDFv”        ‘assign string

Z = LCASE(s)       ‘convert to lowercase

Print Z            ‘”asdfv”

Z = UCASE(s)       ‘convert to upper case Print Z            ‘”ASDFV”

LCD, LCDHEX

Действие:      Послать константу или переменную на индикатор LCD.

Функция LCD очень похожа на функцию PRINT. Имеется внутренняя  подпрограмма – вывод символа на индикатор в позицию курсора из аккумулятора. Например:

Acc = $h33        ‘«3» в ACC Call Write_lcd    ‘на индикатор

Функция  LCDHEX  посылает  значение  переменной  на  индикатор  в  шестнадцатеричном  виде

(каждый байт в виде двух символов от 00 – FF).

Синтаксис:     LCD var LCDHEX var

Var – выводимая переменная или константа. Тип:   Byte, Integer, Word, Long, Single,  Constant.

Можно показывать несколько переменных, отделяя их знаком « ; » :

LCD a ; b1 ; «constant»

Пример:        Ar = 65 : Locate 2 , 1                  ‘поставить курсор

Lcd «*» : Lcd « = » ; Ar                ‘увидим «* = A» Ar = &HBF : Clr : LCDHEX Ar             ‘увидим «BF»

LCD: CURSOR, DISPLAY, HOME, LOCATE, SHIFTLCD, SHIFTCURSOR FOURTHLINE, LOWERLINE, THIRDLINE, UPPERLINE

FOURTH, LOWER, THIRD, UPPER

Действие:      Управлять курсором LCD:

CURSOR ON – включить курсор (сделать видимым)

CURSOR OFF – выключить курсор (сделать невидимым)

CURSOR BLINK – сделать курсор мигающим (в виде блока или прямоугольника)

CURSOR NOBLINK – сделать курсор немигающим (в виде подчеркивателя)

HOME – поставить курсор в начало первой строки

HOME LOWER или HOME L – поставить курсор в начало строки ниже HOME UPPER или HOME U – поставить курсор в начало строки выше HOME THIRD или HOME T – поставить курсор в начало третьей строки

HOME FOURTH или HOME F – поставить курсор в начало четвертой строки

LOCATE y,x – расположить курсор в строке y, в знакоместе x SHIFTCURSOR LEFT – сдвинуть курсор влево на одну позицию SHIFTCURSOR RIGHT – сдвинуть курсор вправо на одну позицию LOWERLINE – поставить курсор на нижнюю строку (на одну строку ниже) UPPERLINE – поставить курсор на верхнюю строку (на одну строку выше) THIRDLINE – поставить курсор на третью строку (если она есть) FOURTHLINE – поставить курсор на четвертую строку (если она есть)

При включении питания курсор видимый  (OFF)и не мигает  (NOBLINK).

Управление изображением на LCD:

DISPLAY ON – включить индикацию (сделать изображение видимым) DISPLAY OFF – выключить индикацию (сделать изображение невидимым) SHIFTLCD LEFT – сдвинуть изображение влево на одну позицию (во всех строках) SHIFTLCD RIGHT – сдвинуть изображение вправо на одну позицию

Синтаксис:    CURSOR ON/OFF, CURSOR BLINK/NOBLINK

CURSOR ON/OFF, DISPLAY ON/OFF , LOCATE y , x

X  – константа или переменная со значением позиции (1-64*)

Y  – константа или переменная со значением строки (1-4*)

* определяется типом индикатора

Пример:        Dim a As Byte

Cursor Blink                            ‘мигать курсором

a = 255 : Lcd a : Cursor Off            ‘невидимый курсор

Display Off : Wait 1 : DISPLAY On       ‘выключить индикацию на 1 с Locate 1 , 10 : LCD «Hello» ‘начиная с 10 позиции вывести сообщение Cls : LCD «Very long text»  ‘очистить и написать снова

Shiftlcd Left : Wait 1 : Shiftlcd Right :  LCD a : Lowerline ‘сдвигать

CD a : Upperline

LEFT(), MID(), RIGHT()

Действие:      Функции разделения строковых (текстовых) переменных: LEFT() – возвращает значение самого левого  символа  (или  несколько  символов  cлева).  MID()  –  возвращает  значение  символа  из середины строки (или несколько средних  символов). Может заменить часть строки символами другой  переменной.  RIGHT  –  возвращает  значение  самого  правого  символа  (или  несколько правых символов). Строковые переменные, применяемые в этих операциях, должны быть одного типа,   т.е.  располагаться  или  во  внутренней  памяти  или  во  внешней.  Длина   переменных, используемых при этих операциях, может быть различной.

Синтаксис:    var = Left(var1 , n ) – взять символы слева

var = RIGHT(var1 ,st ) – взять символы справо

var = MID(var1 ,st [,l] ) – взять символы из середины

MID(var ,st [, l] ) = var1 – вставить символы в середину строки

var – строка результата операции.  Var1 – исходная строка.  N – число забираемых символов. Тип  n :  Byte, Integer, Word, Long, Constant.  St – стартовая позиция (с слева. Крайний слева символ – первый).  L – число извлекаемых или вставляемых символов.

Пример:        Dim s As XRAM String * 15, z As XRAM String * 15

S = «ABCDEFG» : z = Left(s,5) : Print z    ‘ABCDE S = «ABCDEFG» : z = Right(s,2) : Print z   ‘FG

S = «ABCDEFG» : z = Mid(s,2,3): Print z    ‘BCD

Z = «12345» : Mid(s,2,2) = z : Print s     ‘A12DEFG

LEN()

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

Синтаксис:    Var = LEN( string )    Var – цифровая переменная, принимающая  значение длины строки. String – строка, длина которой вычисляется.

Пример:        Dim S As String * 12 , A As Byte  ‘буфер на 12 символов

S = «test» : A = Len(s) : Print A ‘а длина переменной только 4

LOAD TIMER

Действие:      Записывает  значение  в  таймер,  работающий  в  режиме  самозагрузки  (записывает  в  регистры,

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

По теме:

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