Например TDA7294

Форум РадиоКот • Просмотр темы - Выборочное чтение битов Atmel Studio C/C++ ?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 07:15:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Выборочное чтение битов Atmel Studio C/C++ ?
СообщениеДобавлено: Вт июл 17, 2018 19:39:05 
Прорезались зубы

Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27
Сообщений: 213
Рейтинг сообщения: 0
Как считать биты, допустим, № 0, 1, 5, 7 из переменной unsigned char и послать их последовательно (задержку я потом поставлю) на пин №5 порта PORTB в Atmel Studio на C/C++ ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Выборочное чтение битов Atmel Studio C/C++ ?
СообщениеДобавлено: Вт июл 17, 2018 20:15:28 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 1
Медали: 1
Мявтор 3-й степени (1)
Например, так:
Код:
#define setBit(var, n) (var |= (1 << (n)))
#define clrBit(var, n) (var &= ~(1 << (n)))
#define tstBit(var, n) (var & (1 << (n)))

unsigned char var;

//...

if(tstBit(var, 0)) setBit(PORTB, 5);
else clrBit(PORTB, 5);

if(tstBit(var, 1)) setBit(PORTB, 5);
else clrBit(PORTB, 5);

if(tstBit(var, 5)) setBit(PORTB, 5);
else clrBit(PORTB, 5);

if(tstBit(var, 7)) setBit(PORTB, 5);
else clrBit(PORTB, 5);

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Выборочное чтение битов Atmel Studio C/C++ ?
СообщениеДобавлено: Вт июл 17, 2018 20:31:36 
Прорезались зубы

Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27
Сообщений: 213
Рейтинг сообщения: 0
А попроще никак?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Выборочное чтение битов Atmel Studio C/C++ ?
СообщениеДобавлено: Вт июл 17, 2018 20:50:49 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 1
Медали: 1
Мявтор 3-й степени (1)
Да куда уж проще... Конечно, кода много (в символах), но нормальный компилятор каждый if/else превратит в 5 - 6 ассемблерных команд.

Если хочется покороче, можно использовать такой макрос:
Код:
#define cpyBit(dst, dst_n, src, src_n) (dst = ((dst) & (~(1 << (dst_n)))) | (((src) & (1 << (src_n))) ? (1 << (dst_n)) : 0))

Применять так:
Код:
cpyBit(PORTB, 5, var, 0);
cpyBit(PORTB, 5, var, 1);
cpyBit(PORTB, 5, var, 5);
cpyBit(PORTB, 5, var, 7);

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Выборочное чтение битов Atmel Studio C/C++ ?
СообщениеДобавлено: Вт июл 17, 2018 21:09:22 
Прорезались зубы

Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27
Сообщений: 213
Рейтинг сообщения: 0
Второй вариант жрёт лишних 30 байт Program Memory Usage, по сравнению с первым.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Выборочное чтение битов Atmel Studio C/C++ ?
СообщениеДобавлено: Вт июл 17, 2018 21:20:03 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 1
Медали: 1
Мявтор 3-й степени (1)
Конечно, это нормально. Компилятор не может догадаться, что там простые битовые операции, и не использует команды cbi / sbi. В первом случае догадывается.

Можно первый вариант целиком в макрос завернуть:
Код:
#define cpyBit(dst, dst_n, src, src_n) do{                           \
                                         if((src) & (1 << (src_n)))  \
                                           dst |= (1 << (dst_n));    \
                                         else                        \
                                           dst &= ~(1 << (dst_n));   \
                                       }while(0);


То же самое, но с тернарным оператором:
Код:
#define cpyBit(dst, dst_n, src, src_n) (((src) & (1 << (src_n))) ? (dst |= (1 << (dst_n))) : (dst &= ~(1 << (dst_n))))

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Varlakotam и гости: 21


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y