Тип данных – бит

Views: 1469


  1. Тип данных – бит
  2. Битовые операции (установка, сброс и инвертирование бита)
  3. Тестирование бита в байте

Бит

Компилятор XC8 поддерживает разрядные целочисленные типы, которые могут содержать значения  0 или 1. Чтобы обеспечить максимальное удобство программиста при решении задач, связанных с манипуляциями отдельными битами, был введен дополнительный тип данных – бит (bit). Переменные этого типа описываются как обычно:

static bit init_flag;

Переменные типа бит не могут иметь модификатор auto и не могут передаваться в функцию в качестве аргумента, но функция может возвращать значение типа бит. По большому счету переменные этого типа ведут себя как обычные переменные типа unsigned char, но при этом могут принимать значение 0 или 1. Поэтому их удобно использовать для определения различных логических переменных и флагов. Такой подход значительно экономит оперативную память. Компилятор не позволяет создавать указатели типа бит или статически инициализировать переменные этого типа.

Все операции с переменными типа бит выполняются с помощью бит-ориентированных инструкций ассемблера, насколько это вообще возможно, при этом создается очень эффективный и компактный код. Если попытаться присвоить переменной типа бит целое значение, то будет сохранен только младший бит.

Все переменные этого типа упаковываются таким образом, что 8 переменных типа бит в памяти займут один байт.


Битовые операции (установка, сброс и инвертирование бита)

Примеры:

// устанавливается бит (биты) в позиции «1»
foo |= 0b00010000; 
foo |= 0b00010100; 

// сбрасывается бит (биты) в позиции «0»
foo &= 0b10111111;
foo &= 0b10111011;

// инвертируем биты порта
LATB2 = !LATB2;

// инвертирование бита описанного в структуре
Bit.MIG =  !Bit.MIG;

// инвертирование бита в позиции «1»
foo ^= 0b00010000;

// варианты записей
// инвертирование бита 0
leds ^= 1;
// инвертирование бита 1
leds ^= (1<<1);
// инвертирование бита 2
leds ^= (1<<2);
// инвертирование бита 3
leds ^= (1<<3);

Для более наглядного использования работы с битами принятого в ассемблере, можно в начале программы описать макросы для установки,  для очистки и инвертирования бита в переменной:

#define bitset(var,bitno) ((var) |= 1<<(bitno)); 	// установить
#define bitclr(var,bitno) ((var) &= ~(1<<(bitno)));	// сбросить
#define bitbtg(var,bitno) ((var) ^= 1<<(bitno));	// инвертировать

1UL – константа 1 указывается unsigned long – положительное длинное

#define bitset(var,bitno) ((var) |= 1UL<<(bitno)); 	// установить
#define bitclr(var,bitno) ((var) &= ~(1UL <<(bitno)));	// сбросить
#define bitbtg(var,bitno) ((var) ^= 1UL <<(bitno));	// инвертировать

Пример:

unsigned int foo;

	bitset(foo,14);  // установить бит 14
	bitclr(foo,14);   // сбросить бит 14
	bitbtg (foo,14); // инвертировать бит 14  
	foo |= 0b0101; // установить 0 и 2 биты

Тестирование бита в байте

Для тестирования бита в байте можно применить,
например,

//тестируем бит 7 на ноль
if(!(PORTB & 0b10000000))

//тестируем бит 7 на единицу
if(PORTB & 0b10000000)


Это может быть интересно


  • PIC18F25K42 – v. A001 – выявленные баги.PIC18F25K42 – v. A001 – выявленные баги.
    Views: 615 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Views: 2686 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • MPLAB® Code Configurator and EncoderMPLAB® Code Configurator and Encoder
    Views: 1420 Еще раз про энкодер… Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора …
  • WiFi ESP8266 – AT команды связанные с функцией Wi-FiWiFi ESP8266 – AT команды связанные с функцией Wi-Fi
    Views: 5303 AT команды связанные с функцией Wi-Fi Функции Wi-Fi подключения, запускаться из командной строки Команда Описание  1 AT+CWMODE Проверка, настройка режима работы Wi-Fi (sta/AP/sta+AP), (не рекомендуется для новых проектов). 2 …
  • VU Meter Tower ARTVU Meter Tower ART
    Views: 1611 Стерео индикатор уровня аудио сигнала. Компактность и удобство проектирования устройств на светодиодах WS2812B, а также легкость реализации алгоритма родило идею созданию своей конструкции. В этом проекте я предоставлю …
  • WiFi ESP8266 ESP-202 (ESP-12F)WiFi ESP8266 ESP-202 (ESP-12F)
    Views: 7698 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …
  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Views: 863 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …
  • Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3
    Views: 3489 Технология обновления следующая: Загружаем программу со страницы espressif.com. Разархивируем. Где находятся файлы, для прошивки? Заходим в каталоги Подключаем по схеме в статье WiFi ESP8266 (замыкаем BT2, перемычка). Запускаем программу, …
  • Самый простой индикатор уровня звукового сигналаСамый простой индикатор уровня звукового сигнала
    Views: 6321 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете  самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …
  • Бегущие огни на WS2812BБегущие огни на WS2812B
    Views: 4869 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …



Поделись этим!