Views: 1597
Работа с многобайтными переменными.
Например, нам необходимо получить данные из таймера (16 разрядный режим) TMR0 и записать в 16 разрядной переменной «i».
Сделать это можно так:
i = TMR0L; // загружаем значение младшего байта (при этом с таймера загружается регистр TMR0H) i += TMR0H << 8; // сдвигается на 8 бит и загружается старший байт
Преобразование типов. Обратите внимание, если вам необходимо будет производить загрузку в переменную i-длиной 24 бита, то при загрузке будет ошибка. Для правильной загрузки создайте временную переменную в 16 бит, а потом её перегрузите в 24 битную.
temp=TMR1L; temp+=TMR1H<<8; i =temp;
Формат данных
Целые типы данных
XC8 MPLAB компилятор поддерживает целые типы данных с 1, 2, 3 и 4 байта размеров, а также один тип бита. В таблице приведены типы данных и их соответствующий размер и арифметический тип. Тип по умолчанию для каждого типа указывается.
Тип | Размер (в битах) | Арифметический тип | Диапазон |
bit | 1 | Целое без знака | 8 (от 1 до 8 бит занимает в памяти 1 байт) |
signed char | 8 | Целое со знаком | -127 +127 |
unsigned char | 8 | Целое без знака | 0-255 |
signed short | 16 | Целое со знаком | -32 767 + 32 767 |
unsigned short | 16 | Целое без знака | 0-65 535 |
signed int | 16 | Целое со знаком | -32 767 + 32 767 |
unsigned int | 16 | Целое без знака | 0-65 535 |
signed short long | 24 | Целое со знаком | -8 388 607 + 8388607 |
unsigned short long | 24 | Целое без знака | 16 777 215 |
signed long | 32 | Целое со знаком | -2 147 483 647 +2 147 483 647 |
unsigned long | 32 | Целое без знака | 0-4 294 967 295 |
signed long long | 32 | Целое со знаком | -2 147 483 647 +2 147 483 647 |
unsigned long long | 32 | Целое без знака | 0-4 294 967 295 |
int data = 0x54; bit bitvar; bitvar = data; //------------------------------------ int func(void) { static bit flame_on; // ... }
Числа с плавающей запятой
Type | Size (bits) | Arithmetic Type |
float | 24 or 32 | Real |
double | 24 or 32 | Real |
long double | same as double | Real |
Format | Number | Biased exponent | 1.mantissa | Decimal |
32-bit | 7DA6B69Bh | 11111011b | 1.0100110101101101 0011011b |
2.77000e+37 |
(251) | (1.302447676659) | |||
24-bit | 42123Ah | 10000100b | 1.001001000111010b | 36.557 |
(132) | (1.142395019531) |
Диапазон значений чисел с плавающей точкой
Symbol | Meaning | 24-bit Value | 32-bit Value |
XXX_RADIX | Radix of exponent representation | 2 | 2 |
XXX_ROUNDS | Rounding mode for addition | 0 | 0 |
XXX_MIN_EXP | Min. n such that FLT_RADIXn-1 is a normalized float value |
-125 | -125 |
XXX_MIN_10_EXP | Min. n such that 10n is anormalized float value | -37 | -37 |
XXX_MAX_EXP | Max. n such that FLT_RADIXn-1 is a normalized float value |
128 | 128 |
XXX_MAX_10_EXP | Max. n such that 10n is a normalized float value |
38 | 38 |
XXX_MANT_DIG | Number of FLT_RADIX mantissadigits | 16 | 24 |
XXX_EPSILON | The smallest number which added to 1.0 does not yield 1.0 |
3.05176e-05 | 1.19209e-07 |
volatile float myFloat; myFloat = 95002.0; if(myFloat == 95001.0) // value will be rounded PORTA++; // this line will be executed!
Формат ввода чисел (литералов)
Литерал | Формат | Пример цветом признак формата |
Двоичный | 0b<число> или 0B<число> | 0b10011001 |
Восьмеричный | 0<число> | 0345 |
Десятичный | <число> | 129 |
Шестнадцатеричный | 0x<число> или 0X<число> | 0x2F |