реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как проверить значение бита в CodeVIsion?
andre583
сообщение Mar 15 2008, 21:15
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 7-03-08
Пользователь №: 35 720



Подскажите новичку, как проверить значение бита 0 или 1 с примером на Си
Go to the top of the page
 
+Quote Post
sysel
сообщение Mar 15 2008, 21:29
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(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
}
Go to the top of the page
 
+Quote Post
andre583
сообщение Mar 15 2008, 21:42
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 7-03-08
Пользователь №: 35 720



Спасибо, заработало!!! Вопрос касался переменной считанной по I2C.
Go to the top of the page
 
+Quote Post
Abckur
сообщение Mar 16 2008, 06:58
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 14-03-08
Пользователь №: 35 904



Цитата(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
}
Go to the top of the page
 
+Quote Post
andre583
сообщение Mar 16 2008, 12:23
Сообщение #5





Группа: Новичок
Сообщений: 8
Регистрация: 7-03-08
Пользователь №: 35 720



Очень изящное решение. Спасибо!!!!
Go to the top of the page
 
+Quote Post
sysel
сообщение Mar 16 2008, 13:47
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(Abckur @ Mar 16 2008, 09:58) *
маски удобно получать сдвигом.


Можно и так. Но у Вашего подхода есть подводные камни для масок размером больше байта.
Например, в некоторых компиляторах выражение (1<<9) может оказаться равным 0, т.к. компилятор думает, что он работает с байтовыми величинами, а не со словами. Решением служит явноее указание типов данных. Но в этом случае получаем "слижкам многа букв" для написания условия.
Поэтому я предпочитаю указывать маски явно. Но это дело вкуса )
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 16 2008, 13:56
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sysel @ Mar 16 2008, 15:47) *
Но в этом случае получаем "слижкам многа букв" для написания условия.
(1ULL << 9). Букв ненамного больше, а вот читаемость текста гораздо выше, чем у 0x0200


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Abckur
сообщение Mar 16 2008, 14:26
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 14-03-08
Пользователь №: 35 904



Цитата(andre583 @ Mar 16 2008, 15:23) *
Очень изящное решение. Спасибо!!!!


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


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

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

Проверить просто - посмотреть в листинге (файл .lst) результат компиляции.

Сообщение отредактировал zltigo - Mar 16 2008, 16:11
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Mar 16 2008, 14:48
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Цитата(Abckur @ Mar 16 2008, 17:26) *
Я его "подсмотрел" на страничке ...

Советую воздержаться от ссылок на данный ресурс. Автор "курса" уже давно является persona non grata на сим форуме (http://electronix.ru/forum/index.php?showtopic=16600)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 14:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016