Команды и директивы компилятора PROTON
Dim
Синтаксис:
Dim Variable { As } { Size }
С помощью оператора Dim должны быть определены все пользовательские переменные, которые будут использоваться в программе.
Variable - это имя объявляемой переменной. Имя переменной может состоять из любых алфавитно-цифровых символов.
Параметр As можно опустить, он требуется лишь тогда, когда указывается размер переменной. Если параметр As опущен, то переменная по умолчанию будет использоваться как Byte. Любая переменная, которая объявлена без параметра As будет иметь размер 8 бит.
Параметр Size - определяет тип переменной, он может быть Bit, Byte, Word, DWord, Float, или STRING.
Пример 1
Пример 2
' Пример объявления различных по размеру переменных
Dim VAR1 As Byte | ' Oбъявление переменной в 8-бит - тип Byte |
Dim WRD1 As Word | ' Oбъявление переменной в 16-бит - тип Word |
Dim DWRD1 As DWord | ' Oбъявление переменной в 32-бита - тип DWord |
Dim BITVAR As Bit | ' Oбъявление переменной в 1-бит - тип Bit |
Dim FLT As Float | ' Oбъявление переменной в 32-бита с плавающей запятой |
Примечания
Операторы Dim должны размещаться в первых строках программы, cсылки на не объявленные переменные приведут к ошибкам в процессе компиляции.
В именах переменных, как в случае с именами меток, можно свободно смешивать числовые и символьные значения, а также знаки подчеркивания.
Имена переменных могут начинаться с символа подчеркивания, но не должны начинаться с цифр. Длина имен переменных не может быть больше чем 32 символа. Все символы в именах переменных после 32 символа будут игнорироваться.
Имена переменных нечувствительны к регистру, это означает что переменная
Оператор Dim может использоваться и для создания констант:
Dim Num As 100 | ' Переменной Num присвоить значение равное 100 |
Dim BigNum As 1000 | ' Переменной BigNum присвоить значение равное 1000 |
Dim VeryBigNum As 1000000 | ' Переменной VeryBigNum присвоить значение равное 1000000 |
Использование констант отличается от использования переменных тем, что они не занимают места в оперативной памяти. Они просто являются псевдонимами чисел.
Числовые константы могут быть определены в виде сложных уравнений:
Оператор DIM можно использовать для создания констант c плавающей запятой. Для этого необходимо просто добавить десятичную точку в её числовое значение.
Dim PI As 3.14 | ' Создать константу с плавающей запятой c именем PI |
Dim FL_NUM As 5.0 | ' Создать константу с плавающей запятьй и значением 5.0 |
Константа с плавающей запятой может быть создана, используя выражения cледующего вида:
Dim VAR1 As BYTE | ' Oпределить переменную размером в Byte |
Dim VAR_Bit As VAR1.1 | ' VAR_BIT представляет собой 1 бит переменной VAR1 |
Псевдонимы, как в и константы, не занимают объема в оперативной памяти микроконтроллера, потому что они указывают на переменную, или часть переменной, которая ранее была уже объявлена.
Объем оперативной памяти необходимый при создании переменных.
Каждому типу переменной, для её размещения, требуется различный объем оперативной памяти. Ниже приведен список, в котором указаны требуемые объемы оперативной памяти для размещения различных типов переменных.
Тип переменной | Требуемый объем памяти RAMбайт |
Float | 4 байта |
DWord | 4 байта |
Word | 2 байта |
Byte | 1 байт |
Bit | 1 бит |
Каждый тип переменной может иметь различные максимальные и минимальные значения.
Переменные типа Float могут теоретически принимать значения в пределах от -1e37 до +1e38, что делает их наиболее точными из всех типов переменных. Однако использование этого типа переменных приводит к затратам времени на производство вычислений и использованию очень большого места в пространстве памяти микроконтроллера. Поэтому следует использовать такой тип переменной тогда, когда это действительно необходимо.
Переменные типа DWord могут изменяться в пределах от -2147483647 до +2147483647. Но и за использование этого типа переменной придется заплатить дополнительным временем на производство вычислений. Кроме этого им тоже требуется довольно значительное место в памяти микроконтроллера. Поэтому используйте этот тип переменной экономно и только тогда, когда это необходимо.
Переменные типа Word могут принимать значения в пределах от 0 до 65535. Этого диапазона обычно достаточно для большинства приложений. Такие переменные тоже используют большой объем памяти, но все-таки не столько, сколько переменные типа DWord или Float.
Переменные типа Byte могут изменяться в пределах от 0 до 255, поэтому они являются рабочими лошадками для большинства программ. Место, занимаемое в ОЗУ переменными типа Byte имеет совсем небольшие размеры по сравнению с переменными типа Word, или DWord. Поэтому этот тип переменных предпочтителен, особенно, если требуется высокая скорость выполнения программы, или более эффективное выполнение операций.
Переменные типа Bit могут принимать только два значения 0 или 1. Когда объявляются битовые переменные, то их создается одновременно 8 штук, независимо от того, объявили ли Вы одну битовую переменную, две или сразу 8. Поэтому, объявляя единственную битовую переменную в пространстве памяти, помните, что все равно она будет занимать 1 байт (8 бит).
Для переменных используются следующие модификаторы:
Модификаторы BYTE2 и BYTE3 могут использоваться только вместе с 32-разрядными переменными типа DWord.
Модификаторы HighByte и BYTE1 выполняют одинаковую роль. Когда такие модификаторы используются с переменными типа Word, они обращаются к старшему байту этой переменной:
Dim WRD As Word | ' Определить переменную размером в WORD |
Dim WRD_HI As WRD.HighByte | ' Переменная WRD_HI является старшим байтом переменной WRD |
Теперь основная программа обращаясь к переменной WRD_HI работает с ней как с переменной типа Byte. Но фактически программа работает со старшим байтом переменной WRD.
То же самое можно сказать и о модификаторах LowByte и BYTE0. Эти модификаторы обращаются к младшему байту переменной WORD:
Dim WRD As Word | ' Oпределить переменную размером в Word |
Dim WRD_LO As WRD.LowByte | ' WRD_LO это младший байт переменной WRD |
Теперь к переменной WRD_LO основная программа обращаются как к переменной типа Byte, любая ссылка на эту переменную фактически работает с младшим байтом переменной WRD.
Модификатор BYTE2 извлекает 3-й байт из 32-разрядной переменной типа DWord. Аналогично BYTE3 извлекает старший байт 32-разрядной переменной.
В пространстве оперативной памяти микроконтроллера переменные размещаются в том порядке, в котором они расположены в программе. Например:
В оперативной памяти вначале будет размещаться VAR1, а затем VAR2:
Это означает, что в PIC-микроконтроллерах с количеством банков памяти больше чем один, первые n переменных всегда будут находиться в BANK0 (значение n зависит от используемого PIC-микроконтроллера).
Место нахождения переменной в пределах одного банка обычно не имеет значения, если используется программа на Basic, однако, если в ней осуществляется переход к подпрограмме ассемблера, необходимо всегда следить за тем чтобы переменные располагались в одном банке.
Если используются переменные типа Word или DWord и они пересекают границу банка, то предупреждающее сообщение будет отображено в окне ошибки. Обычно такая ситуация возникает редко, однако, когда происходит такая ошибка, необходимо сделать так, чтобы переменные типа Word, или переменные типа DWord полностью находились в одном из банков. Эту ошибку достаточно легко устранить, если поместить так называемую "куклу" (переменную размером в Byte) перед переменными Word или DWord из-за которых возникли сообщения об ошибке.
Переменные типа DWord имеют младший байт и старший байт. К старшим байтам этих переменных можно обратиться, просто добавляя символ H в конце имени переменной. Например:
Произведет код ассемблера
Для того чтобы обратиться к старшему байту переменной WRD, используйте следующую конструкцию
Это особенно полезно, когда используются подпрограммы на ассемблере, типа:
Переменные типа DWord имеют младший, средний 1-й (mid1), средний 2-ой (mid2) и старший байты. К старшему байту можно обратиться, добавив три символа "Н" к имени переменной. Например:
Произведет код ассемблера:
Для того чтобы обратиться к старшему байту переменной WRD, используйте конструкцию:
или
Для того чтобы обратится к младшему или средним байтам, добавляйте или удаляйте соответствующее количество символов "H" после имени переменной.
См. также: ALIASES, DECLARING ARRAYS, ARRAYS, CONSTANTS, Floating Point Math Symbols, SYMBOLS, Создание и использование STRINGS.