Справочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001). Справочник по программированию bascom8051 Краснодар 2001
Скачать 6.61 Mb.
|
Пример: 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 ============================================================================= 4-33 ===================================== Справочник по программированию «Bascom-8051» == PRINTBIN Действие: Послать данные в последовательный порт, содержащиеся в переменных, без преобразования в текст и без символов разделителя строк (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) ‘пошлем первый элемент массива PRIORITY Действие: Установить или снять высший уровень приоритета прерывания. Применяется в тех случая, когда нужно изменить естественный или установленный ранее порядок приоритетов. Исходный порядок приоритетов: 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 ‘посл. порт - наивысший уровень READ, RESTORE Действие: 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) ============================================================================= 4-34 ===================================== Справочник по программированию «Bascom-8051» == REM или ‘ Действие: Начало строки комментариев. Текст в строке комментария пропускается компилятором. Не рекомендуется применение третьего способа создания многострочных комментариев – ‘( это комментарии ‘). Синтаксис'>REPLACE Действие: Заменить в сроковой переменной один символ другим Синтаксис : REPLACESET String , Old , New String – имя обрабатываемой переменной. Old – строковая или байтовая константа, указывающая на заменяемый символ. New –строковая или байтовая константа, указывающая на заменяющий символ. Пример: Dim S1 as String S1 = “123.456” Replace S1 , “.” , “,” Print S1 ‘получим “123,456” RESET, SET Действие: Reset – сбросить (записать «0») и Set – установить (записать «1») битовую переменную. Оператор работает как с битово адресуемыми регистрами и портами, так и битами одно-, двух- и четырехбайтовых переменных во внутренней памяти. Синтаксис : RESET bit , RESET var.x , SET bit , SET var.x 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 P1.3 ‘сброс бита 3 порта 1 RESET b1 ‘битовая переменная RESET b2.0 ‘сброс бита 0 байтовой переменной b2 RESET I.15 ‘сброс MS (старшего) бита I RETURN Действие: Возврат из подпрограммы (компилируется как RET) или из подпрограммы обработки прерывания (компилируется RETI). В последнем случае компилятор сам заменяет RET на RETI. Причем команда RETI устанавливается только один раз вместо первого оператора Return, встреченного после метки вызова данной подпрограммы. Если у программы обработки прерываний несколько выходов, то все последующие должны оформляться ассемблерной вставкой с командой RETI. И наоборот, если подпрограмма прерывания написана на ассемблере, то она должна завершаться, хотя бы одним оператором RETURN. Синтаксис : RETURN Пример: GOSUB Pr ‘вызвать подпрограмму PRINT result ‘что-то печатать END ‘конец программы Pr: ‘подпрограмма result = 5 * y : result = result + 100 ‘делать что-нибудь RETURN ‘возврат из подпрограммы RND() Действие: Возвращает случайное число Синтаксис : Var = RND(Lim) Var – имя переменной типа Word, принимающей результат. Lim – максимальное число, которое может принимать случайное значение переменной Пример: Dim Ar As Word Do Ar = Rnd(1000) : Print Br Loop ============================================================================= 4-35 ===================================== Справочник по программированию «Bascom-8051» == ROTATE Действие: Сдвиг по кругу всех битов переменной на одну или несколько позиций Синтаксис : 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,#h’21 ;адрес сдвигаемой переменной Mov a,@r0 M1: Rlc a Djnz r7,M1 Mov @r0,a SERVOx Действие: Загрузка значения, определяющего длительность генерируемого импульса в 100 мкс. Период повторения импульсов 20 мс, т.е. с частотой 50 Гц. Синтаксис: ServoX = NN X – номер выхода от 1 до 16. NN – число, равное длительности генерируемых импульсов. Пример:_Servo1_=_8__800_uS_Servo2_=_12_1200_uS_SHIFTIN._SHIFTOUT_Действие'>Пример: Servo1 = 8 ' 800 uS Servo2 = 12 '1200 uS SHIFTIN. SHIFTOUT Действие: Побитный вывод или ввод данных для записи в сдвиговый регистр или для считывания из сдвигового регистра Синтаксис : 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 P1.5 : B_clk Alias P1.3 B_fqud Alias P1.4 : B_res Alias P1.7 ‘--------------------- ‘подпрограмма загрузки данных в синтезатор 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 ============================================================================= 4-36 ===================================== Справочник по программированию «Bascom-8051» == SOUND Действие: Послать импульсы в порт. Можно для генерации звуков, если каким-то образом подключить к порту громкоговоритель. Синтаксис : SOUND pin, duration, frequency [,NOINT] Pin - имя любого порта ввода-вывода. Duration - число посылаемых импульсов (по сути, это длительность). Может быть задано имя переменной типа: Byte, integer, word или константа. Диапазон задаваемых значений от 1 до 32768. Frequency – время в микросекундах, в течении которого вывод находится в низком и высоком уровне. NOINT – необязательная опция. При ее применении на время генерации звука запрещаются прерывания и звук получается чистым. SOUND P1.1 , 10000, 10 ‘BEEP Пример: SPACE(), STRING(), SPC() Действие: 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 Синтаксис'>SPIIN, SPIOUT Действие: Считать значение переменной из SPI-шины (устройства) или послать содержимое переменной в SPI-шину (устройство). Интерфейс программный. Синтаксис : SPIIN var, bytes SPIOUT var , bytes Var - переменная, содержащая данные для посылки или принимающая данные. Bytes - число байт обмена. Пример: Dim a(10) as Byte , X As Byte CONFIG SPI=SOFT , DIN=P1.0 , DOUT=P1.1 , CS=P1.2 , CLK=P1.3 SPIIN a(1) , 4 ‘считать 4 байта SPIOUT a(1) , 5 ‘послать 5 байтов SPIOUT X , 1 ‘послать байт ============================================================================= 4-37 ===================================== Справочник по программированию «Bascom-8051» == START TIMER, STOP TIMER Действие: Разрешить или запретить счет указанного таймера (0, 1 или 2): Start Timer - разрешить счет TRx=1. Stop Timer – остановить счет TRx=0 Синтаксис : START timer, STOP timer Timer – имена объекта управления TIMER0, TIMER1, TIMER2, COUNTER0 или COUNTER1. Пример: Dim Count As Byte , Gt As Byte Config Timer0 = Timer , Gate = Internal , Mode = 2 On Timer0 Timer_0_int ‘назначить вектор прерывания Load Timer0 , 100 ‘зададим периодичность прерываний Enable Interrupts ‘разрешим использовать прерывания Enable Timer0 ‘разрешим прерывание таймера Priority Set Timer0 ‘дадим ему высший приоритет Start Timer0 ‘разрешим счет Count = 0 ‘сбросит счетчик Do Input «Number « , Gt Print «You entered : « ; Gt Loop Until Gt = 1 ‘ждем, в цикле пока не появится символ ESC Stop Timer0 End Rem обработка прерывания Timer0 Timer_0_int: Inc Count If Count = 2 Then Print «Timer0 Interrupt occured» Count = 0 End If Return STOP Действие: Остановить исполнение программы Пример: PRINT var ‘печатать нечто STOP ‘остановиться здесь STR() Действие: Возвращает строку со значением числа, записанного в указанной переменной. Этя функция производит действия обратное, выполняемое функцией 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) ‘можно применять при суммировании ============================================================================= 4-38 ===================================== Справочник по программированию «Bascom-8051» == SUB Действие: Определить подпрограмму или процедуру, оформленную как подпрограмма. Вы должны объявить процедуру с помощью 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(p1.1) ‘вызов с другой перем. 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 ============================================================================= 4-39 ===================================== Справочник по программированию «Bascom-8051» == SWAP Действие: Поменять местами значения двух переменных одного типа. С индексированными переменными этот оператор не работает! Синтаксис : 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 VAL() Действие: Преобразовать строку, содержащую числовое значение в числовую переменную (число). Синтаксис : 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> |