mug*_*tsu -1 c avr bit-manipulation
我知道OCIE0A=0001
二进制,所以(1<<OCIE0A)
只是0010?我看到这种情况经常被使用,设置寄存器的原因是什么,(1<<OCIE0A)
而不是直接将其设置为0010?
Moo*_*uck 42
从谷歌搜索的结果来看,它似乎是"8位AVR微控制器"的"定时器/计数器中断屏蔽寄存器"*中控制"定时器/计数器输出比较匹配A中断"的位的名称*"*其用法如下*:
TIMSK0 |= _BV(OCIE0A); // enable compare A interrupts
TIMSK0 &= ~_BV(OCIE0A); // disable compare A interrupts
Run Code Online (Sandbox Code Playgroud)
TIMSK0
*定时器中断屏蔽寄存器*在哪里? OCIE0A
是一个标识符(对于熟悉AVR代码的人*)比TIMSK0 |= 2
*更容易理解*.
他们使用位标识符而不是掩码,因为任何halfwit编译器都可以针对bit-> mask将它们优化为相同的东西,但是从mask-> bit开始更难*.因此,通过将其作为bitid,它可以轻松快速地用于所有用途*.
在不相关的注释中,数字是在计算机中以二进制形式存储的值."十进制"和"十六进制"是这些值的表示.所以不,OCIE0A不是"十六进制".它是表示标志位偏移的符号,值为1.
*到处都是假设,我什么都不知道