Справочник по программировани BASCOM-8051 (М.Л. Кулиш, 2001). Справочник по программированию bascom8051 Краснодар 2001
Скачать 6.61 Mb.
|
Bit, Byte, Integer, Long, Word, Single, String() Действие: Типы переменных, применяемые в BASCOM. Тип переменной необходимо указывать перед использованием при объявлении имени с помощью директивы Dim. Пример: Dim B1 As Bit , A As Byte , C As Integer Dim D As Word , E As Long , G As Single Dim S As string * 16 ‘на 16 символов Dim F(10) As Byte ‘массив из десяти байт CALL Действие: Вызывает процедуру или подпрограмму. В процедуру может входить до 10 параметров. Допускается вызывать процедуру вообще без параметров (даже если их наличие было объявлено). Синтаксис : CALL Test [(var1, var-n)] или Test var1 , var-n Var1, var-n - любая переменная или константа. Test Пример: Dim A as byte, B1 as byte Declare Sub Test(b1 as byte) A = 65 Call test (a) ‘вызов п/п test с параметром A Test a ‘альтернативный вариант записи вызова End SUB Test(b1 as byte) ‘использовать некоторую переменную LCD b1 ‘поместить на индикатор Lowerline : LCD BCD(b1) End SUB ============================================================================= 4-6 ===================================== Справочник по программированию «Bascom-8051» == CASE, SELECT CASE, CASE IS .. Действие: Запустить исполнение одного из последовательных блоков действий в зависимости от значения переменной Синтаксис : SELECT CASE var - объявление выбора CASE test1 : statements - первое условие: var=test1? [CASE test2 : statements ] - второе условие: var=test2? CASE ELSE : statements – остальные значения? END SELECT Var – тестируемая переменная типа Byte. Test1, Test2 – значения переменной, при котором происходит выполнение соответствующего блока. Statements – выполняемый оператор (операторы). В последних версиях Bascom поддерживаются операторы проверки условия «больше или равно» (“IS >=”) и диапазона «от - до» (“TO”). Проверяйте, поддерживает ли ваша версия компилятора такие определения. Оператор Dim b2 as byte SELECT CASE b2 'начать проверку и выбор CASE 2 : PRINT «2» CASE 4 : PRINT «4» CASE IS >=5 : PRINT «>5» 'для проверки условия требуется 'ключевое слово IS. CASE 6 TO 19 : PRINT “6-19” 'проверка диапазона. Ключевое слово TO CASE ELSE : PRINT “Other” 'необязательная составляющая END SELECT 'закончить END CHR() Действие: Преобразует значение переменных типа Byte, Integer/Word или константы в символ. Применяется при выводе данных на индикатор, в последовательных порт, для записи в строковую переменную или для преобразования кода в символ. Фактически, данным оператором число преобразуется в байт и записывается в строку. Синтаксис : PRINT CHR(var) : LCD CHR(var) S = CHR(var) : S = «Date=» + CHR(var) var – переменная типа Byte, Integer/Word или числовая константа. s - строковая переменная. Пример: Dim a as byte, s as string * 10 a = 110 : LCD a ‘отпечатается «110» LCDHEX a ‘отпечатается «6E» LCD Chr(a) ‘отпечатается «n» LCD Bdc(a) ‘отпечат «6>» - некорректная операция S = «Byte=» : S = S + Chr(a) ‘можно добавить к строке!!! Print S ‘отпечатается «Byte=n» End CLS Действие: Очищает поле LCD и ставит курсор в первую позицию Пример: CLS ‘очистить индикатор LCD «Hello» ‘вывести сообщение CONFIG 1WIRE Действие: Определение вывода, подключенного к 1-проводной шине Синтаксис : CONFIG 1WIRE = pin pin - имя любого битово адресуемого порта. Пример: Config 1WIRE = P1.0 ‘P1.0 is used for the 1-wire bus 1WRESET ‘reset the bus CONFIG DEBOUNCE Действие: Установить задержку для оператора DEBOUNCE. По умолчанию, если не применено данное определение, задержка устанавливается равной 25 мс. Синтаксис : CONFIG DEBOUNCE = time time – константа, задающая в миллисекундах значение задержки (при кварце 12 МГц). Пример: Config Debounce = 50 ’50 mS ============================================================================= 4-7 ===================================== Справочник по программированию «Bascom-8051» == CONFIG I2CDELAY Действие: Установить задержку между тактами синхронизации по линии SCL интерфейса I2C. По умолчанию задержка устанавливается равной 5 мкс. Синтаксис : CONFIG I2CDELAY = 0 или 1 0 – без задержки (получается скорость обмена около 400 кГц при частоте кварцевого генератора 12 МГц). 1 - с дополнительной задержкой 5 мкс (это стандартная скорость - 100 кГц). Пример: CONFIG I2CDELAY = 0 ‘без задержки CONFIG LCD, CONFIG LCDBUS, CONFIG LCDPIN Действие: CONFIG LCD – установить тип индикатора CONFIG LCDBUS – установить количество линий управления в шинном режиме (при использовании установки «$LCD»). В 4-битном режиме индикатор должен подключаться к линиям D4-D7 шины. Запись в индикатор в шинном режиме ведется командой MOVX A,@DPTR. CONFIG LCDPIN – определить линии управления индикатором (не шинный режим). Синтаксис : CONFIG LCD = LCDtype LCDtype – один из параметров в соответствии с типом используемого индикатора (символов * строк). Можно применять: 40 * 4, 16 * 1, 16 * 2, 16 * 4, 16 * 4, 20 * 2 или 20 * 4. По умолчанию устанавливается - 16 * 2. CONFIG LCDBUS = 4 - при использовании 4-битной шины. CONFIG LCDBUS = 8 - при использовании 8-битной шины (по умолчанию). CONFIG LCDPIN=PIN , DB4=pin, DB5=pin, DB6=pin, DB7=pin, E=pin, RS=pin – при использовании побитного режима управления индикатором (самого медленного). pin - перечисленние имен портов подключенных к индикатору. Для управления индикатором могут использоваться любые линии, адресуемые как биты. Или “CONFIG LCDPIN, … “ – в старой версии синтаксис был таким. Пример 1: ‘Побитное управление индикатором 'ВНИМАНИЕ! Добавлен символ, дающий возможность переносить длинные ‘строки с помощью символа «_» (подчеркивателя): CONFIG LCDPIN = PIN , DB4 = P1.1 , DB5 = P1.2 , DB6 = P1.3, _ DB7 = P1.4 , E=P1.5 , RS=P1.6 ‘опред. подключение индикатора. Линия RW-Gnd CONFIG LCD = 40 * 4 ’40 символов, 4 строки Пример 2: ‘Подк. Индикатора на шину. RW-Gnd. RS-A0. E-инв. Wr(P3.6) $LCD = &ha000 ‘использовать адреса A000h и A001h CONFIG LCDBUS = 8 ‘шина 8-бит (подкл. D0-D7 соот. P0.0-Po.7) CONFIG MICROWIRE Действие: Установить конфигурацию 4-проводного интерфейса Microwire Config Microwire=Pin, Cs=pin, Din=pin, Dout=pin, Clock=pin, Al=7 Pin - перечисленние имен портов, подключенных к Microwire. Могут использоваться любые линии, адресуемые как биты. DIN – ввод данных. DOUT - вывод данных. CS - выбор кристалла. CLK – тактирование данных. AL – число используемых адресных линий. Указываемое значение зависит от выбранного размера записываемых данных (bytes or words). Выбор размерности осуществляется установкой уровня на линии “Org” микросхемы памяти. Синтаксис: Chip (модель кристалла) 93C46 93C56 93C57 93C66 Data bits (длина данных) 8 16 8 16 8 16 8 16 AL (параметр) 7 6 9 8 8 7 9 8 Пример: 'ВНИМАНИЕ! Добавлен символ, дающий возможность переносить длинные ‘строки с помощью символа «_» (подчеркивателя): Config Microwire = Pin , Cs = P1.1 , Din = P1.2 , Dout = P1.4 , _ Clock = P1.5 , Al = 7 ============================================================================= 4-8 ===================================== Справочник по программированию «Bascom-8051» == CONFIG PRINT, PRINTMODE Действие: Установить конфигурацию выхода оператором Print при использовании интерфейса RS-485, требующего дополнительного порта для управления драйвером Синтаксис: Config Print = Pin Pin - имя порта, на котором формируется управляющий сигнал. Printmode = Set (Reset) Определяется уровень (1 или 0 соответственно), устанавливающийся на линии управления при выводе данных Пример: Config Print = P1.7 : Printmode = Reset CONFIG SERVOS Действие: Установить количество сервомоторов и их выводы управления Синтаксис: Config SERVOS=number, SERVO1=pin, SERVO2=pin, SERVO3=pin Number – число сервомоторов. Максимальное количество – 16 servo 1, servo2, servo 2, servo3 – имена выходов, присваемые выводам. При использовании этой функции таймер 0 уже не может быть использован для других целей. Пример: Config SERVOS = 3, SERVO1 = P1.1 , SERVO2 = P1.2 , SERVO3 = P1.4 CONFIG SDA, CONFIG SCL Действие: Определить выводы, подключенные к 2-проводной шине интерфейса I2C. Синтаксис : CONFIG SCL = pin pin - имя любого битово адресуемого порта. CONFIG SDA = pin Пример: CONFIG SDA = P1.7 : CONFIG SCL = P1.6 ‘P1.7 – SDA, P1.6 is the SDA CONFIG SPI Действие: Определить выводы, подключенные к 4-проводной шине SPI. Bascom реализует только программный интерфейс, и поэтому работает с любыми линиями. Аппаратный SPI модели AT89S8252 компилятором не поддерживается. Синтаксис : CONFIG SPI = SOFT, DIN = Pin, DOUT = Pin , CS = Pin, CLK = Pin , Nocs=1 Pin - перечисленние имен портов подключенных к SPI. Могут использоваться любые линии, адресуемые как биты. DIN – ввод данных. DOUT - вывод данных. CS - выбор кристалла. CLK – тактирование данных. При Nocs = 0 – вывод CS не управляется после каждого байта – это нужно делать вручную. При Nocs = 1 – привычное использование вывода CS. Пример: Config SPI=SOFT , DIN=P1.0 , DOUT=P1.1 , CS=P1.2 , CLK=P1.3 SPIOUT var , 1 ‘send 1 byte CONFIG TIMER0, TIMER1 Действие: Установить следующие режимы таймера 0 или 1: CONFIG TIMERx = COUNTER – внешний генератор C/Tx=1 CONFIG TIMERx = TIMER – внутренний генератор (Fкв/12) C/Tx=0 GATE = INTERNAL - внутреннее разрешение счета GATEx=0 GATE = EXTERNAL - внешнее разрешение счета GATEx=1 GATE = MODE=0,1,2 или 3 – режим таймера (соответственно описанию 8051) Пример: Config Timer0=Counter, Mode=1, Gate=Internal Counter0 = 0 ‘сброс счетчик (Tl0 и Th0) а Start Counte ‘разрешим счет ============================================================================= 4-9 ===================================== Справочник по программированию «Bascom-8051» == CONFIG TIMER2 Действие: Установить следующие режимы таймера 2: CONFIG TIMER2 = COUNTER – внешний генератор C/T2=1 CONFIG TIMER2 = TIMER – внутренний генератор (Fкв/12 или Fкв/2) C/T2=0 ]GATE = INTERNAL - внутреннее разрешение счета EXEN2=0 GATE = EXTERNAL - внешнее разрешение счета EXEN2=1 MODE = 0 - режим самозагрузки CP/RL2=0 MODE = 1 - режим захвата CP/RL2=1 MODE = 2 - режим генератора бодовой скорости RCLK=1 TCLK=1 MODE = 3 - генератор бод. только приемника RCLK=1 TCLK=0 MODE = 4 - генератор бод. только передатчика RCLK=0 TCLK=1 MODE = 5 - режим выдачи частоты T2OE=1 DIRECTION=UP - считать вперед (увеличивать) DCEN=1 DIRECTION=DOWN - считать назад (уменьшать) DCEN=0 Пример: CONFIG TIMER2=COUNTER , GATE=INTERNAL , MODE=0 ‘Режим самозагрузки CONFIG TIMER2=COUNTER , GATE=INTERNAL , MODE=0 , DIRECTION=UP CONFIG TIMER2 = COUNTER , GATE = INTERNAL , MODE = 1 ‘Режим захвата CONFIG TIMER2=TIMER , GATE=INTERNAL , MODE=2 ‘Бодовый генератор CONFIG TIMER2=TIMER , GATE=INTERNAL , MODE=3 ‘Бод. генер. на прием CONFIG TIMER2=TIMER , GATE=INTERNAL , MODE=4 ‘Бод.генер. на передачу CONFIG TIMER2=TIMER , MODE=5 ‘Выход частоты CONFIG WATCHDOG Действие: Установка времени срабатывания будильника модели AT89S8252 Синтаксис : Config Watchdog = Time Time – время в мс из ряда: 16 , 32, 64 , 128 , 256 , 512 , 1024 и 2048. Пример: Config Watchdog = 1024 ‘время срабатывания 1024 мс CONST Действие: Объявить символьное имя числа (константы). Определенное символьное имя в дальнейшем можно использовать в тексте программы в качестве цифрового значения (константы). Символьное имя нельзя использовать в блоке определения непосредственных данных с помощью оператора DATA. Неприятности при символьном определении чисел возникают в случаях, когда компилятор не понимает определения. В результате, вместо числа записывается нулевой код без указания ошибки. Синтаксис : DIM Symbol AS Const Value Symbol - имя константы. Value - цифровое значение Const Symbol = Value Пример: Dim Ar As Const 5 ‘Ar = 5 Dim Br As Const &B1001 ‘Br = 9 Dim Cr As Const &hab00 ‘Cr = AB00H 'Новая возможность определения имен констант (начиная с вер.1.0.0.19) Const Cbyte = &HF Const Cint = -1000 Const Csingle = 1.1 Const Cstring = "test" ============================================================================= 4-10 ===================================== Справочник по программированию «Bascom-8051» == COUNTERx Действие: Записать значение непосредственно в счетчик таймера. При загрузке счетчик останавливается (записывается TRx=0), а затем счет разрешается снова (устанавливается TRx=1). Синтаксис : COUNTERX = var или var = COUNTERX Var - переменная типа byte, Integer/Word variable или константа (последняя только при загрузке). CounterX - COUNTER0 , COUNTER1 или COUNTER2. Используйте СounterX = 0 для сброса счетчика.. Счетчик может считать от 0 до 255 в режиме 2 (8-битный с самозагрузкой) и до 65535 в режиме 1 (16-битный). Пример: Dim A As Byte , C As Integer Config Timer0 = Counter , Gate = Internal , Mode = 1 Counter0 = 0 ‘очистить Start Counter0 ‘начать счет Do ‘цикл A = Inkey ‘прочитаем введеное C = Counter0 ‘считаем таймер Print C ‘отпечатаем значение таймера Loop Until A = 27 ‘пока не пришел символ escape продолжаем End Оператор: COUNTER0 = 1000 Компилируется: Clr TCON.4 Mov tl0,#232 Mov th0,#3 Setb TCON.4 CPEEK() Действие: Возвращает значение кода по указанному адресу из памяти команд. Т.к. запись в память программ процессора модели 8051 невозможна, то операция и соответственно команда CPOKE, имеющаяся в стандартном Бейсике, невозможна. Синтаксис : var = CPEEK( address ) Var - переменная (байтовая), которая будет содержать считанное значение. Address - переменная или константа (типа Word или Integer). Пример: Dim I As Integer , B1 As Byte For I = 0 To 127 B1 = Сpeek(i) ‘взять байт из памяти Printhex B1 ; « « ; ‘показать Next DATA Действие: Объявить блок непосредственных данных Синтаксис : DATA var , var2, var3[, varn] var , var2, var3[, varn] - числовые или строковые константы. Байтовые константы в любом виде, предусмотренном Bascom. Константы типа Integer и Word должны быть со значком - %. Константы типа Long - со знаком &. Константы с плавающей точкой - со знаком !. Компилятор позволяет размещить в одной строке разные типы данных. Их разделение при считывании является задачей программиста. Пример: tab_byte: ‘byte data Data 0 , 1 , 2 , 20 , &hFF , &b000101010 _tab_word: ‘integer data Data 100% , 200% , 32345% , &ha0df , &b0001010001010101 _tab_long: ‘long data Data 1000& , 22222222& , &h125690bc _tab_sing: ‘single data Data 1000! , 2000! , 3000! , 4000! , 5000! _tab_string: ‘string data Data «0123456789» , $35 ‘and new format of the string data _tab_mix: ‘mix of constant types on one line DATA «TEST» , 5 , 1000% , -1& , 1.1! ============================================================================= 4-11 ===================================== Справочник по программированию «Bascom-8051» == DATA EEPROM: WRITEEEPROM , READEEPROM Действие: Модель микроконтроллера AT89S8252 имеет встроенную EEPROM объемом 2 кБайта. Для ее использования предусмотрены директивы: WRITEEEPROM - записать данные и READEEPROM – считать данные. Синтаксис : WRITEEEPROM var [, address ] READEEPROM var [, address ] Var - любая переменная BASCOM. Address - адрес EEPROM в диапазоне от 0 до 2047. Адрес можно не указывать, он будет устанавливаться автоматически в порядке следования записей при компиляции. При считывании переменной значение адреса будет вставляться компилятором также автоматически, используя значение, полученное (вычисленное) ранее при ее записи. Естественно, записи в этом случае будут производиться с адреса 000 или после последнего указанного. Кроме того, при автоматическом выборе адреса данные можно вернуть только в тот регистр, из которого они были записаны, и, соответственно, нельзя записать данные из одной ячейки внутренней памяти в разные ячейки EEPROM. Пример: Dim S As String * 15 , S2 As String * 10 S = «Hello» : S2 = «test» Dim L As Long L = 12345678 Writeeeprom S : Writeeeprom S2 ‘записать строки Writeeeprom L ‘записать длинную переменную S = «» : S2 = «» : L = 0 ‘очистить переменные Readeeprom L : Print L Readeeprom S : Print S Readeeprom S2 : Print S2 End DEBOUNCE Действие: Производить периодическую проверку состояние битового порта, и когда ожидаемое изменение уровня происходит, то осуществлять переход на указанную метку или вызывать указанную подпрограмму. В последнем случае после исполнения подпрограммы производится возврат к оператору контроля уровня. Периодичность проверки уровня определяется директивой CONFIG DEBOUNCE = ms. Синтаксис : DEBOUNCE Px.y , state , label [ , SUB] Px.y – имя порта. При state = 0 переход происходит при установлении на контролируемой линии низкого уровня и при state = 1 оператор ждет установления высокого уровня. Label - адрес перехода (GOTO) или вызываемой подпрограммы, если имеется дополнительное указание SUB. Чтобы все работало правильно, необходимо к моменту возврата из подпрограммы вернуть порт в исходное (неактивное) состоянии. Это же правило, кстати, действует и при вызове внешних прерываний. |