【摘要】:ATmega16的4个8位的端口都有各自对应的3个I/O端口寄存器,它们占用了I/O空间的12个地址,如表6-2所示。使用I/O口寄存器时需注意的事项是:正确使用AVR的I/O口要注意:先正确设置DDRx方向寄存器,再进行I/O口的读写操作。AVR的I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。在硬件电路设计时,如能利用AVR内部I/O口的上拉电阻,可以节省外部的上拉电阻。
ATmega16的4个8位的端口都有各自对应的3个I/O端口寄存器,它们占用了I/O空间的12个地址,如表6-2所示。
表6-2 ATmega16I/O寄存器地址表
下面是PA口寄存器——PORTA、DDRA、PINA各个位的具体定义,以及其是否可以通过指令读写操作和RESET复位后的初始值。其他3个口的寄存器的情况与PA口相同,只是地址不一样。
使用I/O口寄存器时需注意的事项是:
正确使用AVR的I/O口要注意:先正确设置DDRx方向寄存器,再进行I/O口的读写操作。
只有DDRxn=0即管脚定义为输入状态,并且PORTxn=1,而且UPD设置为0时,上拉电阻才生效。(www.xing528.com)
Pxn无论在输入或输出状态都能被AVR读取。SLEEP=0时输入才能被读取。
如果有引脚末被使用,建议给引脚赋予一个确定电平。保证未用引脚具有确定电平的方法是使能内部上拉电阻。
如果刚定义了引脚的输入状态,就要立即回读,可以在回读前,插入一句_nop()。
系统复位时,DDR全部为0,Port也全部为0,故上拉电阻在复位时会失效。
AVR的I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。所以,外部引脚呈现三态高阻输入状态。
用户程序首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入),当设定为输入方式时,还要考虑是否使用内部的上拉电阻。
在硬件电路设计时,如能利用AVR内部I/O口的上拉电阻,可以节省外部的上拉电阻。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。