Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как проверить значение бита в CodeVIsion?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
andre583
Подскажите новичку, как проверить значение бита 0 или 1 с примером на Си
sysel
Цитата(andre583 @ Mar 16 2008, 00:15) *
Подскажите новичку, как проверить значение бита 0 или 1 с примером на Си


Если речь идет о бите в порте то:

if (PINA.5){
чего-нибудь делаем в случае если 5й вывод порта А = 1
}

Если речь об проверке бита в переменной или в регистре каком-то то действем с использованием битовых масок.
Маски:
0x01 - bit 0
0x02 - bit 1
0x04 - bit 2
0x08 - bit 3
0x10 - bit 4
0x20 - bit 5
0x40 - bit 6
0x80 - bit 7

Например проверить бит 3 в переменной Value:

if (Value&0x08){
делаем что-то если бит 3й равен 1
}
......

if (!(Value&0x08)){
делаем что-то если бит 3й равен 0
}
andre583
Спасибо, заработало!!! Вопрос касался переменной считанной по I2C.
Abckur
Цитата(sysel @ Mar 16 2008, 00:29) *
Маски:
0x01 - bit 0
0x02 - bit 1
0x04 - bit 2
0x08 - bit 3
0x10 - bit 4
0x20 - bit 5
0x40 - bit 6
0x80 - bit 7


маски удобно получать сдвигом.

вот маска для любого бита (1 << BIT)
BIT - это номер нужного бита

Вот так использовать:

if (Value & (1 << 3)) {
делаем что-то если бит 3й равен 1
}
andre583
Очень изящное решение. Спасибо!!!!
sysel
Цитата(Abckur @ Mar 16 2008, 09:58) *
маски удобно получать сдвигом.


Можно и так. Но у Вашего подхода есть подводные камни для масок размером больше байта.
Например, в некоторых компиляторах выражение (1<<9) может оказаться равным 0, т.к. компилятор думает, что он работает с байтовыми величинами, а не со словами. Решением служит явноее указание типов данных. Но в этом случае получаем "слижкам многа букв" для написания условия.
Поэтому я предпочитаю указывать маски явно. Но это дело вкуса )
Сергей Борщ
Цитата(sysel @ Mar 16 2008, 15:47) *
Но в этом случае получаем "слижкам многа букв" для написания условия.
(1ULL << 9). Букв ненамного больше, а вот читаемость текста гораздо выше, чем у 0x0200
Abckur
Цитата(andre583 @ Mar 16 2008, 15:23) *
Очень изящное решение. Спасибо!!!!


[banned]
Цитата(sysel @ Mar 16 2008, 16:47) *
в некоторых компиляторах выражение (1<<9) может оказаться равным 0, т.к. компилятор думает, что он работает с байтовыми величинами, а не со словами.


Но проги пишут не в некотором абстрактном компиляторе а в конкретном !

Компилятор CVAVR указан в названии топика и он будет интерпритировать
как-то однозначно это выражение.

Проверить просто - посмотреть в листинге (файл .lst) результат компиляции.
Aesthete Animus
Цитата(Abckur @ Mar 16 2008, 17:26) *
Я его "подсмотрел" на страничке ...

Советую воздержаться от ссылок на данный ресурс. Автор "курса" уже давно является persona non grata на сим форуме (http://electronix.ru/forum/index.php?showtopic=16600)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.