Arduino中断编程

时间:2015-03-13 06:58:45

标签: arduino interrupt

所以我必须对中断做一个小任务,我需要知道这些代码行是什么意思:

TCCR1A = 0;
TCCR1B = 0;
TCCR1B |= (1 << CS12);

1 个答案:

答案 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

这就是最后一行的神奇之处:

  1. CS12是TCCR1B寄存器的第2位,因此其值为2.
  2. 整数1的值为0b00000001
  3. <<运算符是一个逻辑左移操作,它接受左操作数,并将其位向左移位右操作数指示的位数。在这种情况下,这意味着0b00000001变为0b000000100。
  4. |=运算符获取左操作数的值,将其与右操作数的值进行或运算,并将结果赋回左操作数位置。
  5. 该代码的结果是TCCR1A以所有位清零结束,TCCR1B将所有位清除为第2位。

    以下是有关TCCRx寄存器的更多信息,它们解释了这些分配实际完成的内容:

    http://letsmakerobots.com/content/arduino-101-timers-and-interrupts