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

Синтаксис:DO

Тіло циклу

LOOP [ UNTIL expression ]

Expression – вираження умови припинення циклу З циклу можна також вийти, застосувавши в тілі циклічної програми директиву EXIT DO або оператор GOTO

Приклад:Dim A As Byte

DO початок циклу

A = A + 1: PRINT A дії всередині циклу

LOOP UNTIL A = 10 повторювати до A = 10

Print A друкувати, що вийшло – 10

Дія:Зупинити виконання програми Аналогічно команді Stop Компілятор забороняє всі переривання і ставить команду JMP саму на себе

Синтаксис:END

Дія:Знищити змінну і звільнити память Перед знищенням змінна повинна бути визначена Цей прийом використовується для створення тимчасових (локальних) змінних, які не займають память Знищувати можна тільки останні змінні, розташовані в памяті найвище Цей оператор потрібно застосовувати з обережністю, тому стек автоматично встановлюється вище блоку змінних, і при перевизначенні не змінює свого положення (автоматично) Можливо, в деяких випадках, щоб програма працювала правильно, доведеться обчислювати значення стека і встановлювати його «вручну» При перевизначенні змінних зовнішньої памяті, природно, таких проблем не існує

Синтаксис:ERASE var Var – імя змінної

Приклад:Dim a1 as byte, a2 as byte, a3 as byte, a4 as byte, F (var3, var4) використання змінних ERASE a3: ERASE a4 тепер ці можна знищувати

Dim a5 as Byte визначення нової змінної на їх місце

‘Тепер vars a1 and a2 не можна знищувати

Дія:Вийти з однієї із зазначених програмних конструкцій: FOR . NEXT, DO . LOOP, WHILE

.. WEND або SUB . END SUB Вихід зазвичай здійснюється при перевірці яких умов

Оператор EXIT відрізняється від оператора GOTO тільки тим, що адреса переходу встановлюється автоматично на рядок, наступну за останнім оператором циклу

Синтаксис:

Відповідно до застосовуваної конструкцією циклу вибирається:

[WHILE] [SUB]

EXIT  [FOR]  [DO]

Приклад:

DO почати DO . LOOP

A = A + 1 деякі дії

IF A = ​​100 THEN перевірити a = 100

EXIT DO вихід з циклу DO . LOOP

END IF кінець умови IF . THEN

LOOP кінець циклу DO

Дія:Виконати деякі дії задане число разів Основою управління конструкцією

FOR .. NEXT служить зміна зазначеної змінної від початкового до кінцевого значення

Синтаксис:FOR var = start TO/DOWNTO end [STEP value]

Повторюваний блок

NEXT

Var – мінлива лічильник Start – початкове значення змінної End – кінцеве значення

змінної Value – значення кроку зміни змінної Значення кроку не повинно бути негативним Мінлива може збільшуватися або зменшуватися, відповідно до застосовуваної опцією TO або DOWNTO NEXT – оператор замикання циклу – перехід до наступного значенням змінної При кроці зміни змінної, рівному одиниці, опція STEP може опускатися Типи допустимих змінних: var :    Byte, Integer, Word, Long, Single start:  Byte, Integer, Word, Long, Single, Constant end :  Byte, Integer, Word, Long, Single, Constant step : Byte, Integer, Word, Long, Single, Constant

Приклад 1:y = 10 зробити y = 10

FOR a = 1 TO 10 робити 10 разів

FOR x = y DOWNTO 1 вкладений цикл

PRINT x a показувати

NEXT наступне x (вважаємо назад) NEXT наступне a (вважаємо вперед)

Приклад 2:Dim S as Single інший приклад

For S = 1 To 2 Step 01

Print S Next

END

Дія:Перетворити значення змінної у форматі з плаваючою точкою в форматований рядок

При виведенні значення з плаваючою точкою формат відображення може суттєво змінюватися

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

Синтаксис:var = Fusing( source, mask)

var – рядок, яка буде беззнаковим результатом

Source – змінна типу типу single, яка повинна бути відформатована

Mask – маска результату Наприклад, # # # # #, Де знак є цифра і вказано положення десяткової крапки Максимальне число цифр – сім (значущих) При використанні знака # значення округляється Щоб округлення не проводилося, використовуйте після крапки знаки & Якщо хочете виводити лідируючі нулі, використовуйте перед точкою замість # знак 0 (але схоже потрібно вказувати на один нуль більше)

Приклад:$large

Dim X As Single , Y As Single , Result As Single Dim I As Integer, Buf As String * 16

Input «Enter x», X еапрос двох значень

Input «Enter y» , Y

Print «X + Y =» : Result = X + Y: Print Result обчислення

Print «X-Y=» : Result = X – Y : Print Result Print «X/Y=» : Result = X / Y : Print Result Print «X*Y=» : Result = X * Y : Print Result

Buf = Fusing (result, # # # #) Форматування рядка

‘Buf = Fusing (result, 000 # #) Форматування рядка c лидир нулями Buf = Fusing (result, # # &&) форматування рядка без округлення Buf = Fusing (result, 000 &&) і те й інше

Print Buf друк рядка

Дія:Getrc – визначення часу заряду (до порога спрацьовування) RC-ланцюжка, підключеної до будь-якої лінії порту Функція використовує таймер 0, який потрібно ініціалізувати відповідним чином Послідовна RC-ланцюжок включається між землею і харчуванням Лінія порту включається між резистором і конденсатором Час вимірюється від моменту відпускання лінії (відключення від землі) до досягнення рівня «1» При використанні більш складної схеми із зовнішнім компаратором і аналоговим ключем можна отримати більш високу точність Практичне застосування: аналогова клавіатура і АЦП, де поріг спрацьовування визначається рівнем вимірюваного сигналу

Синтаксис:Var = GETRC( pin )

Var – змінна (двухбайтовая), що приймає значення затримки pin – імя будь-якого битово

адресуемого порту

Приклад:Функція GETRC () вимагає таймер 0 – конфігуруємо його

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

$ Baud = 9600 вказуємо швидкість і кварц

$crystal = 11059200

Dim W As Word місце для прийому

Do цикл

W = Getrc (p17) визначили затримку

Print W: Wait 1 показали її, чекаємо і знову повторимо

Loop С конденсатором C = 10nF отримаємо: 250 при 10K9, 198 – 9K02 182 – 8K04, 166 – 7K, 154 – 6K02, 138 – 5K04, 122 – 4K04 106 – 3K06, 86 – 2K16, 54 – 1K00 – все в одному байті При збільшенні величини ємності затримка стане двобайтового

Дія:Прийом сигналів з пульта дистанційного керування, що надходять з ІЧ-приймача у форматі RC5 Інтерфейс використовує зовнішнє переривання INT0 і тому може підключатися тільки до порту P32 При використанні цього оператора необхідно подбає про ініціалізації переривання INT0 (дивися приклад)

Синтаксис:Getrc5 (Subaddress, command) Subaddress – змінна, що приймає адресу команди Сommand – мінлива приймаюча код прийнятої команди

Приклад:Dim New As Bit Dim Command As Byte , Subaddress As Byte clr tcon0

On Int0 Receiverc5 Nosave Nosave – тільки в цій програмі

Enable Int0 E nable Interrupts Do

If New = 1 Then “1 якщо взяли

Print Command &quot  &quot Subaddress

New = 0 скинемо і чекаємо новий

End If Loop Receiverc5:

‘Підпрограма обробки переривань Int0

Getrc5 (Subaddress, command): New = 1 прийняли – уст біт

Return

Дія:Виконати підпрограму або процедуру

Синтаксис:GOSUB label label – імя (адреса) підпрограми або процедури

Приклад:

GOSUB Routine

Виклик підпрограми

Routine:

x = x + 2

RETURN

Це підпрограма

Виробляємо дію

Повернення

Дія:Перейти в іншу точку програми

Синтаксис:GOTO label label – імя (адреса) точки переходу

Приклад:GOTO Exec перехід

Exec: точка переходу

X = x + 2 виробляємо дію

‘Повернення немає

Дія:Hex () – повертає в строкову змінну із записом числа в шістнадцятковому вигляді

Str () – повертає рядок зі значенням числа, записаного у зазначеній змінної

Синтаксис:S = Hex( var )

Var – числова змінна типу: Byte, Integer, Word S – строкова змінна

S = Str(x)

X – числова змінна типу: Byte, Integer, Word, Long, Single

Приклад:Dim a as byte, s As  string * 10

a = & h6d: s = Hex (a) перетворити

Print s виведеться 6D

a = 123: s = Str (a): Print s виведеться 123

Дія:Перетворити рядок в цифрове значення:

VAL (x) – рядки, в якій символами записано десяткове число

HEXVAL (x) – рядка, що містить шестнадцатиричное значення В останньому випадку цифрове значення має бути беззнаковим і число символів відповідати типу змінної, в яку повинно записуватися

Синтаксис:var = HEXVAL (x) Var – цифрова змінна типу Byte, Integer, Word, Long x – строкова змінна

var = VAL (s) Var – цифрова змінна типу Byte, Integer, Word, Long, Single S –

строкова змінна

Приклад:Dim Ar As Integer, S As String * 10

S = «000A»: Ar = Hexval (s): Print Ar отримали 10

S = «123»: Ar = Val (s): Print Ar отримали 123

Дія:Вважати старший або молодший байт двухбайтного змінної Застосування для розділення байтів двубайтового числа

Синтаксис:Var = HIGH(s) Var = LOW(s)

Var – імя байтовой змінної результату S – імя двобайтового змінної

Приклад:Dim I As Integer , Z As Byte I = &ampH1001

Z = High (I) отримали 16

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

HIHGW – повертає два старших байта чотирьохбайтового змінної

LOWW – повертає два молодших байта чотирьохбайтового змінної

Синтаксис:Var = LOWW( s ) var = HIGHW( s )

var – змінна, яка примать значення двох байт з чотирьох наявних у змінній S

S – джерело даних

Приклад:Dim L As Integer , Z As Long L = &ampH101001

Z = LowW(L)       ‘Z = 1001h Z = HighW(L)      ‘Z = 0010h

Дія:I2CRECEIVE – прийняти дані з пристрою I2C I2CSEND – послати дані в пристрій I2C

Це готові процедури, більше придатні для роботи з простими пристроями, адресованими одним байтом Для більш складних пристроїв протокол обміну необхідно формувати з

допомогою операторів: I2CSTART, I2CSTOP, I2CRBYTE, I2CWBYTE

Синтаксис:I2CRECEIVE slave, var

I2CRECEIVE slave, var ,b2W, b2R

2CSEND slave, var

I2CSEND slave, var , bytes

Slave – адреса I2C записаний в зміною типу byte, Word / Integer або у вигляді константи

Var – мінлива, куди будуть поміщені лічені дані з пристрою I2C

b2W – число записуваних байт Не ставити дуже багато

b2R – число зчитувальних байт Також не задавати дуже багато

Bytes – число байт для передачі

Приклад:x = 0                             ‘reset variable

slave = & H40 адреса розширювача PCF8574

I2CRECEIVE slave, x вважали його порт

PRINT x подивилися

‘————

Dim buf (10) as String 10-місний буфер

buf (1) = 1: buf (2) = 2 2 осередку иниц I2CRECEIVE slave, buf (), 2, 1 запишемо з і счит Одну Print buf (1) подивимося, що вважали

‘———— x = 5

I2CSEND slave, x запишемо 5 ————

Dim ax(10) As Byte For a = 1 to 10

ax (a) = a заповнимо простір від 1 до 10

Next

Bytes = 10 ? – Резерв змінна BASCOM I2CSEND slave, ax (), bytes запишемо 10 байт

Дія:I2CSTART – генерувати умови старту

I2CSTOP – генерувати стоп-умови для закінчення сесії обміну

I2CRBYTE – прийняти один байт з I2C-пристрої

I2CWBYTE – послати байт в I2C-пристрій

Синтаксис:I2CSTART I2CSTOP

I2CRBYTE var, 8/9

I2CWBYTE val

Var – мінлива-приймач даних I2C-пристрої 8/9 – опція типу зчитування 8 – (ACK), коли зчитується не останній байт, тобто зчитування ще триватиме 9 – (NACK), якщо це останній байт прочитуваної послідовності Val – мінлива-джерело даних або константа Функції запису та зчитування працюють через акумулятор, тому для економії змінних його можна використовувати як джерело і приймач даних

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

*

*