Главная » Статьи » Полезные материалы |
Переменные, типы переменных и операции с ними Компилятор Proton поддерживает несколько типов переменных и это достаточно функциональный набор:
Переменная определяется в начале программы следующей конструкцией: Dim Flag As Bit Мы зарезервировали в памяти микроконтроллера место под переменную типа Bit и для удобства восприятия назвали ее Flag. Данный тип переменных удобно использовать в качестве каких-либо флагов. Например, произошло прерывание (не важно, от какого источника) основной программы в момент вывода информации на ЖКИ. Чтобы не отнимать время на обработку прерывания мы в обработчике прерываний просто устанавливаем флаг Flag = 1 и спокойно выходим из обработчика. После выхода из обработчика прерываний программа продолжается с того места, где она была прервана. Программа заканчивает вывод на ЖКИ и выполняется дальше. Мы же далее проверяем, было ли прерывание: If Flag = 1 Then HRSout Dec 2 Temperature ‘И если прерывание было, выполняем какие-то действия ‘И не забываем сбрасывать флаг прерывания, чтобы не выполнять эти действия бесконечно Flag = 0 Endif Для работы с этим типом переменной достаточно знать булеву алгебру. С переменной типа бит можно проводить любые булевы операции: логическое И, логическое ИЛИ, логическое НЕ, логическое ИСКЛЮЧАЮЩЕЕ ИЛИ и их комбинации. Естественно, с таким типом данных не выполнишь ни тригонометрические, ни логарифмические, также нецелесообразно выполнять с ним и операции умножения и деления.
Может принимать значения:
Знак «$» перед каким-либо числом означает, что число – шестнадцатиричное, а знак «%» - что число – двоичное. Отсутствие какого-либо знака перед числом означает, что число – обычное в десятичной системе представления. Байтовая переменная, как и все остальные, описываются в начале программы. Dim Temperature As Byte ‘Мы определили переменную типа байт и назвали ее Temperature Операции с переменной типа байт – самые распространенные. Это связано с тем, что все порты микроконтроллеров, а также регистры специального назначения имеют размерность в байт. Конечно, существуют порты разрядностью в 5 или 2 бита. Но все равно в этих случаях используются переменные типа байт. Байту можно присвоить какое-то значение и вывести непосредственно в порт или регистр микроконтроллера, а можно присвоить это значение порту или регистру непосредственно: Dim VoltLevel As Byte ‘Создали переменную типа Byte Dim Temp As Byte ‘Еще одну VoltLevel = 100 ‘Присвоили первой переменной одно значение Temp = %10001111 ‘Присвоили второй переменной значение PORTB = VoltLevel ‘Вывели в порт МК значение переменной Option_Reg = Temp ‘Присвоили регистру Option_Reg значение второй переменной Работа с переменной типа байт может вестись и на битовом уровне. Допустим, нам нужен один единственный бит байтовой переменной. Например, шестой. Нам нужно его извлечь и проверить на равенство единице или нулю. Делается это так: Dim Flag As Bit ‘Определим битовую переменную Dim TempVar As Byte ‘Определим байтовую переменную Flag = TempVar.6 ‘Извлечем в битовую переменную шестой бит байтовой переменной. Это – один из вариантов. Есть простой способ обращения к битам переменной. В начале программы мы сразу определяем название для каждого бита байтовой переменной: Dim FlagsVar As Byte ‘Определили переменную типа байт Dim Mode_1 As FlagsVar.0 ‘Первый бит переменной назовем Mode_1 Dim Mode_2 As FlagsVar.1 ‘ Dim Mode_3 As FlagsVar.2 ‘ Dim Mode_4 As FlagsVar.3 ‘ Dim Mode_5 As FlagsVar.4 ‘ Dim Mode_6 As FlagsVar.5 ‘ Dim Mode_7 As FlagsVar.6 ‘ Dim Mode_8 As FlagsVar.7 ‘Восьмой бит назовем Mode_8 Это – просто пример, и названия битов могут быть любыми. Можно использовать это, например, для переключения режима работы устройства на МК, устанавливая один из битов переменной. Один бит – один режим. Определение битовых переменных для байта, не занимает ровным счетом никакого программного или регистрового пространства. Мы уже определили байт. И для удобства (для себя) дали имя каждому биту. Все просто. С байтами можно проводить любые операции – сложение, вычитание, умножение и деление, а также, поскольку байт состоит из битов, логические операции (в двоичном представлении). Следует помнить, что максимальное значение, которое может удерживать байт – 255. Если в результате какой-либо математической операции будет получен результат, превышающий 255, то в переменную будет записано число, равное результату минус 255. Например, при умножении 20*20 мы получаем 400. Значит в переменную будет записан результат 400 – 255 = 145. Следует быть внимательным при разработке своих проектов. Существуют еще операции для работы с байтовыми переменными. Таблица содержит все простые математические операции.
Существуют еще операции с переменными, такие как тригонометрические, возведение в степень, извлечение корня числа и другие. Но они больше подходят для работы с переменными типа Float.
Эта переменная может принимать следующие значения:
Лучше всего для работы с этим типом данных, подходит, конечно 16-ричный формат, поскольку занимает меньше места при написании числа. Но это – дело личных предпочтений. Объявляется эта переменная так же, как и все остальные? В начале программы: Dim CountOfExempl As Word ‘Определим переменную типа Word Работа с данным типом переменных ничем не отличается от работы с переменной типа байт. Просто здесь число – больше. Работа с этим типом переменных немного интересней, чем с переменной типа байт. Так же, как и в байте, мы можем присвоить каждому биту свое название. Но, кроме того, мы можем дать имя и каждому из двух байтов, составляющих слово. Делается это просто: Dim RawData As Word ‘Создали переменную типа Word Dim DataH As RawData.HighByte ‘Присвоим старшему байту переменной RawData имя DataH Dim DataL As RawData.LowByte ‘Младший байт назовем DataL Теперь можно записать и так: Dim Flag As RawData.HighByte.0 ‘Присвоим нулевому биту старшего байта переменной RawData имя Flag То же самое: Dim Flag As DataH.0 ‘Присвоим нулевому биту старшего байта переменной RawData имя Flag Еще для определения переменных используется директива Symbol. Приведенный выше пример можно записать и так: Dim RawData As Word ‘Создали переменную типа Word Symbol DataH = RawData.HighByte ‘Присвоим старшему байту переменной RawData имя DataH Symbol DataL = RawData.LowByte ‘Младший байт назовем DataL Symbol Flag = DataH.0 ‘Присвоим нулевому биту старшего байта переменной RawData имя Flag Также можно написать и так: Dim RawData As Word ‘Создали переменную типа Word Dim Data_1 As RawData.Byte0 ‘Назовем младший байт переменной RawData именем Data_1 Dim Data_2 As RawData.Byte1 ‘Назовем младший байт переменной RawData именем Data_1 Директивой Symbol нельзя создавать новую переменную. Можно лишь с помощью нее присваивать имя, используя уже существующую переменную. Операции, относящиеся к переменной типа байт, можно смело использовать в отношении переменной типа Word, поскольку они практически ничем не отличаются. Единственное, что нужно помнить, это то, что максимальное значение для этого типа переменных равняется 65536. И при переполнении (при выходе за этот диапазон), так же, как и в случае с байтами, в нее будет записано значение, равное разнице между этим результатом и числом 65535.
Dim PositionX As DWord ‘Резервируем в памяти 4 байта для переменной PositionX Dim PositionY As DWord ‘Еще 4 байта для переменной PositionY
Здесь, по аналогии с переменной типа Word, можно давать имя не только каждому байту, но также и каждому из двух слов этой переменной. Делается это так: Dim TempVar As DWord ‘Переменная типа DWord Dim Temp_1 As TempVar.LowWord ‘Младшая переменная типа Word, которую мы назвали Temp_1 Dim Temp_2 As TempVar.HighWord ‘Старшая переменная типа Word Тоже самое мы можем написать и так: Dim TempVar As DWord ‘Переменная типа DWord Dim Temp_1 As TempVar.Word0 ‘Младшая переменная типа Word, которую мы назвали Temp_1 Dim Temp_2 As TempVar.Word1 ‘Старшая переменная типа Word Теперь можно дать имя каждому байту выделенным переменным Temp_1 и Temp_2. Опять же это можно сделать двумя способами: Dim LowByteOfTemp_1 As TempVar.Byte0 или Dim LowByteOfTemp_1 As Temp_1.LowByte
Работа с этой переменной в качестве хранилища битовых переменных нецелесообразна, для этого есть переменные поменьше. Эту переменную удобно использовать, когда нужно работать и с отрицательными и с положительными числами. Однако, следует помнить, что операции с данным типом переменных требует значительных затрат программной памяти. Рекомендуется использовать ее там, где это действительно необходимо. С переменной типа DWord можно проводить те же самые операции, но с тем условием, что переменная этого типа – знаковая. Следует помнить об этом. Это означает, что в случае отрицательного результата, в переменную этого типа и будет записано отрицательное значение. С переменными типа Byte или Word это не пройдет. При отрицательном результате, в переменную будет записано значение, равное разнице между 255 и отрицательным результатом. То есть, если в результате вычитания ожидалось увидеть в переменной типа Byte минус 53, то в нее будет записано значение равное 255 – 53 = 202. В практике иногда случаются такие ошибки, поэтому следует строго следить и ограничивать диапазоны результатов операций с учетом этих особенностей.
Dim Pi As Float ‘Определим переменную с плавающей запятой Pi = 3.1416 Для отделения целого числа от долей используется точка, а не запятая. Чем меньше число с плавающей запятой, тем точнее значение. Набор операций с переменной типа Float – самый богатый. Здесь и тригонометрические, и логарифмические операции и все простые математические операции, производимые с байтами.
Dim Text As String * 20 ‘Данная строка зарезервирует в памяти 20 байтовых ячеек для хранения символов. Самая простая операция, которую можно провести с переменной данного типа – это сложение двух строк. Нет смысла умножать, делить или вычитать строки друг из друга. Dim Text_1 As String*15 ‘Создадим переменную типа String Dim Text_2 As String*15 ‘Создадим переменную типа String Text_1 = "HELLO ” Text_2 = "WORLD!” Text_1 = Text_1 + Text_2 ‘Теперь переменная Text_1 содержит запись – HELLO WORLD! Есть дополнительные операции для работы со строками. Это операции ToUpper, ToLower, Left$, Mid$, Right$ Операция ToLower переводит строку в нижний регистр. ToUpper, соответственно, переводит строку в верхний регистр. Left$ - обрезает строку слева на указанное количество символов. Right$ - обрезает строку справа на указанное количество символов. Mid$ - вырезает часть строки указанной длины из указанного места в строке.
На этом, пожалуй, можно остановиться. Надеюсь, кому-то эта статья покажется нужной и полезной | |||||||||||||||||||||||||||||||||||||||||||||||||||
Просмотров: 10974 | Комментарии: 6 | |
Всего комментариев: 6 | |
| |