Реклама на сайте | Помощь сайту   English version | Free likes 
KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Вопросы и ответы по программированию на C для микроконтроллеров PIC.

Вопрос   Есть целое 16-битное (два байта), как получить значение одного из байтов в нем?

Ответ  Ответ: Наверх [Вернуться в категорию "Вопросы и ответы по программированию на C для микроконтроллеров PIC."]
Используйте следующий код:

unsigned int x;
unsigned char y;
#define hibyte ( x ) ( unsigned char ) ( x >> 8 )
#define lobyte ( x ) ( unsigned char ) ( x & 0xFF )

Пример:

x = 0x1234;
y = hibyte ( x ); // итак y = 0x12
y = lobyte ( x ); // итак y = 0x34

Примечание: если у компилятора включена оптимизация, то операция сдвига вправо на 8 выполнена не будет, а будет возвращено прямо значение байта. Обязательно нужно использовать операцию приведения типа (см. учебники по С). Применение объединений (union) не всегда желательно, потому что передача функции объединения в качестве параметра более трудное.
Вышеуказанный метод хорош для просмотра переменных в любых банках. Но для их изменения нужно использовать указатели. Для каждого банка необходимы свои определения:

#define lobyte_atbank0(x) (unsigned char)(*(((unsigned char *)&x)+0))
#define hibyte_atbank0(x) (unsigned char)(*(((unsigned char *)&x)+1))
#define lobyte_atbank1(x) (unsigned char)(*(((bank1 unsigned char *)&x)+0))
#define hibyte_atbank1(x) (unsigned char)(*(((bank1 unsigned char *)&x)+1))

и так далее.

[Вопросы и ответы по программированию на C для микроконтроллеров PIC.]

Новости
[06/02/2019] Конференция в МГТУ им. Баумана «Технологии разработки и отладки сложных технических систем» 2019
[09/05/2018] Грандиозная майская распродажа на Gearbest!
[16/05/2017] С 15 по 17 мая в магазине Gearbest проходит грандиозный флэшсейл
[10/05/2017] Так что же такое Спиннер?
[05/12/2016] Новый Год и Рождество с GearBest!
Читать все новости >>
Каталог схем
PDA - интерфейсы и схемы Автозвук Автомобиль Аудио Безопасность Бытовая электроника Видео Видеокамеры Высоковольтные Генераторы Игры, развлечения Измерения Интерфейсы Коммутация Компьютер Медицина Моделирование/ Роботы Музыка Передатчики Питание Получение и накопление данных Предусилители Радио Разное Ремонт Ретро Свет/Лазер/ Cветодиоды/IR Сети Солнечная энергия Сотовая связь ТВ-Мониторы Телефония Управление двигателями Фильтры Цифровые/ Микроконтроллеры Electronic circuits Datasheets Каталог схем Принципиальные схемы
Мicrocontrollers
Drivers for LED dispays Data Logger for iButton LCD-module with MCS-51 Thermometers Dallas Semiconductor Work with EEPROM 24LCxx MSP430 with Flash-memory ATmega169 and AVR-Baterfly CAN interface USB interface
Избранные схемы
Arduino Аудио В Вашу мастерскую Видео Для автомобиля Для дома и быта Для начинающих Зарядные устройства Измерительные приборы Источники питания Компьютер Медицина и здоровье Микроконтроллеры Музыкантам Опасные, но интересные конструкции Охранные устройства Программаторы Радио и связь Радиоуправление моделями Световые эффекты Связь по проводам и не только... Телевидение Телефония Узлы цифровой электроники Фототехника Шпионская техника
Пользователи
Создано аккаунтов:
Сегодня: 0
Вчера: 0
Всего: 146142

Статистика:

 © 2003—2024 «Электронный портал»Обр@тная связь