所以我必须对中断做一个小任务,我需要知道这些代码行是什么意思:
TCCR1A = 0;
TCCR1B = 0;
TCCR1B |= (1 << CS12);
答案 0 :(得分:2)
TCCR1A和TCCR1B是用于寻址Arduino中的Timer#1的宏。这就是这些行正在做的事情:
TCCR1A = 0; // Clear all bits of TCCR1A register
TCCR1B = 0; // Clear all bits of TCCR1B register
TCCR1B |= (1 << CS12); // ORs the current value of TCCR1B with 0b00000100,
// and stores the result back in TCCR1B
这就是最后一行的神奇之处:
<<
运算符是一个逻辑左移操作,它接受左操作数,并将其位向左移位右操作数指示的位数。在这种情况下,这意味着0b00000001变为0b000000100。|=
运算符获取左操作数的值,将其与右操作数的值进行或运算,并将结果赋回左操作数位置。该代码的结果是TCCR1A以所有位清零结束,TCCR1B将所有位清除为第2位。
以下是有关TCCRx寄存器的更多信息,它们解释了这些分配实际完成的内容:
http://letsmakerobots.com/content/arduino-101-timers-and-interrupts