使用预分频器确定微控制器 (AVR) 中时钟周期的周期

Use prescalor to determine the period of a clock cycle in microcontrollers (AVR)

我对 AVR 和微控制器编程还很陌生。 Timer/Counter中的一些概念我不是很明白。今天看书发现这个问题:

Generate an active high 1 KHz digital waveform with 30 percent duty cycle from the OC1A (PB1) pin. Use the polling method to check the success of the output compare operation. The frequency of the clock is 16 MHz.

给出的解决方案是这样的:

Solution: Setting the prescaler to 8, then the period of the clock signal to the TCNT will be 0.5 usec. The numbers of clock cycles that the signal is high and low are 600 and 1400, respectively.

我真的不明白为什么将预分频器设置为 8 会使时钟信号的周期为 0.5 微秒?有人可以向我解释这里的数学吗?那么,考虑到这一点,为什么时钟周期数会是 600 和 1400?这些数字从何而来?

我认为我不理解解决方案与不理解预分频器的确切概念有关。我的理解是,假设时钟频率为 16 MHz,如果预分频器为 8,则输出频率为 2 MHz。如果我错了,请纠正我。非常感谢!

是的,你是对的。 16MHz 上的 8 预分频器将频率降低至 2MHz。每个刻度将是 1/2,000,000 秒或 0.5 微秒。

问题要求 1kHz 周期,开启 30%,关闭 70%。 1/1kHz 是 1 ms 或 1000 us 或 2000 ticks。其中的 30% 是 600 个刻度,剩下的 70% 是 1400 个刻度。