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