我知道二进制中的OCIE0A=0001,所以(1<<OCIE0A)只是0010吗?我看到它经常使用,将寄存器设置为(1<<OCIE0A)而不是直接将其设置为0010的原因是什么?

最佳答案

从Google搜索的结果来看,它似乎是“ 8位AVR微控制器”的“定时器/计数器中断屏蔽寄存器” *中控制“定时器/计数器输出比较匹配A中断” *的位的名称。 “ *其用法如下*:

TIMSK0 |= _BV(OCIE0A);  // enable compare A interrupts
TIMSK0 &= ~_BV(OCIE0A); // disable compare A interrupts


其中TIMSK0是*定时器中断屏蔽寄存器*。 OCIE0A是一个标识符(对于熟悉AVR代码的人*)比TIMSK0 |= 2 *更容易理解*。

他们使用位标识符而不是掩码,因为任何Halfwit编译器都可以针对bit-> mask将它们优化为相同的东西,但是从mask-> bit进行比较困难*。因此,通过将其保留为bitid,可以轻松快速地进行所有使用*。

无关紧要的是,数字是作为二进制形式存储在计算机中的值。 “十进制”和“十六进制”是这些值的表示。所以不,OCIE0A不是“十六进制”。它是代表标志位偏移量的符号,值为1。

*到处都是假设,我一无所知

09-11 18:49