portd



Автор Денис задал вопрос в разделе Другие языки и технологии

PORTD|=0x02 PORTD&=0xFD объясните как так происходит что определенный бит устанавливается в 1 или 0 ? и получил лучший ответ

Ответ от
Дак тут всё просто.
PORTD |= 0x02; - это то же самое, что PORTD = PORTD | 0x02;
То есть проводим операцию побитового "или" между тем, что в порту имеется и 0x02. Побитовое - это значит каждый битик из PORTD складывается по "или" с битиком числа 0x02. А если ты в курсе, что такое операция "или", то знаешь, что она принимает истинное значение если хотя бы один из операндов равен "истине".
Например, в порту D уже лежит значение 0b10110001, то выполнив операцию PORTD |= 0x02 ты получишь следующее: 0b10110001 | 0b00000010 = 0b10110011. Как видишь, установился 1-й бит, а остальные не изменились. Ну или на пальцах:
1 OR 0 = 1
0 OR 0 = 0
1 OR 0 = 1
1 OR 0 = 1
0 OR 0 = 0
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
Это мы рассмотрели установку определенного бита в "1". А как работает второе выражение, устанавливая определенные биты в "0" - попытайся подумать сам, помня, что операция "И" даёт "0" если хотя бы один из битов равен нулю.

Ответ от Андрей[гуру]
Ну так возьми любой справочник и посмотри, что такое "битовые операции". И как именно работают с битами операции AND и OR.

Ответ от Максим (На почту не отвечаю)[гуру]
Смотря как ты глубоко капаешь !
Если тебе интересна сама структура то тут все просто - представь транзистор - он может принимать два положения - замыкать цепь и размыкать - восемь транзисторов это один байт - один транзистор это один бит !
В коде выглядит так - 00000000 (1 байт - все транзисторы открытые) - предположим что мне нужно записать некие данные - я посылаю сигнал нужному транзистору и он закрывается (тем самым замыкает цепь)
в итоге комп считывает этот байт и после оприделяет что за значение в нем имелось в виду !
Теперь что бы записать нужный байт это хорошо показывает Матрицы которые нужны для расчета 3д графики (в играх) - Не буду обьяснять эта тема длинная - приведу проще пример !
Для таких вещей обычно создают макросы - со значениями от 0х00000001 и до 0х10000000 - то есть один бит двигается в лево - восемь макросов
Предположим тебе нужно в байте устоновить 3 - 5 и 8 бит в еденицу (я не буду приводить макросы а в место них подставлю ихние значения)
Так вот берешь свой байт
char bayt =0; // 0х00000000
и далее просто сплюсовываешь макросами те байты которые нужно устоновить в еденицу
bayt = 0x00100000 + 0x00001000 + 0x00000001 ;
Далее вступает правило сложение битов (ничего сложного - тот же метод что и в десятичной )
00100000+
00001000+
00000001=
00101001
вот так выстовляют нужный бит в 1 или 0 !
Оригенальное все просто !

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: PORTD|=0x02 PORTD&=0xFD объясните как так происходит что определенный бит устанавливается в 1 или 0 ?
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*