Справочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001). Справочник по программированию bascom8051 Краснодар 2001
Скачать 6.61 Mb.
|
Знаки отношения = <> < > <= >= Соответствуют следующим операциям сравнения (применимы с переменными типа): Равенство (Equality) - X = Y. (Const, Bit, Byte, Word, Integer, Long, String, Single) Неравенство (Inequality) - X <> Y. (Const, Bit, Byte, Word, Integer, Long, String, Single) Меньше чем (Less than) - X < Y. (Const, Byte, Word, Integer, Long, Single) Больше чем (Greater than) - X > Y. (Const, Byte, Word, Integer, Long, Single) Меньше или равно (Less than or equal) - X <= Y. (Const, Byte, Word, Integer, Long, Single) Больше или равно (Greater than or equal) - X >= Y. (Const, Byte, Word, Integer, Long, Single) Знаки логических операций NOT AND OR XOR Соответствуют следующим логическим операциям (с переменными типа Сonst, Bit, Byte, Word, Integer, Long): Инверсия (complement): 0 = NOT 1, 1 = NOT 0 И (Conjunction) : 1 = 1 AND 1, 0 = 1 AND 0 = 0 AND 0 ИЛИ (Disjunction): 1 = 1 OR 1 = 0 OR 0, 0 = 0 OR 0 Исключающее ИЛИ (Exclusive or): 1 = 1 XOR 0, 0 = 0 XOR 0 = 1 XOR 1 Знаки арифметических операций + - * / или \ Соответствуют следующим арифметическим операциям (с переменными типа): Сложение. (Const, Byte, Word, Integer, Long, String*, Single). Вычитание. (Const, Byte, Word, Integer, Long, Single) Умножение. (Const, Byte, Word, Integer, Long, Single) Деление (Const, Byte, Word, Integer, Long, Single) * - строковые переменные складываются не арифметически. ============================================================================= 3-2 ===================================== Справочник по программированию «Bascom-8051» == 4. Директивы, операторы и функции Bascom-8051 $ASM - $END ASM Действие: Обозначают начало и конец блока на языке ассемблера, вставляемого в текст программы на Бейсике. Использование $ASM допускается только вместе с $END ASM. Пример: $asm Mer: Mov r0,#{C} ;address of c Mov a,#1 Mov @r0,a ;store 1 into var c $end Asm Примечание. Смотри раздел «Правила оформления ассемблерных вставок» $BAUD, $CRYSTAL Действие: $BAUD – устанавливает скорость обмена асинхронного интерфейса (UART). Данная директива активизируется только при использовании команд PRINT, INPUT и обычно используется в блоке инициализации микроконтроллера. Также необходимо указывать и частоту кварцевого генератора (резонатора) с помощью директивы $CRYSTAL (иначе значение будет взято из панели параметров компилятора). Внимание! Если в тексте программы не применяются операторы типа PRINT и INPUT, то инициализация автоматически не выполняется - в таймер не загружается значение коэффициента деления и не устанавливается режим последевательного интерфейса, Для этого нужно добавить дополнительные операторы инициализации таймера и запустить таймер (см. пример). Синтаксис: $BAUD = var1 ; $CRYSTAL = var2 var1, var2 – константы, численно равные соответственно скорости в бодах и тактовой частоте в герцах (частоте кварца). Пример: $Baud = 2400 $Crystal = 12000000 ‘ 12 MHz crystal Config Timer2 = Timer , Gate = Internal , Mode = 2 ‘для Timer2 Scon = &h52 : Rcap2h = &hff : Rcap2l = &h64 : Start Timer2 '* ‘вариант для Timer1 Config Timer1 = Timer , Gate = Internal , Mode = 2 ‘для Timer1 Scon = &h52 : Pcon = &H80 : Th1 = &he6 : Start Timer1 '* '* - эти строки добавляются, если в программе отсутствуют 'операторы типа Print и Input, но послед. интерфейс используется 'другим способом $DEFAULT XRAM Действие: После этой директивы компилятор начинает располагать каждую переменную во внешней памяти. Если какую-либо переменную после этого нужно расположить во внутренней памяти, к ней необходимо дополнительно применить указание IRAM Пример: $default Xram Dim X As byte ‘во внешней памяти XRAM Dim Y As Integer ‘тоже в XRAM Dim Z As IRAM Integer ‘эта переменная определена в памяти IRAM $EXTERNAL Действие: Директива, определяющая используемую ассемблерную подпрограмму или подпрограммы пользователя. Это позволяет включать с процесс ассемблирования только необходимые для данного случая подпрограммы из всех, содержащихся в библиотеке. Однако, последнее в данной версии пока не работает – включается вся библиотека. Синтаксис: $EXTERNAL myrout [, other] myrout– имя подпрограммы. Пример: $LIB "mylib.lib" $EXTERNAL _dec76 $INCLUDE Действие: Включить в процесс компиляции данной программы ASCII (текстовый) файл с текущей позиции. В подключаемом файле должны содержаться только определения, предусмотренные BASCOM. Синтаксис: $INCLUDE <имя файла> Пример: $include [c:\bascom\]123.bas ‘[полный путь] и имя ============================================================================= 4-1 ===================================== Справочник по программированию «Bascom-8051» == $IRAMSTART Действие: Устанавливает начальное значение распределения переменных во внутренней памяти. Применяется совместно с директивами $NOINIT и $NOSP, отменяющими автоматичекую инициализацию микроконтроллера и установку стека. Синтаксис: $IRAMSTART = constant Constant - начальное значение (0-255) Пример: $NOINIT ‘отменяет инициализацию процессора $NOSP ‘отменяет инициализацию стека $IRAMSTART = &H60 ‘начальное значение распределения памяти SP = 80 ‘назначить стек $LARGE Действие: Устанавливает модель большой памяти(более 2 КБайт). При этом компилятор начинает использовать команды Lcall и Ljmp. Пример: $LARGE ‘при компиляции появляется сообщение об ошибке 148, ‘когда требуется эта директива $LCD Действие: Устанавливает адрес и режим обращения к символьному индикатору в 8-битном режиме, и подключенном к шине данных процессора D0…D7 (при использовании дополнительной команды LCDBUS = 4 в 4-битном режиме с подключение к D4…D7). Линия «E» индикатора подключается через инвертор к линии процессора «Wr»(P3.6). Линия «RS» подключается к формирователю адреса A0 (регистру, защелкиваемому сигналом ALE). Линия «RW» индикатора заземляется, т.к. чтение из индикатора не производится Синтаксис : $LCD = [&H] address address - 16-разрядный. Пример: $LCD = &ha000 ‘обращение к индикатору по адресу a000h,a001h LCD «Hello world» $LIB Действие: Директива, указывающая имя файла (в директории /LIB), содержащего необходимые подпрограммы. Это прием позволяет не включать каждый раз ассемблерные подпрограммы в текст программы Бейсика и держать их в отдельном файле. Синтаксис: $LIB myfile.lib myfile.lib– имя файла. Пример: $LIB "mylib.lib" ‘указать имя файла библиотеки $EXTERNAL _dec76 ‘указать используемую подпрограмму $MAP Действие: Указывает компилятору на необходимость записывать в файле сообщений шестнадцатеричный адрес начала исполняемого кода каждой строки исходного текста программы. Применяется для облегчения отладки программы. Пример: $MAP A = A – F Print "Hello" Print "Test" Будет записано в соответствующей секции файла сообщений : Code map ----------------------------------------------------------- Line Address(hex) ----------------------------------------------------------- 2 152 3 169 5 180 $NOBREAK Действие: Указывает компилятору на необходимость пропускать операторы Break», имеющиеся в тексте программы, и таким образом позволяет не убирать их из окончательного текста программы. Пример: $Nobreak ‘пропускать все команды останова отладчика ============================================================================= 4-2 ===================================== Справочник по программированию «Bascom-8051» == $NOINIT Действие: Отменяет автоматическую инициализацию процессора параметрами, установленными в меню «Options» - «Compiler» программы «Bascom». Так как данная директива отменяет все виды инициализации, то при ее использовании необходимо полностью сконфигурировать систему, включая установку начального адреса внутренней памяти (директивой Iramstart). Задаваемые в тексте программы параметры внутреннего и внешнего оборудования (директивы Config) имеют более высокий приоритет и обычно не требуют применения директивы $Noinit. Пример: $NOINIT ‘отменяет инициализацию процессора $IRAMSTART = &H60 ‘начальное значение распределения памяти $NOLCDINIT Действие: Директива, запрещающая инициализацию LCD. Синтаксис: $NOLCDINIT $NONAN Действие: Заменяет вывод сообщения “NAN” на сообщение “0.0” в тех случаях, когда выводимое значение переменной в формате с плавающей точкой при преобразовании в строковую переменную не может быть представлено как число (выходит за пределы формата отображения, т.к. очень маленькое или очень большое или при вычислениях произошло произошло переполнение). Пример: $NONAN 'отменяет сообщение “NAN” $NONULL Действие: $NONULL = 0 - устанавливает обычный формат записи в программе полей текстовых данных (с завершающим нулем). $NONULL = -1 - устанавливает формат записи полей текстовых данных без завершающего нуля. Пример: $NONULL = -1 'отменяет завершающий нуль DATA “эта строка и следующая строка ” $NONULL = 0$ 'разрешает установку завершающего нуля DATA “являются одной текстовой константой” $NOSP Действие: Отменяет автоматическую инициализацию стека после блока переменных. При использовании данной директивы необходимо включить в программу оператор инициализации регистра стека (SP). Если этого не сделать, то указатель стека останется на 07h. Пример: $NOSP ‘отменяет инициализацию стека SP = 80 ‘назначить стек $OBJ Действие: Включить в программу объектный код Синтаксис : $OBJ obj obj - включаемый объектный код в шестнадцатеричном виде Пример: $obj D29122 ‘КОМАНДЫ SETB P1.1, RET $RAMSIZE Действие: Сообщает компилятору размер внешней памяти Синтаксис : $RAMSIZE = [&H] size size - константа. Пример: $Ramsize = &h4000 ‘размер внешнего ОЗУ 16 кБ $RAMSTART Действие: Устанавливает начало распределения внешней памяти. Синтаксис : $RAMSTART = [&H] adress adress - константа. Пример: $Ramstart = &h1000 ‘начало распределения переменных с 1000h $REGFILE Действие: Указать имя файла для определения имен используемых регистров. Применяется для установки модели применяемого микроконтроллера. Указываемый файл должен быть в директории компилятора. ВНИМАНИЕ! Эта директива должна записывается первой исполняемой строкой в тексте программы. Синтаксис : $REGFILE = [File] Пример: 'перед этой директивой могут быть строки комменариев $REFILE = "8052.DAT" ============================================================================= 4-3 ===================================== Справочник по программированию «Bascom-8051» == $ROMSTART Действие: Устанавливает начало распределения программной памяти. Эта директива не похожа на привычный оператор ORG, применяемый при программировании на ассемблере. Директива $Romstart, независимо от места расположения, указывает начало исполняемого кода всей программы! Ее применение для установки начала последующей части программы с желаемого адреса невозможно. Синтаксис : $ROMSTART = [&H] adress adress - константа. Пример: $Romstart = &h8000 ‘начало распределения ПЗУ с 8000h $SERIALINPUT Действие: Перенаправляет действие функции INPUT на считывание данных из другого устройства. Синтаксис : $SERIALINPUT = label label - имя подпрограммы, размещающей вводимые данные из произвольного устройства в аккумуляторе. Пример: $Serialinput = Myinput ‘определим имя программы ввода данных !myinput: ;здесь проводим необходимые действия Mov A , Sbuf ;посл. ввод в Acc от устройства Sbuf Ret $SERIALOUTPUT Действие: Перенаправляет действие функции PRINT на запись данных в другое устройство Синтаксис : $SERIALOUTPUT = label label - имя подпрограммы, выводящей данные из аккумулятора в произвольное устройство. Пример: $SERIALOUTPUT = Myioutput ‘опр. имя программы вывода данных !myoutput: ;здесь проводим необходимые действия Mov Sbuf , A ;посл. вывод из Acc в устройства Sbuf Ret $SERIALINPUT2LCD Действие: Перенаправляет данные из последовательного порта в LCD-индикатор, обеспечивая режим эха. Синтаксис : $SERIALINPUT2LCD Пример: $SERIALINPUT2LCD ’показывать вводимые данные $SIM Действие: При наличии этой директивы компилятор генерирует код, исключающий циклы ожидания (программные задержки операторов WAIT, WAITMS, DELAY), чтобы ускорить процесс отладки. Синтаксис : $SIM Пример: $SIM ‘пропускать при отладке все задержки $TIMEOUT Действие: При наличии этой директивы компилятор генерирует код, включающий использавание опции TIMEOUT в операторах INPUT, INPUTHEX Синтаксис : $TIMEOUT Пример: $TIMEOUT ‘будет использована опция TIMEOUT ============================================================================= 4-4 ===================================== Справочник по программированию «Bascom-8051» == 1WRESET, 1WREAD, 1WWRITE Действие: Эти операторы обеспечивают пользователю связь с микросхемами «Dallas Semiconductors», имеющими 1-проводный интерфейс (1Wire-devices). 1WRESET – сбросить 1w-шину. 1WWRITE var1 – послать значение переменной var1 в шину. Синтаксис : 1WRESET 1WWRITE var1 var2 = 1WREAD() var2 = 1WREAD() - считать в переменную var2 данные из шины. var1 - Byte, Integer, Word, Long, Constant. var2 - Byte, Integer, Word, Long. Пример: ‘-------------------------------------------------- ‘ демонстрация 1wreset, 1wwrite and 1wread() ‘ Подтянуть резистором 4K7 шину DS2401 на +5 V ‘-------------------------------------------------- Config 1wire = P1.1 ‘использовать этот вывод Dim Ar(8) As Byte , A As Byte , I As Byte 1wreset ‘сбросить интерфейс Print Err ‘вывести сообщение об ошибке, если не отзовется 1wwrite &H33 ‘команда считывания памяти For I = 1 To 8 Ar(I) = 1wread() ‘считать 8 байт в переменную Ar Next For I = 1 To 8 Printhex Ar(I); ‘показать считанное Next Print ‘пустая строка End ABS(x) Действие: Возвращает абсолютное значение знаковой целой переменной. Не работает с числами в формате с плавающей точкой. Синтаксис : var = ABS(var2) var - Byte, Integer, Word, Long. var2 – Integer, Long. Пример: Dim a as Integer, c as Integer , e as Single a = -1000 : c = Abs(a) ‘c=1000 e = -1000 $asm Anl {e + 3} , &H7f ‘для Single достаточно стереть знак e=1000 $end Asm ALIAS Действие: Осуществляет переименование переменных. Обычно применяется для определения имен битов и линий портов. Синтаксис : Newvar ALIAS Oldvar Oldvar - старое имя. Newvar - новое имя. Пример: In_dir Alias P1.1 ‘линия «Ввод направления» Ri Alias Scon.0 ‘только так можно определить привычное имя бита ASC(s) Действие: Преобразует строку в ее ASCII значение (код символа). Преобразуется только значение первого символа. При отсутствии строки возвращается нулевое значение Синтаксис : var = ASC(string) var - Byte, Integer, Word, Long. String - String, Constant. Пример: Dim a as byte, s as String * 10 s = «ABC» : a = Asc(s) Print a ‘выводится 65 (41h) - код первого символа ============================================================================= 4-5 ===================================== Справочник по программированию «Bascom-8051» == AND, OR, XOR, NOT Действие: Производят логические операции: AND-операция «И» (1 And 0 = 0, 1 And 1 = 1), OR-операция «ИЛИ» (1 Or 0 =1, 0 Or 0 =0), XOR-операция «исключающего ИЛИ» (1 Xor 1 = 0, 0 Xor 1 = 1, 0 Xor 0 = 0), NOT – инвертирование Синтаксис : Var3 = var AND var2, var3 = var OR var2 Var3 = var XOR var2, var3 = var NOT var2 var, var2 – переменные или константы типа Bit, Byte, Integer, Word, Long Constant var3 – только переменные типа Bit, Byte, Integer, Word, Long Пример: Dim d As Byte , e As Byte Dim c As Const &B10011001 e = 12 : e = Not e : d = e Or c : d = d And &b00001000 BDC() Действие: Показывает (выводит) число в двоично-десятичном виде. Синтаксис : Bcd(var) Var - отбражаемая переменная (типа Byte, Word, Integer, Long или Constant). Пример: Print arb ‘значения 10h, 21h, 40h показывает как 16, 33, 64 Print Bcd(arb) ‘значения 10h, 21h, 40h выводятся как 10, 21, 40 BITWAIT Действие: Ждет, пока бит не установится или не сбросится Синтаксис : BITWAIT x SET/RESET x- имя бита Пример: Bitwaim a , Set ‘ждем, пока в прерыв. Установится Бит a Bitwait P1.7, Reset ‘ждем, пока в порт не придет «0» BREAK Действие: Остановиться при отладке. Компилятор устанавливает в месте расположения оператора Break код A5h, служащий отладчику командой останова. Пример: Break ‘остановиться здесь при отладке |