在处理I/O口时,你会发现每个I/O口都配备了三个8位的寄存器:方向控制寄存器DDRx,数据寄存器PORTx,以及输入引脚寄存器PINx。它们共同决定了I/O口的操作方式和表现特征,弄懂它们可不是一件容易的事,但我们可以一步步来。
首先,DDRx这个寄存器,它就像一个开关,决定了I/O口是处于输出还是输入状态。当你把DDRx设置为1时,I/O口就变成了输出模式,此时,它会根据PORTx寄存器的值来输出高电平或低电平。这就像你决定要把灯打开还是关上,PORTx就是你选择的开关位置。
反过来,如果你把DDRx设置为0,I/O口就变成了输入模式。这时候,你需要关注的是PINx寄存器,因为它反映了外部引脚的实际电平。你得记住,读数据时应该读PINx,而不是PORTx。这就像你想知道外面天亮了没有,你得看看窗外,而不是看你屋里的灯是不是亮着。
还有一个小细节,当I/O口处于输入模式(DDRx=0)时,PORTx寄存器还有一个用途,它可以和PUD寄存器一起设置内部的上拉电阻。当DDRx=0,PORTx=1,而且PUD=0时,上拉电阻就生效了。其他情况下,上拉电阻都是无效的。这就像你把一个电阻接在电路上,有时候它起作用,有时候它就像不存在一样。
希望这些解释能帮你更好地理解I/O口的工作原理。别担心,如果你现在还没完全搞懂,多花点时间琢磨琢磨,慢慢就会明白了!