我使用的是Ethernut 2.1 B,我需要一个C程序,它在定时器1输出B输出一个时钟信号,在输出OCIB上输出其他字样。时钟信号的频率应为1.0 kHz。
任何人都知道如何做到这一点?
答案 0 :(得分:0)
它似乎基于Atmel ATmega 128,因此请阅读CPU的数据表,以了解如何对定时器硬件进行编程。
不确定这个微控制器是否支持直接驱动定时器的输出,如果不是,你将不得不在中断服务程序的软件中进行。
答案 1 :(得分:0)
您需要查看COM
位作为计时器。例如,对于Timer0(8位),COM
位在TCCR0
寄存器中设置。可能你感兴趣的设置是
TCCR0 |= (0<<COM1)|1<<COM0); // Toggle OC0 on compare match
当定时器达到指定值时,将切换OC0(引脚14)线。
您使用哪个定时器取决于您需要的精度:显然,16位定时器可以为您提供比8位定时器更精确的时间分辨率。
针对特定频率(1Khz)的寄存器设置取决于芯片的时钟速度以及您使用的定时器:定时器使用预定标的通用时钟信号(参见数据表的表56)值)。这意味着预分频器设置将取决于您的时钟速度以及您想要计算的高度。对于大多数精度,您需要计数尽可能高,这意味着可能的最低预分频器设置与您的定时器的最大值兼容。
从哪里开始,一般来说,阅读数据表是个好地方,但谷歌搜索“AVR计时器”也非常有帮助。