Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 15.04.2019, 16:58   #1
belperson
Junior Member
 
Аватар для belperson
 
Регистрация: 09.06.2013
Сообщений: 21
Вес репутации: 51/0
belperson will become famous soon enough
По умолчанию Побитная работа с данными

Работаю в mikroc pro for pic
В хэлпе указано что можно работать с конкретным битом переменной добавив к названию переменной точку, букву F и номер нужного бита, например. PORTA.F5, или temp.F6.
Вопрос в следующем коде:
buffer_message_2.F1 и buffer_message_2.F1 биты переменной buffer_message_2. Создал условия при которых они равны 1 каждый.
Нужно что бы на RB1 была единица при выполнении условий
Так вот:
Пример 1 (работает):
Код:
char control = 0b00000000;
//buffer_message_2.F1 = 1;
buffer_message_2.F1 = 1;
control.F1 = buffer_message_2.F1;
control.F0 = buffer_message_2.F0;
if (control == 0b00000011) PORTB.F1 = 1;
Пример 2 (работает):
Код:
char control = 0b00000000;
buffer_message_2.F1 = 1;
//buffer_message_2.F1 = 1;
control.F1 = buffer_message_2.F1;
control.F0 = buffer_message_2.F0;
if (control == 0b00000011) PORTB.F1 = 1;
Пример 1 (не работает):
Код:
char control = 0b00000000;
//buffer_message_2.F1 = 1;
//buffer_message_2.F1 = 1;
control.F1 = buffer_message_2.F1;
control.F0 = buffer_message_2.F0;
if (control == 0b00000011) PORTB.F1 = 1;
биты 1 и 2 переменной buffer_message_2 заведомо единицы.
строчками buffer_message_2.F1 = 1;
buffer_message_2.F1 = 1; еще раз ставлю им единицы. Почему не работает пример 3?

Может кто лучше знает как из бит одной переменной собрать побитно число в другой переменной?

Последний раз редактировалось belperson; 15.04.2019 в 17:01. Причина: выделил примеры
belperson вне форума   Ответить с цитированием
Старый 15.04.2019, 17:33   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,140
Вес репутации: 4017/87
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Побитная работа с данными

belperson
на мой взгляд данная функциональность mikroc pro for pic вредит Вам.
позволяет Вам написать запутанный код.

может что-нибудь попроще?
Код:
const b8 is_foo = 0 < (buffer_message_2 & (1 << 1));
const b8 is_bar = 0 < (buffer_message_2 & (1 << 0));

if(is_foo && is_bar){
...
}
besogon вне форума   Ответить с цитированием
Старый 15.04.2019, 18:24   #3
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 24
Сообщений: 296
Вес репутации: 862/39
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Побитная работа с данными

Цитата:
Сообщение от belperson Посмотреть сообщение
Может кто лучше знает как из бит одной переменной собрать побитно число в другой переменной?
В Вашем случае :
Код:
control = buffer_message_2 & 0x03;
перекинет 2 младших бита из buffer_message_2 в control.
al.kl вне форума   Ответить с цитированием
Старый 15.04.2019, 20:44   #4
BarsTmb
Senior Member
 
Аватар для BarsTmb
 
Регистрация: 30.03.2011
Адрес: Тамбов
Возраст: 50
Сообщений: 348
Вес репутации: 1363/47
BarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud of
По умолчанию Re: Побитная работа с данными

Цитата:
Сообщение от belperson Посмотреть сообщение
строчками buffer_message_2.F1 = 1;
buffer_message_2.F1 = 1; еще раз ставлю им единицы.
Ой ли?
__________________
Присмотрелись мы - и действительно!
BarsTmb вне форума   Ответить с цитированием
Старый 16.04.2019, 11:29   #5
belperson
Junior Member
 
Аватар для belperson
 
Регистрация: 09.06.2013
Сообщений: 21
Вес репутации: 51/0
belperson will become famous soon enough
По умолчанию Re: Побитная работа с данными

Цитата:
Сообщение от BarsTmb Посмотреть сообщение
Ой ли?
я ошибся при написании сообщения, в программе f0 и f1.

Немного изменил код, но получаю те же грабли:
Пример 1 (Работает):
Код:
buffer_message_2.F1 = 1;
//buffer_message_2.F0 = 1;
control = buffer_message_2 & 0b00000011;
if (control == 0b00000011) PORTB.F1 = 1;
Пояснение: Пример 1 подтверждает, что в buffer_message_2 0-й бит = 1

Пример 2 (Работает):
Код:
//buffer_message_2.F1 = 1;
buffer_message_2.F0 = 1;
control = buffer_message_2 & 0b00000011;
if (control == 0b00000011) PORTB.F1 = 1;
Пояснение: Пример 2 подтверждает, что в buffer_message_2 1-й бит = 1

Пример 3 (НЕ Работает):
Код:
//buffer_message_2.F1 = 1;
//buffer_message_2.F0 = 1;
control = buffer_message_2 & 0b00000011;
if (control == 0b00000011) PORTB.F1 = 1;
Пояснение: когда беру для сравнения сразу 2 бита, не работает.

П.С. в buffer_message_2 записывается побитно состояние на входе через равные промежутки времени. Выход просто притянут резистором к плюсу. Там всегда высокий уровень.
Может это глюк компилятора?

Цитата:
Сообщение от al.kl Посмотреть сообщение
control = buffer_message_2 & 0x03;
Спасибо. так действительно удобнее.
belperson вне форума   Ответить с цитированием
Старый 16.04.2019, 11:53   #6
belperson
Junior Member
 
Аватар для belperson
 
Регистрация: 09.06.2013
Сообщений: 21
Вес репутации: 51/0
belperson will become famous soon enough
По умолчанию Re: Побитная работа с данными

К предыдущему сообщению (пропала кнопка редактировать):
вход притянут резистором к плюсу питания
belperson вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39
Корректная работа с переменными Gothician Продукция MICROCHIP 4 02.06.2009 22:12
Работа с mikroC из MPLAB Леонид Продукция MICROCHIP 5 16.03.2009 16:54
Неустойчивая работа прерывания PORTB в 18F.... 1977and Продукция MICROCHIP 5 31.12.2008 08:05
Интерфейсы обмена данными .Помогите разобраться. Boris_Britva Микроконтроллеры других производителей 6 10.09.2008 19:27


Часовой пояс GMT +3, время: 13:02.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot