потому что
TOIE1
- это положение бита в регистре. Чтобы получить из него битовую маску для изменения регистра, нужно выполнить сдвиг 1<<TOIE1
потому что
TOIE1
- это положение бита в регистре. Чтобы получить из него битовую маску для изменения регистра, нужно выполнить сдвиг 1<<TOIE1
это заслуга тс
Ты правда считаешь, что он этого не знает?
спрашивает же
Где об этом можно почитать?
Почему положение бита в регистре задается именно сдвигом, а не маской?
Где вы увидели что оно задается сдвигом? маской и задается
это маска
Порты ввода/вывода тебя же не смущают?
PORTB |= (1<<PB0);
Или лучше исправить «порты» на «регистры»? А то это же +100 к нудятине может быть
Я понимаю так:
сдвиг маска
0 1
1 2
2 4
3 8
Вопрос: почему для получения маски, я должен применять операцию сдвига?
Почему константа не содержит уже сдвинутый результат?
П#зд@ц, опять нудятину включил…
Наверное так удобнее.
Тем не менее, поскольку мы с @BOOM продемонстрировали, что этот синтаксис не наша выдумка, а идет из оригинального даташита, может вы закончите эту тупую пикировку? Или вам прям оттуда же привести пример использования номера бита через сдвиг - а то я могу
Не следует обо всех судить по себе.
Вот я встречаю запись: TIMSK0 = 1<<TOIE1;
Что я вынужден делать?
Я в папке с Ардуино запускаю поиск файлов, которые содержат строку TOIE1;
, получаю более сотни имен файлов. Теперь я должен угадать, который из этих ~150 файлов мне нужен. В данном случае я понимаю, что мне нужен файл, содержащий в имени название контроллера, но так бывает далеко не всегда, иногда приходится просматривать ВСЕ файлы, чтобы найти искомое. И именно это - самая трудоемкая операция, чтобы понять, что означает 1<<TOIE1;
.
Потом я открываю дэйташит и ищу там уже TIMSK0
, чтобы понять, что именно делается с контроллером.
А если бы было написано сразу TIMSK0 = 0x01;
, то я бы сэкономил кучу времени на поиски, так как ограничился бы поиском только по дэйташиту.
Но при этом кто-то находит запись TIMSK0 = 1<<TOIE1;
более удобной.
Поэтому я предполагаю, что этот кто-то тратит на поиски меньше времени, чем я.
Вот я и хотел бы узнать, как он это делает.
В таком желании есть что-то неправильное?
Если ты такую запись встречаешь - это плохо.
Правильно так:
TIMSK |= (1<<TOIE1);
Открываешь даташит, нажимаешь Ctrl + F и вводишь TIMSK.
ЗЫ: Хотел бы я узнать - а как ты в даташите что-то ищешь? 0x01 вбиваешь?
В названии бита мнемонически закодировано его назначение. Если вы видите ее в первый раз, то разницы между
TIMSK0 = 0x01;
и
TIMSK0 = 1<<TOIE1;
нет.
Однако если вы в целом знакомы с битами соответствующего регистра, но не помните наизусть порядок - то запись через имя бита скажет вам больше, чем просто число.
Например, в этой записи всякий кто имел дело с таймерами - сразу увидит установку прескалера:
TCCR0B |= (1 << CS00) | (1<<CS01);
а тут непонятно что
TCCR0B |= 0b00000011;
Это исключительно от того, что вы не подозревали, что бит TOIE1
тоже определен в даташите, более того - на той же самой странице что и TIMSK0
Развивайтесь - и не надо будет искать в куче файлов…
Возможно идёт ещё с ассемблера, где развиты операции с битами.
P.S. Так сказать, традиция))
а потом пишешь
*(0x39) |= 0b00000100 ;
лучше так
#define TRUE FALSE