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

визначають частоту переповнення)

Синтаксис:LOAD TIMER , value

TIMER – імя одного з таймерів: TIMER0, TIMER1 або TIMER2

Value – змінна або константа Встановлюване значення визначає інтервал часу (в режимі ON TIMERx і MODE 2), після закінчення якого настане переривання Діапазон значень – від 1 до 255 для TIMER0, TIMER1 і від 1 до 65535 для TIMER2 Директива LOAD коригує завантажуване значення: TLx = THx = (256 – value) – увага записує однакові значення RCAP2L, RCAP2H = (65536 – value) Для завантаження безпосередньо задаваемого значення (без коригування) застосовувати оператор COUNTERx

Приклад:LOAD TIMER0, 100 завантажити 100

Буде згенеровано код: Mov tl0, # h9C

Mov th0,#h’9C

LOAD TIMER2, 1000

Буде згенеровано код: Mov RCAP2L, # 24

Mov RCAP2H,#252

Дія:LOOKUP – повертає числове значення, лічену з таблиці

LOOKUPSTR – повертає рядок з таблиці, що містить строкові дані (різної довжини)

Синтаксис:Var = LOOKUP(value , label)

Var = LOOKUPSTR(value , label)

Var – імя зміною, в яку поміщається значення з таблиці Типи змінних var: Byte, Integer, Word, Long, Single

Value – імя змінної, що містить індекс (зміщення по таблиці) Перший елемент має індекс (базу) = 0 (без зсуву) Всі елементи таблиці повинні бути однакового розміру І відповідати типу приймаючої змінної Інакше відбудеться помилка – порушення синхронізації BASCOM не перевіряє це відповідність Для функції LOOKUPSTR кількість рядків у таблиці не повинно перевищувати 256, а довжина самих строкових констант може бути різною Типи змінних: value: Byte, Integer, Word, Long, Constant

Label – мітка початку таблиці (адреса)

Приклад:DIM b1 As Byte , I as Integer

b1 = Lookup (1, dta) b1 = 2 – перший елемент 0-й

I = Lookup(0,DTA2)             ‘I=1000

Dim s as string, idx as Byte

Idx = 0 : s = LookupStr(idx,Sdata)

Print s                        ‘S=»This»

DTA:

Data 1,2,3,4,5

DTA2:       ‘integer data Data 1000% , 2000%

Sdata:

Data «This» , is» , «a test»

Дія:Перетворити змінну двійкову (з числом, записаним у двійковому вигляді) в змінну в двійковій-десятковому форматі

Синтаксис:Var1 = Makebdc (var2) Var1 – мінлива, що приймає двійковій-десяткове значення

(Типу Byte, Word, Integer, Long або Constant) Var2 – змінна, що містить двійкове значення

Приклад:Arb = Makebdc (arb) 10h, 21h, 40h перет в 16h, 33h, 64h

Дія:Перетворити змінну, виражену в двійковій-десятковому вигляді, в двійкове число

Синтаксис:Var1 = Makedec (var2) var1 – змінна, що приймає двійкове значення Var2 –

змінна, содержацая двоічнодесятічное значення (тільки типу Byte, Word або Integer)

Приклад:Arb = Makedec (arb) 10h, 21h, 40h перет в 0ah, 15h, 2ah

Дія:Скомпонувати з двох байтів слово (word або integer)

Синтаксис:Varn = MAKEINT (LSB, MSB) Varn – беззнаковий результат LSB – імя байтовой змінної або константи, що поміщається в молодші розряди MSB – імя байтовой змінної або константи, що поміщається в старші розряду результату Математичний еквівалент операції: varn = (256 * MSB) + LSB

Приклад:Dim a As Integer , I As Integer

a = 2 : I = Makeint(a , 1) ‘I = (1 * 256) + 2  = 258

Дія:MAX () – вибирає з зазначеного масиву найбільше значення

MIN () – вибирає з зазначеного масиву наменьшее значення Поки ця функції працюють тільки з масивами байтових змінних

Синтаксис:var = MAX( ar(1) ) var = MIN( ar(1) )

var – змінна, що приймає запитувана значення ar (1) – імя масиву (в дужках завжди вказується одиниця)

Приклад:Dim ar(10) As Byte Dim Bp as Byte

For Bp = 1 to 10 ar(Bp) = Bp

Next

Bp = Max (ar (1)): Print Bp віддрукується 10

Bp = Min (ar (1)): Print Bp віддрукується 1

End

Дія:Функція повертає залишок від ділення двох змінних

Синтаксис:ret = var1 MOD var2 ret – змінна, що приймає значення залишку var1 – змінна-ділене (variable to divide) var2 – мінлива-дільник (The divisor) Працює з змінними типу Byte, Word, Integer, Long

Приклад:a = 10 MOD 3 ‘10/3

PRINT a     ‘a=1

Дія:MWINIT – встановити висновки, призначені для інтерфейсу Microwire в початковий стан

MWREAD – вважати в змінну значення з інтерфейсу Microwire

MWWRITE – записати значення змінної в інтерфейс Microwire

MWWOPCODE – записати код операції в пристрій з інтерфейсом Microwire

Синтаксис:MWINIT

MWREAD variable , opcode , address, bytes MWWRITE variable , opcode , address, bytes MWWOPCODE  opcode , bits

Variable – змінна, що приймає лічену значення Opcode – код операції Може включати в себе і додаткові біти операцій У операторі MWWOPCODE включає і фіктивні біти адреси (див Приклади і опис мікросхем) Address – адреса на шині Може здаватися змінної типу Byte або Word . Bytes – число пересилаються байт Залежить від обраної довжини даних (1 або 2) Bits – сумарне число посилаються біт (визначається типом мікросхеми і довжиною даних)

Приклад 1:Dim Dta As Byte, Adr As Byte визначимо змінні

‘Використовувати EEPROM 93C46 (Org = 0), пересилати байти (AL = 7)

Config Microwire=Pin, Cs=P11, Din=P12, Dout= P14, Clock=P15, Al=7

Mwinit ініціалізувати лінії

‘Дозволити запис в EEPROM і стирання

‘Требуется включити в код операції, записаний у двійковому вигляді:

‘Старт-біт (1), код операції (00) і (11) + адресу (будь-який, зазвичай 0) Mwwopcode & B1001100000, 10 також додамо число, що вийшло біт Dta = 10: Adr = 8 значення даних та адреси

Mwwopcode & B1001000000, 10 проведемо загальне стирання

‘Запишемо значення з Dta в осередок EEPROM за адресою, вказаною Adr код операції: старт біт 1 + (01) Число байт: (1)

Mwwrite Dta , &ampB101 , Adr , 1

‘Якщо далі незабаром послідує операція на шині Micriwire обовязково чекаємо завершення запису 2 – 5 мс, тк компілятор не чекає появи апаратного сигналу готовності

Waitms 10 : Dta = 0

‘Вважати назад

‘Код операції: старт біт 1 + (10) Число байт: (1) Mwread Dta, & B110, Adr, 1

‘Заборонити запис і стирання

‘Старт-біт (1), код операції (00) і (00) + адресу (будь-який, зазвичай 0)

Mwwopcode &ampB1000000000 , 10

End

Приклад 2:Аналогічний приклад для 16-розрядних даних

Dim Dta As Word, Adr As Byte визначимо змінні

‘Використовувати EEPROM 93C46 (Org = 1), пересилати слова (AL = 6)

Config Microwire=Pin, Cs=P11, Din=P12, Dout= P14, Clock=P15, Al=6

Mwinit ініціалізувати лінії

‘Дозволити запис в EEPROM і стирання

‘Требуется включити в код операції, записаний у двійковому вигляді: Mwwopcode & B100110000, 9 також додамо число, що вийшло біт Dta = & h1000: Adr = 8 значення даних та адреси

Mwwopcode & B100100000, 9 проведемо загальне стирання

‘Запишемо значення з Dta в осередок EEPROM за адресою, вказаною Adr код операції: старт біт 1 + (01) Число байт: (2)

Mwwrite Dta , &ampB101 , Adr , 2

Waitms 10 : Dta = 0

‘Код операції: старт біт 1 + (10) Число байт: (2) Mwread Dta, & B110, Adr, 2 вважати назад

‘Заборонити запис і стирання

Mwwopcode &ampB100000000 , 9

End

Дія:Опція NOSAVE директиви ON Interrupt забороняє компілятору автоматично включати в програму блоки збереження і відновлення регістрів на час обробки переривання Необхідність цієї опції очевидна, тк при її відсутності BASCOM виробляє збереження в стеці регістрів з адресами від 0 до 11h, Acc, B, PSW, DPL і DPH (всього 21 регістр) Тобто вважається, що при обробці переривань можна застосовувати всі команди BASCOM (або майже все) Це не тільки нераціонально, але іноді і неприпустимо, наприклад, при наявності вкладених переривань Існують два способи вирішення цієї проблеми: а) за допомогою дисассемблер визначити регістри, дійсно використовуються при обробці кожного переривання, та забезпечити їх збереження «вручну», застосувавши асемблерні команди Push і Pop б) написати процедуру обробки переривання на асемблері

Приклад:Config Timer0 = Timer, Gate = Internal, Mode = 1: Start Timer0 призначення режимів переривань

On Timer0 Timer_0_int Nosave вектор переривання

Enable Interrupts взагалі дозволити переривання Enable Timer0 дозволити переривання таймера 0 ———————————— ——

‘Обробка переривання таймера 0

Timer_0_int:

Counter0 = & HD8FD D8fdh – період прерів 10 мс

$asm

Intt1:

Intt2: Intt3:

Intte:

$end Asm

Push Psw обробка інтегратора термодатчика

Push Acc зберегти використовувані регістри

Jb {B_ctmp}, Intt2 є перегрів

Mov A, {R_ot} так – датчик температури спрацював Cjne A, # {Cit}, Intt1 інтегратор досяг максимуму Sjmp Intte так – просто вийти

Inc A ні – наростити знач Інтегратора Cjne A, # {cit}, Intt3 він зараз досяг максимуму Setb {b_ot} так – поставити битий «Перегрів»

Sjmp Intt3

Mov A, {R_ot} перегріву немає

Jz Intte інтегратор пустий

Dec A, не порожній – зменшити значення

Mov {R_ot}, A змінився – сохр Нове значення

Pop Acc відновити регістри

Pop Psw

Reti

Дія:Запускати підпрограму, коли трапляється вказане переривання При компіляції директива ON Interrupt проводиться призначення переривання – записується команда переходу на програму обробки (вектор переривання) на місце на початку програми, що відповідає типу переривання

Синтаксис:ON interrupt label [NOSAVE]

Interrupt – імя переривання: INT0, INT1, SERIAL, TIMER0, TIMER1, TIMER2 або PCA

Вибір використовуваного переривання визначається конфігурацією системи і моделлю процесора

Список використовуваних переривань може бути розширений

Label – мітка початку програми обробки переривання, куди повинен відбуватися перехід,

якщо трапилося відповідне переривання

NOSAVE – необовязкова опція Вона забороняє компілятору включати в програму блоки збереження і відновлення регістрів на час обробки переривання Програма обробки переривання повинна завершуватися тільки однією командою RETURN, тк компілятор генерує код команди RETI тільки один раз Коли ви використовуєте входи INT0 або INT1 ви повинні вказати і умови виникнення цих переривань, установкою або скиданням відповідних бітів:

SET TCON0 INT0 запускається падаючим фронтом

RESET TCON0 INT0 низьким рівнем

SET TCON2 INT1 запускається падаючим фронтом

RESET TCON2 INT1 низьким рівнем

Приклад:ENABLE INTERRUPTS дозволити всі переривання

ENABLE INT0 дозволити переривання INT0

ON INT0 Label2 обробка починається з label2

SET TCON0 INT0 запускати падаючим фронтом

DO порожній цикл

LOOP

END

Label2: PRINT «An hardware interrupt occurred» Друкувати це

RETURN

Дія:Перейти до однієї з послідовних міток, залежно від значення змінної Можливі варіанти: простого переходу (GOTO) або виклику підпрограми (GOSUB) В останньому випадку, відбувається повернення до наступного оператору – його адресу запамятовується в стеку

Синтаксис:ON var [GOTO] [GOSUB] label1 [, label2] Var – числова змінна або навіть регістр SFR, наприклад порт P1 Label1, label2 – мітки, до яких відбувається перехід База перший мітки дорівнює нулю

Приклад:X = 2 змінна без знака

ON x GOSUB lbl1, lbl2, lbl3 вибір п / п lbl3

X = 0

ON x GOTO lbl4, lbl5 перехід на мітку lbl4

END

Lbl1: PRINT « lbl1» : RETURN

Lbl2: PRINT « lbl2» : RETURN

lbl3: PRINT « lbl3» : RETURN Lbl4: PRINT « lbl4» : STOP Lbl5: PRINT « lbl5» : STOP

Дія:Відкрити і закрити пристрій (канал) введення або виведення

Синтаксис:OPEN  «device,[Inverted]»  for Mode As #channel CLOSE #channel

Device – імя порту Для апаратних портів передбачені імена: COM1 (стандартний) і COM2 (тільки для моделей з 80517 або 80537 з другим UART) Програмні порти повинні специфікувати по імені і швидкості, наприклад, COM30: 9600 (лінія P30 при 9600 бод) Mode – режим Можна використовувати опції BINARY (двонаправлений), INPUT (тільки на введення) або OUTPUT (тільки на висновок) для COM1 і COM2 Для програмних портів можна призначати тільки опції INPUT або OUTPUT Опція Inverted застосовується тільки для програмних портів, коли необхідно компенсувати інверсію драйвера

Channel – номер відкритого каналу (тільки позитивне число) Кожен відкритий канал повинен бути закритий за допомогою команди CLOSE # channel Апаратні порти підтримують використання команд PRINT, PRINTHEX, INPUT і NPUTHEX Програмні порти можуть працювати тільки з операторами GET і PUT (в 1-й версії компілятора) для прийому і посилки даних

GET # channel, var і PUT # channel, var – записати дані з каналу в змінну і відповідно помістити в канал дані з змінної Швидше за все, переміщати можна тільки байтові дані, принаймні, через програмні порти

Приклад 1:Застосування апаратного порту

CONFIG BAUD = 9600 визначимо швидкість

OPEN «COM1:» FOR BINARY AS # 1 відкриємо канал

PRINT # 1, «Hello» послати як в канал 1

PRINT «Hello» послати як зазвичай

CLOSE # 1 закрити канал

Приклад 2:Застосування програмного порту Працює з будь-яким висновком

‘Програмний порт іменується по імені лінії порту

‘Для P30 буде «COM30:» (P упускається)

‘Також повинна вказуватися бодовом швидкість Для 9600 baud імя пристрою буде «COM30: 9600»

‘Щоб посилати дані вказує режим OUTPUT

‘Щоб приймати вказуємо INPUT можна використовувати тільки PUT і GET PRINT в даній версії не підтримується

‘Лінії взяті p30 ​​і p31, щоб було зручно контролювати

‘Як працюють програмні порти

Dim A As Byte , S As String * 16 , I As Byte , Dum As Byte Open «com31:9600» For Output As #1

Open «com30:9600» For Input As #2

S = «test this» призначити рядок

Dum = Len (s) обчислимо її довжину

For I = 1 To Dum перерахуємо всі символи зліва направо

‘Беремо черговий символ

‘Запишемо його в com-порт

Next Do

Get # 2, A возмем символ з com-порту

Put # 1, A запишемо назад

Print A використовуємо нормальний канал

Loop

Close # 1 закриємо порти

Close #2

End

Приклад 2:Open com12: 9600, Inverted For Input As # 1 порт p12 з інверсією

Print # 1, «Hello» послати як в канал 1

Close # 1 закриємо порт

Дія:Повертає значення змінної (байтовой), розташованої у внутрішній памяті

Синтаксис:var = PEEK (address) var – імя змінної, що приймає прочитуване значення

Address – числова змінна або константа з адресою зчитувальних даних в діапазоні від 0

до 255

Приклад:DIM a As Byte

a = Peek (0) вважати значення R0

Дія:Записати байт в осередок внутрішньої памяті

Синтаксис:POKE address, value Address – адреса запису Числова змінна або константа в діапазоні від 0 до 255 Value – записуване значення (0-255) Будьте уважні з POKE тому, що можете змінити змінні, які потрібні програмі для правильної роботи Маються на увазі, в першу чергу, не явно використовувані регістри BASCOM Для цієї команди вони особливо легко доступні

Приклад:POKE 127, 1 записати 1 за адресою 127

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

Приклад:P0 = 0 : P1 = 0 : P2 = 0 : P3 = 0 : POWERDOWN

Дія:Послати дані у вигляді текстового рядка в послідовний інтерфейс (RS-232 port) PRINT – перетворить всі види числових даних в десятковий вигляд При виведенні негативних значень перед друкували числом ставить знак мінус («-») PRINTHEX – виводить числові дані в шістнадцятковому вигляді (HEX – коді) Для роботи цих функцій в системі повинен бути матися і бути налаштований послідовний інтерфейс Якщо цього не зробити, компілятор справить їх сам, скориставшись параметрами меню Options.

Синтаксис:PRINT var «constant» PRINTHEX var

Var – імя змінної або константи або безпосередні дані, які будуть виводитися в послідовний порт Числові змінні при виведенні перетворюються в легкий для читання текстовий вигляд В одному рядку, розділяючи крапкою з комою («») можна виводити декілька змінних або констант, абсолютно різного типу Оператор PRINTHEX може виводити дані змінних тільки типу: Byte, Word, Integer, Long Виведені дані завершуються роздільником (ВК, ПС) Застосування оператора PRINT без параметрів викликає висновок тільки одного роздільник (ВК, ПС)

Приклад:Dim A As Byte , B1 As Byte , C As Integer A = 1

Print «print variable a=» A

Print порожній рядок

Print «Text to print» Друк текстової константи

B1 = 10: Printhex B1 друк в шістнадцятковому вигляді

C = & HA000: Printhex C аналогічно в HEX-форматі

Print C а тепер в десятковому вигляді

C = -32000

Print C виведеться -32000

Printhex C виведеться 8300

Дія:Послати дані в послідовний порт, що містяться в змінних, без перетворення в текст і без символів роздільник рядків (0Dh, 0Ah) PRINTBIN майже еквівалент оператора PRINT CHR (var), але з тією відмінністю, що може виводити індексовані змінні (з масивів)

Синтаксис:PRINTBIN var [, varn] Var – імя змінної, дані якої будуть передаватися Varn – можна посилати кілька змінних в одному рядку Кількість посилаються байт визначається довжиною змінної В одному рядку, розділяючи комою («,»), можна виводити декілька змінних

Приклад:Dim a (10) as Byte, c as Byte це найважливіший приклад

For c = 1 To 10

A (с) = с заповнимо масив

Next

PRINTBIN a (1) пошлемо перший елемент масиву

Дія:Встановити або зняти вищий рівень пріоритету переривання Застосовується в тих випадку, коли потрібно змінити природний або встановлений раніше порядок пріоритетів Вихідний порядок пріоритетів: INT0 – 1 (найвищий) TIMER0 – 2 INT1 – 3 TIMER1

– 4 PCA – 5 SERIAL – 6 TIMER2 – 7 (найнижчий) Сенс пріоритетів у тому, що переривання більш високого рівня може перервати виконання переривання нижчого рівня Переривання найвищого рівня (пріоритет встановлений) не може бути перервано іншим перериванням і забезпечує найвищу швидкість реакції на подія, яка викликала його

Фактично, ця команда встановлює і скидає біти в регістри IP

Синтаксис:PRIORITY SET / RESET interrupt SET – встановити пріоритет вище

RESET – скинути (скасувати) вищий рівень пріоритету

Interrupt – переривання, з яким проводиться операція Це може бути: INT0, INT1, SERIAL, TIMER0, TIMER1 and TIMER2

Приклад:PRIORITY SET SERIAL остан порт – найвищий рівень

Дія:RESTORE дозволяє оператору READ прочитати значення, оголошене як безпосередні дані (оператором DATA) По суті, оператор RESTORE встановлює покажчик зчитувальних даних READ записує у вказану змінну значення константи, що визначене оператором RESTORE При повторному використанні оператора READ зчитується наступна константа, тобто відбувається послідовний доступ до безпосередніх даними Для довільного доступу до даних (як до таблиці) слід застосовувати досконаліший оператор LOOKUP

Синтаксис:READ var

var – змінна, що приймає дані Важливо, щоб змінна і тип даних були

однаковими

RESTORE label

Label – мітка блоку DATA, яка використовуватиметься подальшим оператором READ

Приклад:Dim a As Byte, I As Integer Restore Dta1

For a = 1 TO 3

Read a : Print a Next

Restore Dta2 : Read I : Print I : Read I : Print I End

Dta1: Data 5, 10, 100

Dta2: Data -1%, 1000% Integers з% (Integer: <0 або> 255)

Дія:Початок рядки коментарів Текст у рядку коментаря пропускається компілятором

Не рекомендується застосування третього способу створення багаторядкових коментарів –

‘(Це коментарі)

Дія:Замінити в сроковой змінної один символ іншим

Синтаксис:REPLACESET String, Old, New String – імя оброблюваної змінної Old – строкова або байтовая константа, яка вказує на замінний символ New-строкова або байтовая константа, яка вказує на замінюючий символ

Приклад:Dim S1 as String S1 = “123456”

Replace S1 , “” , “,”

Print S1 отримаємо 123,456

Дія:Reset – скинути (записати «0») і Set – встановити (записати «1») бітову змінну Оператор працює як з битово адресованими регістрами і портами, так і битами одно-, двох-і чотирьохбайтового змінних у внутрішній памяті

Синтаксис:RESET bit, RESET varx, SET bit, SET varx Bit – імя фізичної біта або змінної в бітової області процесора X – константа – місце біта в байті (x = 0-7), в слові (x = 0-15) або подвійному слові (x = 0-31) Var – імя змінної, в якій знаходиться змінюваний біт Типи змінних: Byte, Integer, Word і Long

Приклад:Dim b1 as bit, b2 as byte, I as Integer RESET P13 скидання біта 3 порту 1

RESET b1 битовая мінлива

RESET b20 скидання біта 0 байтовой змінної b2

RESET I15 скидання MS (старшого) біта I

Дія:Повернення з підпрограми (компілюється як RET) або з підпрограми обробки переривання (компілюється RETI) В останньому випадку компілятор сам замінює RET на RETI Причому команда RETI встановлюється тільки один раз замість першого оператора Return, зустрінутого після мітки виклику даної підпрограми Якщо у програми обробки переривань кілька виходів, то всі наступні повинні оформлятися ассемблерной вставкою з командою RETI І навпаки, якщо підпрограма переривання написана на асемблері, то вона повинна завершуватися, хоча б одним оператором RETURN

Синтаксис:RETURN

Приклад:GOSUB Pr викликати підпрограму

PRINT result щось друкувати END кінець програми Pr: підпрограма

result = 5 * y: result = result + 100 робити що-небудь

RETURN повернення з підпрограми

Дія:Повертає випадкове число

Синтаксис:Var = RND (Lim) Var – імя змінної типу Word, приймаючої результат

Lim – максимальне число, яке може приймати випадкове значення змінної

Приклад:Dim Ar As Word Do

Ar = Rnd(1000) : Print Br Loop

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

Синтаксис:ROTATE var, LEFT / RIGHT [, Shifts] Var – імя преобразуемой змінної типу Byte, Integer / Word or Long Shifts – число зрушень, яке потрібно провести Чудово, що значення прапора С (carry) приймає старший або молодший біт зсувається змінної Тобто ROTATE працює також як команди RLC і RRC Коли ця можливість не потрібно, очищайте С (carry) перед зрушенням командою CLR C

Приклад:Dim a as Byte

a = 128 : ROTATE a, LEFT , 2 : Print a ‘1

; Генерований код

Mov R7, # 2 число зрушень

Mov R0, # h21 адресу зрушуваної змінної

Mov a,@r0

M1:   Rlc a

Djnz r7,M1

Mov @r0,a

Дія:Завантаження значення, що визначає тривалість генерованого імпульсу в 100 мкс Період повторення імпульсів 20 мс, тобто з частотою 50 Гц

Синтаксис:ServoX = NN

X – номер виходу від 1 до 16 NN – число, рівне тривалості генеруючих імпульсів

Приклад:Servo1 = 8   800 uS Servo2 = 12  1200 uS

Дія:Побітно висновок або введення даних для запису в зсувний регістр або для зчитування з зсувного регістру

Синтаксис:SHIFTIN pin , pclock , var , option [PRE} SHIFTOUT pin , pclock , var , option

Pin – імя порту, використовуваного для введення або виведення даних

Pclock – імя порту, використовуваного для генерації сигналу синхронізації

Var – приймач або джерело зсуваються даних

Option – додатковий параметр (режим) Може мати такі значення:

0 – старший біт змінної висувається першому і використовується позитивна полярність

імпульсів синхронізації (0 – 1 – 0)

1 – Старший біт першого при негативних імпульсах синхронізації (1 – 0 – 1)

2 – Молодший біт висувається першому при позитивних імпульсах (0 – 1 – 0)

3 – Молодший біт першого при негативних імпульсах синхронізації (1 – 0 – 1)

Для SHIFTIN ви можете використовувати також параметри 4 – 7 при використанні зовнішнього сигналу синхронізації зсуву, відповідні фазам зчитування режимів 0 – 3 . Довжина змінної визначає кількість зсуваються біт

PRE – ще один додатковий параметр, який вказує на необхідність зчитування

стану порту даних перед імпульсом синхронізації (застосовне в режимах 0 – 3)

Можна працювати зі змінними типу Byte, Word, Integer або Long

Приклад:Dim Temp as byte, R_bd As Long підключення синтезатора

B_data Alias P15 : B_clk Alias P13

B_fqud Alias P14 : B_res Alias P17 ‘———————

‘Підпрограма завантаження даних в синтезатор

Sload_9850:

Set B_fqud: Reset B_fqud скинути інтерфейс

Set B_clk: Reset B_clk заклацнути код остан режиму

Set B_fqud: Reset B_fqud дозволити остан режим

‘Висунути дані з R_bd в режимі 3 (мол спочатку, /\)

Shiftout B_data, B_clk, R_bd, 3 висунути останній байт з режимом і фазою

Temp = 0 : Shiftout B_data , B_clk , Temp , 3

Set B_fqud: Reset B_fqud виконувати заруженние дані

Return

Дія:Послати імпульси в порт Можна для генерації звуків, якщо якимось чином підключити до порту гучномовець

Синтаксис:SOUND pin, duration, frequency [, NOINT] Pin – імя будь-якого порту вводу-виводу

Duration – число посилаються імпульсів (по суті, це тривалість) Може бути задано імя змінної типу: Byte, integer, word або константа Діапазон задаються значень від 1 до 32768 Frequency – час в мікросекундах, в перебігу якого висновок знаходиться в низькому і високому рівні

NOINT – необовязкова опція При її застосуванні на час генерації звуку забороняються переривання і звук виходить чистим

SOUND P11 , 10000, 10 ‘BEEP

Дія:Space () – повертає рядок, заповнену пробілами

String () – повертає рядок, заповнену однаковими символами

Spc () – вставляється в оператори Print або Lcd для виведення Дада числа прогалин

Головне достоїнство цих функції перед рядком A = «» або A = «11111» в тому, що вони працюю набагато швидше, компактніші, дають можливість у процесі роботи гнучко змінювати число прогалин, задаючи його за допомогою змінної Застосовуються при

форматуванні виведених даних

Синтаксис:var = SPACE (x) x – число пробілів Число прогалин може бути задане константою і змінної Var – строкова змінна Використання значення x = 0 приведе до появи рядка з 255 байт

var = STRING (m, n) m – число записуваних символів n – код символу (десятковий)

SPC (x) x – число виведених прогалин

Приклад:Dim s as XRAM String * 15, z as XRAM String * 15

S = Space (5) пять прогалин

S = String (5,65) пять символів A S = 123

Print S Spc (3) S отримаємо 123 123 Lcd {; S Spc (2) } Отримаємо {123}

Acall _sStr_String —- Бібліотечна підпрограма —–

_sStr_String: Mov @r1 , a Inc r1

Djnz r2 ,_sStr_String Clr a

Mov @r1 , a Ret

Дія:Вважати значення змінної з SPI-шини (пристрої) або надіслати вміст змінної в

SPI-шину (пристрій) Інтерфейс програмний

Синтаксис:SPIIN  var, bytes SPIOUT var , bytes

Var – змінна, що містить дані для посилки або приймаюча дані

Bytes – число байт обміну

Приклад:Dim a(10) as Byte , X As Byte

CONFIG SPI=SOFT , DIN=P10 , DOUT=P11 , CS=P12 , CLK=P13

SPIIN a (1), 4 вважати 4 байта SPIOUT a (1), 5 послати 5 байтів SPIOUT X, 1 послати байт

End Rem обробка переривання Timer0

Timer_0_int: Inc Count

If Count = 2 Then

Print «Timer0 Interrupt occured» Count = 0

End If Return

Дія:Зупинити виконання програми

Приклад:PRINT var друкувати щось

STOP зупинитися тут

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

Синтаксис:var = Str (x) var – строкова змінна з довжиною, достатньою для запамятовування отриманого рядка X – числова змінна типу: Byte, Integer, Word, Long, Single

Приклад:Dim a as Byte, S as XRAM String * 10

A = 123 : S  = Str(a) : Print S

S = S = + Str (a) можна застосовувати при підсумовуванні

Дія:Визначити підпрограму або процедуру, оформлену як підпрограма Ви повинні оголосити процедуру за допомогою Declare Sub перед її визначенням Імена параметрів і типи вказуються і при оголошенні, і при визначенні самої процедури Певні параметри мають глобальної значення і повинні бути оголошені оператором DIM Сенс такого складного способу визначення процедури – Можливість виклику її з іншими змінними, а й того ж типу, з якими процедура була оголошена У цьому її головне достоїнство і відміну від простої підпрограми

Синтаксис:SUB Name[(var1)]

Тіло процедури, що описують необхідні дії

END SUB

Name – імя процедури, будь нерезервованої слово var1 – імя параметра (змінної,

функціональна залежність, від якої задається) Параметрів може не бути, а може бути заявлено більше (до 10 параметрів) Параметри повинні розділятися комою («,») Оператор Return при описі процедури не застосовується, тому компілятор вставляє його сам Якщо точок виходу кілька, і вони обумовлені якимись параметрами, то для виходу може застосовуватися оператор EXIT SUB

Приклад:Declare Sub Test (a As Byte, B1 As Byte) оголосити процедури

Declare Sub Test2

Declare Sub Test3(cl As Bit) Declare Sub Test4(x As Xram Byte) Declare Sub Test5(a as byte)

Dim A As Byte, B1 As Byte, Cl As Bit обвіла перем

Dim X As Xram Byte , Xa(10) As Xram Byte

B1 = 3: Call Test2 виклик sub без параметрів Call Test (1, B1): Print B1 виклик sub з параметрами Call Test3 (p11) виклик з іншого перем Xa (1) = 1: Call

Test4 Xa(1)

Call test5 (a) виклик з параметром A

Test5 a альтернативна запис з параметром A End

‘Визначення процедур важливо, щоб зазначені тут

‘Змінні були оголошені лише один раз і були глобальними

Sub Test (a As Byte, B1 As Byte) початок sub

Print A «» B1 віддрукувати зустрінуту перем

B1 = 3

End Sub

Sub Test2 sub без параметрів * Print «No parameters»

End Sub

Sub Test3 (bl As Bit) bit як параметр

Print Bl

End Sub

Sub Test4 (x As Xram Byte) з параметром у зовнішній памяті

Print X End Sub

SUB Test5 (b1 as byte) використовуємо таку ж, за розміром,

‘Що й оголошена

LCD b1: LCD BCD (b1) щось индицировать на LCD End SUB

Дія:Поміняти місцями значення двох змінних одного типу З індексованими змінними цей оператор не працює

Синтаксис:SWAP var1, var2 var1 і var2 – змінні типу: bit, byte, integer / word

Приклад:Dim a as integer,b1 as integer

a = 1 : b1 = 2 ‘assign two integers SWAP a , b1    ‘swap them

Дія:Перетворити рядок, що містить числове значення в числову змінну (число)

Синтаксис:var = Val( s )

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

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

s = «123»: a = Val (s) перетворити

Print a виведеться 123

Дія:Функція повертає адресу змінної, розташованої у внутрішній памяті (0-255) Дуже зручна функція для установки значення індексних регістрів (покажчиків)

Синтаксис:var = VARPTR( var2 )

var – змінна, яка приймає значення адреси var2

var2 – мінлива, адреса якої запитується

Приклад:Dim I As Integer , B1 As Byte B1 = Varptr(I)

Генерований код:

Mov h23, # h21 23h – мінлива b1, 21h – мінлива I

Дія:Конструкція у вигляді циклу, що виконується, поки деякі умови виконуються Як тільки задана умова порушується, то виконується оператор (дія) наступний за оператором WEND Дана конструкція циклу обратна конструкції сила DO .. LOOP UNTIL

Синтаксис:WHILE condition Condition – умови повторення циклу

WHILE a <= 10 'цикл буде повторюватися, поки a не досягне 11

PRINT a : INC a WEND

Дія:CONFIG WATCHDOG – встановити час спрацьовування будильника START WATCHDOG – включити будильник (почати вартувати систему) STOP WATCHDOG – вимкнути будильник (закінчити вартувати) RESET WATCHDOG – запустити будильник спочатку

Синтаксис:Config Watchdog =   Time

Time – час у мс з ряду: 16, 32, 64, 128, 256, 512, 1024 і 2048

START WATCHDOG STOP WATCHDOG RESET WATCHDOG

Приклад:Config Watchdog = 2048 скинути після 2048 мс

Start Watchdog включити

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

*

*