Перетворення строкових змінних BASCOM-8051

Рядкові змінні можуть бути змінені на інші рядкові змінні – довгі розбиратися на частини і, навпаки, з коротких рядків можуть складатися довгі Bascom забезпечує перетворення чисел, записаних в строкових змінних, в числа і перетворення чисел в рядкові змінні Причому числа можуть бути записані у вигляді десяткових або шістнадцяткових цифр (символів) У наступній таблиці показане розташування байтів строкової змінної в памяті після її очищення (нулями) У першому випадку в змінну довжиною N записано символами число «1234» У другому випадку на його місце записано повідомлення

«AF»

Розташування в памяті строкової змінної, визначеної як: Dim S As String * N

Adr

Adr+1

Adr+2

Adr+3

Adr+4

Adr+N

Adr+N+1

30H

31H

32H

33H

00H

00H

00H

00H

41H

46H

00H

33H

00H

00H

00H

00H

Перетворення рядків може виконуватися в явному і неявному вигляді Приклади явного перетворення:

а) поділ рядків за допомогою операторів MID (), LEFT (), RIGHT ()

б) злиття підсумовуванням рядків (..” + ..”)

в) монтаж рядків за допомогою оператора MID ()

г) перетворення рядка в число за допомогою функцій VAL (), HEXVAL ()

д) перетворення числа в рядок за допомогою функцій STR (), HEX (), CHR ()

Неявне перетворення строкових змінних відбувається при введенні (оператором типу INPUT) і виведенні (оператором PRINT) цифрових змінних Нижче дана демонстраційна програма, що показує основні способи перетворення строкових змінних Подібні приклади є і в інших програмах,

наведених вище

‘——————————-

Dim R_rd As Integer код для ЦАП

Dim R_frq As Single частота для синтезатора

Dim R_lin As String * 6 введений рядок Dim R_tmp As String * 20 тимчасова рядок Mc:

Input &quotInput six characters&quot , R_lin

‘В R_lin прийнята рядок: + XXXXX, -XXXXX, HXXXXX або R R_tmp = Left (r_lin, 1) виділимо перший символ для аналізу

If R_tmp = + Then позитивна полярність

R_tmp = Mid (r_lin, 2, 5) виділимо тільки числове значення

R_rd = Val (r_tmp) перетворити в ціле число

Goto Mc рядок оброблена – в головний цикл

End If

If R_tmp = – Then негативна полярність

R_rd = Val (r_lin) перетворимо рядок з полярністю

Goto Mc рядок оброблена – в головний цикл

End If

If R_tmp = H Then частота в Герцах

R_tmp = Mid (r_lin, 2, 5) виділимо числове значення

R_frq = Val (r_tmp) перетворити в число з плав точкою

R_frq = R_frq * 0001 перетворити в кілогерц

Goto Mc рядок оброблена – в головний цикл

End If

If R_tmp = R Then повернути значення

Print H R_frq D R_rd передамо рядок стану

‘Чи інакше

R_tmp = H + Str (r_frq) + D + Str (r_rd) сформуємо рядок стану

Print R_tmp передамо готову рядок

Goto Mc рядок оброблена – в головний цикл

End If

Goto Mc в головний цикл

‘——————————-

У новій версії додано два нових оператора LCASE і UCASE, здійснюють перетворення букв

строкових змінних Перший оператор зменшує розмір букв (робить всі букви малими), а другий навпаки, робить всі букви великими (прописними) Чудово, що ці оператори не просто додають або

віднімають з коду символу число 20h, а вибирають символи, які є латинськими буквами Таким чином цифри та інші службові символів не перетворюються і залишаються незмінними

Ще одним важливим додавання у версії 120 є функція INSTR (), за допомогою якої стало можливим виробляти пошук значення одного рядка в складі іншого рядка У результаті роботи цієї функції повертається номер позиції, який вказує на початок шуканого фрагмента Якщо фрагмент не знайдений, то

повертається нульове значення Практична цінність цієї функції полягає в можливості застосування

складних рядків у протоколах обміну між процесорами, тобто стало можливим застосовувати команди змінного складу або виробляє накопичення декількох команд без обробки Нижче дається приклад застосування нових функцій

‘———————————————- Демонстрація декодування складних команд

‘———————————————-

‘Програма запитує рядок (командою r, яка

‘Може містити одну або декілька команд:

‘Axx – встановити параметр з двозначним числом

‘Bxxxx – встановити параметр з чотиризначним числом

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

‘Наприклад: A12B1234C00123456, A30, c00004055 або a05b0010 Dim P_a As Byte, P_b As Word, P_c As Long

Dim Tmp1 As Byte , Tmps As String * 10

Dim In_buf As String * 20

‘———————————————-

P_a = 0: P_b = 0: P_c = 0 очистимо змінних параметрів

Do цикл установки параметрів

Input r , In_buf: взяли рядок з командами

In_buf = Ucase (in_buf) переведемо всі символи у верхній регістр

‘Перевіримо наявність першої команди

Tmps = &quotA&quot : Tmp1 = Instr(1 , In_buf , Tmps)

If Tmp1 <> 0 Then якщо вона присутня,

Tmps = Mid (in_buf, Tmp1, 2) виберемо числове значення

P_a = Val (tmps) і перетворимо в число

End If

‘Перевіримо наявність другої команди

Tmps = &quotB&quot : Tmp1 = Instr(1 , In_buf , Tmps)

If Tmp1 <> 0 Then якщо вона присутня, поступимо аналогічно

Tmps = Mid(in_buf , Tmp1 , 4) : P_b = Val(tmps)

End If

‘Аналогічно перевіримо наявність третьої команди

Tmps = &quotC&quot : Tmp1 = Instr(1 , In_buf , Tmps) If Tmp1 &lt&gt 0 Then

Tmps = Mid(in_buf , Tmp1 , 8) : P_c = Val(tmps)

End If

Wait 1 трохи почекаємо і повторимо

Loop

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

*

*