Справочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001). Справочник по программированию bascom8051 Краснодар 2001
Скачать 6.61 Mb.
|
===================================== Справочник по программированию «Bascom-8051» == I2C: I2CRECEIVE, I2CSEND Действие: 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 байт ============================================================================= 4-19 ===================================== Справочник по программированию «Bascom-8051» == I2C: I2START, I2CSTOP, I2CRBYTE, I2CWBYTE Действие: I2CSTART - генерировать условия старта. I2CSTOP - генерировать стоп-условия для окончания сессии обмена. I2CRBYTE - принять один байт из I2C-устройства. I2CWBYTE – послать байт в I2C-устройство. Синтаксис : I2CSTART I2CSTOP I2CRBYTE var, 8/9 I2CWBYTE val Var – переменная-приемник данных I2C-устройства. 8/9 - опция типа считывания. 8 - (ACK), когда считывается не последний байт, т.е. считывание еще будет продолжаться. 9 - (NACK), если это последний байт считываемой последовательности. Val - переменная-источник данных или константа. Функции записи и считывания работают через аккумулятор, поэтому для экономии переменных его можно использовать как источник и приемник данных. Пример: 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 B.0 ‘переключим в режим считывания 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 ============================================================================= 4-20 ===================================== Справочник по программированию «Bascom-8051» == IDLE Действие: Переводит процессор в режим останова (IDLE), выход из которого происходит только в случае любого прерывания или системного сброса. Синтаксис : IDLE Пример: Mc: ‘цикл ожидание бита, устанавливаемого в прерывании Do Idle ‘останов для снижения энергопотребления If Bit_a=1 Then ‘проснулся и проверяет: есть событие? Bit_a=0 : Goto Wba ‘да – отработать End If Loop Wba: Set P1.1 ‘действие, вызванное событием в прерывании Goto Mc ‘обратно в цикл ожидания IF, ELSE , ELSEIF, END IF Действие: Проверить условия, в результате которых выполняются или пропускаются указанные действия. Производится проверка значений и сравнение всех типов переменных, включая значения отдельных битов одно-, двух- и четырехбайтных переменных!!! Синтаксис : 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 A.15 = 0 THEN PRINT «BIT 15=0» ELSE PRINT «BIT 15=1» END IF Пример 2: Dim X As Integer ‘новая возможность проверки – сравнение со значением символа If X = "A" Then 'when X = 65 the test will pass Пример 3: ‘новая возможность проверки – запись опертора в одну строку If X = 10 Then Goto M1 Else Goto M2 ============================================================================= 4-21 ===================================== Справочник по программированию «Bascom-8051» == INP(), OUT Действие: Первая функция возвращает переменной значение из ячейки во внешней памяти, вторая - записывает значение переменной в ячейку внешней памяти. Функции перемещают только байтовые данные. Синтаксис : 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 INSTR () Действие: Возвращает значение позиции в строке, указанной для поиска подстроки (включения). Пока работает только во внутренней памяти. Синтаксис: 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 ============================================================================= 4-22 ===================================== Справочник по программированию «Bascom-8051» == INPUT, INPUTHEX, INPUTBIN Действие: Функция INPUT может быть использована, когда в системе имеется интерфейс RS-232. При подключении к нему компьютера с программой эмулятора терминала (или другой программой, воспроизводящей аналогичные функции) имеется возможность ввода значений переменных в текстовом виде (числовых и символьных). BASCOM также поддерживает с помощью функция INPUTHEX ввод переменных в HEX-коде, записанном символами (каждый байт записывается двумя символами). Прием заканчивается при поступлении символа Функция INPUTBIN записывает принятые последовательным портом значения «как есть». Ввод заканчивается, как только переменная заполнится, т.е. будет принято необходимое число байт (один для байтовой переменной, два для слова). Синтаксис_:_var_=_INKEY_var_=_WAITKEY_var_–_переменная_типа_Byte,_Integer,_Word,_Long_или_String._Если_символ_не_введен,_возвращается_нулевое_значениеПример'>Синтаксис : INPUT [“prompt”] , var [, varn] [NOECHO] [ TIMEOUT = xx] INPUTHEX [“prompt”] , var [, varn] [NOECHO] [ TIMEOUT = xx] INPUTBIN var1 [,varn] Prompt - приглашение (сообщение, которое будет выводится на терминал перед вводом переменной). Var, varn - переменные (их может быть несколько), значения которых вводятся. NOECHO - опция, запрещающая эхо (передачи обратно введенных символов). TIMEOUT – опция, указывающая на необходимость проверки времени ввода. В версии компилятора старше 2.01 эту опцию перед использованием необходимо объявить директивой $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 ============================================================================= 4-23 ===================================== Справочник по программированию «Bascom-8051» == INKEY, WAITKEY Действие: Функция 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 ‘здесь просто ждать символа LCASE(), UCASE() Действие: Возвращает строки строчных и прописных символов (преобразует соответственно строчные из приписных и прописные из строчных). Преобразует символы только латинского алфавита. Цифры и другие знаки не изменяет. Синтаксис : 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, LCDHEX Действие: Послать константу или переменную на индикатор 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» ============================================================================= 4-24 ===================================== Справочник по программированию «Bascom-8051» == LCD: CURSOR, DISPLAY, HOME, LOCATE, SHIFTLCD, SHIFTCURSOR FOURTHLINE, LOWERLINE, THIRDLINE, UPPERLINE FOURTH, LOWER, THIRD, UPPER Действие: Управлять курсором 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 ============================================================================= 4-25 ===================================== Справочник по программированию «Bascom-8051» == LEFT(), MID(), RIGHT() Действие: Функции разделения строковых (текстовых) переменных: LEFT() - возвращает значение самого левого символа (или несколько символов cлева). 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 LEN() Действие: Функция возвращает длину строки. Под длиной строки имеется в виду число символов, загруженной строки, а не длина буфера, определенного как строковая переменная. Применяется совместно в операциях преобразования строк. Синтаксис : Var = LEN( string ) Var – цифровая переменная, принимающая значение длины строки. String – строка, длина которой вычисляется. Пример: Dim S As String * 12 , A As Byte ‘буфер на 12 символов S = «test» : A = Len(s) : Print A ‘а длина переменной только 4 LOAD TIMER Действие: Записывает значение в таймер, работающий в режиме самозагрузки (записывает в регистры, определяющие частоту переполнения). Синтаксис : 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 . |