我想根据下面的真值表在一个函数中设置各种时钟源。基本上,我想根据传递给setClockSource函数的参数写入TCCR0B寄存器(Atmega328)。表和寄存器的图像如下所示。
我不知道怎样做才是最好的。我考虑将枚举用于各种模式,如下所示。
enum CLOCK_SOURCE{
NO_CLOCK_SOURCE=0x0;
NO_PRESCALING=0x01;
CLK_8=0x02;
// and so on
}
但问题出在setClockSource()函数中,我应该如何在不影响位3-7的情况下写入TCCR0B寄存器?我应该先清除最后3位,然后用TCCR0B对TIMER_MODE值进行OR运算吗?如果不清除,我可能不能保证最后3位的值是正确的。有效的方法是什么?
void setClockSource (enum CLOCK_SOURCE clockSource)
{
TCCR0B&=0xF8; // First Clear last 3 bits
TCCR0B|=clockSource;
}
我们是否有库函数可用于设置时钟源?我用的是Atmega工作室
发布于 2015-07-01 01:33:54
如下所示:
void setClockSource (CLOCK_SOURCE clockSource)
{
TCCR0B = TCCR0B & 0xF8 | clockSource;
}
因此,您将保持高位并设置低位。
https://stackoverflow.com/questions/31144654
复制相似问题