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

Приклад: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 B0 перемкнемо у режим зчитування

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

Приклад:Mc: цикл очікування біта, встановленого в перериванні

Do

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

If Bit_a = 1 Then прокинувся і перевіряє: є подія

Bit_a = 0: Goto Wba так – відпрацювати

End If Loop

Wba:

Set P11 дію, викликане подією у перериванні

Goto Mc назад в цикл очікування

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

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

Синтаксис: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 A15 = 0 THEN PRINT «BIT 15=0» ELSE PRINT «BIT 15=1»

END IF

Приклад 2:Dim X As Integer

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

If X = &quotA&quot Then when X = 65 the test will pass

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

If X = 10 Then Goto M1 Else Goto M2

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

Синтаксис: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

Дія:Повертає значення позиції в рядку, зазначеної для пошуку підрядка (включення) Поки працює тільки у внутрішній памяті

Синтаксис: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 може бути використана, коли в системі є інтерфейс RS-232 При підключенні до нього компютера з програмою емулятора терміналу (або іншою програмою, що відтворює аналогічні функції) є можливість введення значень змінних у текстовому вигляді (числових і символьних) BASCOM також підтримує за допомогою функція INPUTHEX введення змінних в HEX-коді, записаному символами (Кожен байт записується двома символами) Прийом закінчується при вступі символу (0dh)

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

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

INPUTBIN var1 [, varn] Prompt – запрошення (повідомлення, яке буде виводиться на термінал перед введенням змінної)

Var, varn – змінні (їх може бути декілька), значення яких вводяться NOECHO – опція, яка забороняє луна (передачі назад введених символів) TIMEOUT – опція, яка вказує на необхідність перевірки часу введення У версії

компілятора старше 201 цю опцію перед використанням необхідно оголосити директивою

$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 повертає 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 тут просто чекати символу

Дія:Повертає рядки малих і великих символів (перетворює відповідно рядкові з приписних і прописні з рядкових) Перетворює символи тільки латинського алфавіту Цифри та інші знаки не змінює

Синтаксис: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

Функція 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 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 – повертає значення самого правого символу (або декілька правих символів) Рядкові змінні, застосовуються у цих операціях, повинні бути одного типу, тобто розташовуватися або у внутрішній памяті або у зовнішній Довжина змінних, використовуваних при цих операціях, може бути різною

Синтаксис: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

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

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

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

S = «test»: A = Len (s): Print A а довжина змінної тільки 4

Дія:Записує значення в таймер, що працює в режимі самозавантаження (записує в регістри,

Джерело: МЛКуліш, ДОВІДНИК З ПРОГРАМУВАННЯ 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>

*

*