说明AVR单片机I/O口3个寄存器的名称和作用是什么?当I/O口用于输入和输出时,如何设置和应用这3个寄存器?

作者&投稿:司亮 (若有异议请与网页底部的电邮联系)
说明avr单片机i\o口3个寄存器的名称和作用是什么,当 I\O口用于输入和输出时,如何设置和应用这三个寄存器~

楼主你好:
AVR单片机的每组I/O口都配备有三个8位寄存器,分别是:方向控制寄存器DDRx、数据寄存器PORTx、输入引脚寄存器PINx(x=A/B/C/D).I/O口的工作方式和表现特征由这三个I/O寄存器控制。
方向控制寄存器DDRx用于控制I/O口的输入输出方向,及控制I/O口的工作方式为输出方式还是输入方式。
DDRx=1时,I/O口处于输出工作方式;此时数据寄存器PORTx中的数据输出到外部引脚。
DDRx=0时,I/O口处于输入工作方式;此时输入引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。
此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。

楼主你好:
AVR单片机的每组I/O口都配备有三个8位寄存器,分别是:方向控制寄存器DDRx、数据寄存器PORTx、输入引脚寄存器PINx(x=A/B/C/D).I/O口的工作方式和表现特征由这三个I/O寄存器控制。
方向控制寄存器DDRx用于控制I/O口的输入输出方向,及控制I/O口的工作方式为输出方式还是输入方式。
DDRx=1时,I/O口处于输出工作方式;此时数据寄存器PORTx中的数据输出到外部引脚。
DDRx=0时,I/O口处于输入工作方式;此时输入引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。
此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。

拿A口作例子
DDRA是数据方向寄存器,用来选择引脚的方向,某位为1配置为输出,某位为0配置为输入。
DDRA相应位输出,PORTA用来设置端口电平。
DDRA相应位输入,PORTA配置上拉电阻,为1带上拉电阻,为0不带上拉电阻。
输出:
DDRA=0xFF;//全作输出,设置一次即可
PORTA=0xFF;//全为1,全输出高电平
PORTA=0;//全为0,全输出低电平
输入:
DDRA=0;//全作输入,设置一次即可
PORTA=0xFF;//全带上拉电阻,设置一次即可
PORTA=0;//全不带上拉电阻,设置一次即可

a=PINA;//读A口。不论何时都可以读PINA来获得端口电平,不过因为锁存会有延时

注意,因为一个端口有8个引脚(少数不够8个脚),所以可以精确控制某一位或者某几位而不影响别的位。
DDRA|=1;//A口第0位变成输出,不影响别的位,也不管第0位原来是输出还是输入
DDRA&=~1;//A口第0位变成输入,不影响别的位,也不管0位原来是输出还是输入
PORTA类似
a=PINA;//一次读8个引脚状态,在程序中再处理a的相应位好了。

当I/O口使用,有输入/输出,还有第二功能:带上拉功能,中断,定时,ADC等等。

当用作输入时:以PA口为例
DDRA=0XFF,就为输出作用。就可以输出高、低电平
DDRA=0X00,就为输入作用。例如:开关检测
带上拉功能:DDRA=0x00,PORTA=0xff,带上拉电阻功能