PIND读取的最大速度

时间:2015-06-03 11:49:58

标签: avr

我有一个方波,我想输入一个avr。我打算将PORTD配置为输入,然后使用PIND读取输入的状态。如果一个人做某事,反之亦然。频率非常快20khz。如何确保read语句能够像输入更改一样快速地工作?

提前致谢!

1 个答案:

答案 0 :(得分:0)

使用IN运算符访问PIND寄存器需要1个系统时钟。因此,您每秒可以进行数百万次PIND拉动操作。

输入引脚值之间的延迟发生变化,应用程序对它做出反应取决于应用程序的编写方式。

要达到最小延迟,当您的应用程序处于空闲状态时,您可以使用以下循环:

loop:
   sbis PIND, 0
   rjmp loop
// exits when input level on PD0 become high.

如果您的应用程序执行某些操作,您可以使用引脚更改中断(取决于您使用的设备)。 中断通常需要更多的系统时钟:4个时钟进入中断,通常4-10个来保存寄存器和SREG

请注意,应用于输入引脚的更改电平之间的延迟,以及此值在PINx寄存器中变为可见,总是在系统时钟的0.5到1.5范围内。

如果你对引脚电平变化的反应不感兴趣,你可以懒得拉它。当CPU以8MHz,20kz运行时,电平变化之间的CPU周期为200个CPU。