生成/输出时钟脉冲(C代码)



我使用以太网2.1 B,我需要一个C程序,在定时器1输出B输出时钟信号,换句话说输出OCIB。时钟信号的频率应为1.0 kHz。

有人知道这是怎么做到的吗?

您需要查看定时器的COM位。例如,对于Timer0(8位),COM位设置在TCCR0寄存器中。也许你感兴趣的设置是

TCCR0 |= (0<<COM1)|1<<COM0); // Toggle OC0 on compare match

当定时器达到指定值时,将切换OC0 (pin14)行。

你使用哪个计时器取决于你需要的精度:显然16位计时器可以给你更精确的时间分辨率比8位计时器。

特定频率(1Khz)寄存器的设置取决于芯片的时钟速度,以及您正在使用的计时器:计时器使用预缩放的一般时钟信号(请参阅数据表56中的可能值)。这意味着预分频器的设置将取决于您的时钟速度,以及您想要计数多高。对于大多数精度,您将希望计数尽可能高,这意味着与计时器最大值兼容的最低可能的预分频器设置。

至于从哪里开始,一般来说,阅读数据表是一个好地方,但谷歌"AVR定时器"也可以非常有帮助。

它似乎是基于Atmel ATmega 128,所以阅读CPU的数据表来弄清楚如何编程定时器硬件。

不确定这个微控制器是否支持直接驱动定时器的输出,如果不支持,您将不得不在中断服务程序的软件中进行。

最新更新