Объявление переменных в языке программирования C-51 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объявление переменных в языке программирования C-51



Описание переменных в языке программирования C имеет огромнейшее значение, так как именно оно в большинстве случаев определяет объем программы. Обычно большой объем загрузочного модуля программы вызван неправильным объявлением переменных в исходном тексте программы. Обращение к внутренним регистрам микроконтроллеров и внешним ресурсам разрабатываемого устройства тоже производится при помощи заранее объявленных переменных.

В языке программирования C‑51 любая переменная должна быть объявлена до первого использования этой переменной. Как уже говорилось ранее, этот язык программирования предназначен для написания программ для микроконтроллеров семейства MCS-51, поэтому в составе языка должна отображаться внутренняя структура этого семейства микроконтроллеров. Эти особенности отражены во введении новых типов данных. В остальном язык программирования C-51 не отличается от стандарта ANSI.

Объявление переменной в языке программирования C‑51 представляется в следующем виде:

 

[спецификатор класса памяти] спецификатор типа [спецификатор типа памяти] описатель [=инициатор] [,описатель [= инициатор] ]...

Описатель — идентификатор простой переменной либо более сложная конструкция с квадратными скобками, круглыми скобками или звездочкой (набором звездочек).

Спецификатор типа — одно или несколько ключевых слов, определяющих тип объявляемой переменной. В языке C‑51 имеется стандартный набор типов данных, используя который можно сконструировать новые (уникальные) типы данных.

Инициатор задает начальное значение или список начальных значений, которые (которое) присваивается переменной при объявлении.

Спецификатор класса памяти определяется одним из четырех ключевых слов языка C: auto, bit, extern, register, sbit, sfr, sfr16 static auto, extern, register, static, и указывает, каким образом будет распределяться память под объявляемую переменную с одной стороны, а с другой, область видимости этой переменной, т.е., из каких частей программы можно к ней обратиться.

Спецификатор типа памяти определяется одним из шести ключевых слов языка С-51: code, data, idata, bdata, xdata, pdata и указывает, в какой области памяти микроконтроллера будет размещена переменная.

Категории типов данных

Ключевые слова для определения основных типов данных:

Целые типы данных: Типы данных с плавающей запятой: bit float sbit char int short long signed unsigned sfr sfr16

Переменная любого типа может быть объявлена как неизменяемая. Это достигается добавлением ключевого слова const к спецификатору типа. Объекты с типом const представляют собой данные, используемые только для чтения, т.е. этой переменной не может быть присвоено новое значение. Отметим, что если после слова const отсутствует спецификатор типа, то подразумевается спецификатор типа int. Если ключевое слово const стоит перед объявлением составных типов (массив, структура, смесь, перечисление), то это приводит к тому, что каждый элемент также должен являться немодифицируемым, т.е. значение ему может быть присвоено только один раз.

Примеры использования ключевого слова const:

 

const float A=2.128E-2; const B=286; //подразумевается const int B=286

Отметим, что переменные со спецификатором класса памяти размещаются во внутреннем ОЗУ. Неизменяемость контролируется только на этапе трансляции. Для размещения переменной в ПЗУ лучше воспользоваться спецификатором типа памяти code

Целые типы данных

Для определения данных целого типа используются различные ключевые слова, которые определяют диапазон значений и размер области памяти, выделяемой под переменные (табл. 22.7).

Отметим, что ключевые слова signed и unsigned необязательны. Они указывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый.

В случае отсутствия ключевого слова unsigned целая переменная считается знаковой. В том случае, если спецификатор типа состоит из ключевого типа signed или unsigned и далее следует идентификатор переменной, то она будет рассматриваться как переменная типа int. Например:

 

unsigned int n; //Беззнаковое шестнадцатиразрядное число nunsigned int b;int c; //подразумевается signed int cunsigned d; //подразумевается unsigned int dsigned f; //подразумевается signed int f

Таблица 22.7.

Тип Размер памяти в битах Размер памяти в байтах Диапазон значений
bit     от 0 до 1
char     от –128 до 127
unsigned shar     oт 0 до 255
int, short     от –32768 до 32767
long     от –2 147 483 648 до 2 147 483 647
unsigned int, unsigned short     от 0 до 65535
unsigned long     от 0 до 4 294 967 295
sbit     0 или 1
sfr     oт 0 до 255
sfr16     от 0 до 65535

 

Отметим, что модификатор типа char используется для представления одиночного символа или для объявления строковых литералов. Значением объекта типа char является код (размером 1 байт), соответствующий представляемому символу.

Отметим также, что восьмеричные и шестнадцатеричные константы также могут иметь модификатор unsigned. Это достигается указанием суффикса u или U после константы, константа без этого префикса считается знаковой.

Например:

 

0xA8C //int signed01786l //long signed0xF7u //int unsigned

Числа с плавающей запятой

Для переменных, представляющих число с плавающей запятой используется модификатор типа float. Модификатор double тоже допустим в языке программирования C‑51, но он не приводит к увеличению точности результата.

Величина с модификатором типа float занимает 4 байта. Из них 1 бит отводится для знака, 8 бит для смещенного порядка и 23 бита для мантиссы. Отметим, что старший бит мантиссы всегда равен 1, поэтому он не запоминается в памяти микроконтроллера, в связи с этим диапазон значений переменной с плавающей точкой равен от ±1.175494E–38 до ±3.402823E+38.

Пример объявления переменной с плавающей запятой:

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 203; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.80.211.101 (0.009 с.)