《第2讲单片机IO端口.ppt》由会员分享,可在线阅读,更多相关《第2讲单片机IO端口.ppt(27页珍藏版)》请在优知文库上搜索。
1、1MEGA16通用通用I/O 接口基本结构与应用接口基本结构与应用ATmega16 ATmega16 芯片有芯片有PORTAPORTA、PORTBPORTB、PORTCPORTC、PORTDPORTD(简称(简称PAPA、PBPB、PCPC、PDPD)4 4 组组8 8 位,位,共共32 32 路通用路通用I/O I/O 接口,分别对应于芯片接口,分别对应于芯片上上32 32 根根I/O I/O 引脚。所有这些引脚。所有这些I/O I/O 口都是口都是双(有的为双(有的为3 3)功能复用的。其中第一功)功能复用的。其中第一功能均作为数字通用能均作为数字通用I/O I/O 接口使用,而复用接口使
2、用,而复用功能则分别用于中断、时钟功能则分别用于中断、时钟/计数器、计数器、USARTUSART、I2C I2C 和和SPI SPI 串行通信、模拟比较、串行通信、模拟比较、捕捉等应用。捕捉等应用。2通用I/O 口的基本结构与特性 图图6-1 6-1 为通用为通用I/O I/O 口的基本结构示口的基本结构示意图。从图中可以看出,每组意图。从图中可以看出,每组I/O I/O 口配备三个口配备三个8 8 位寄存器,它们分别位寄存器,它们分别是方向控制寄存器是方向控制寄存器DDRxDDRx,数据寄存,数据寄存器器PORTxPORTx,和输入引脚寄存器,和输入引脚寄存器PINxPINx(x=ABCDx
3、=ABCD)。)。I/O I/O 口的工作方式口的工作方式和表现特征由这和表现特征由这3 3 个个I/O I/O 口寄存器口寄存器控制。控制。34方向控制寄存器方向控制寄存器DDRx DDRx 用于控制用于控制I/O I/O 口的输入输口的输入输出方向,即控制出方向,即控制I/O I/O 口的工作方式为输出方口的工作方式为输出方式还是输入方式。式还是输入方式。当当DDRx=1DDRx=1 时,时,I/O I/O 口处于口处于输出输出工作方式。此时工作方式。此时数据寄存器数据寄存器PORTx PORTx 中的数据通过一个中的数据通过一个推挽电推挽电路路输出到外部引脚。输出到外部引脚。AVR AV
4、R 的输出采用推挽电的输出采用推挽电路提高了路提高了I/O I/O 口的输出能力,当口的输出能力,当PORTx=1 PORTx=1 时,时,I/O I/O 引脚呈现高电平,同时可提供输出引脚呈现高电平,同时可提供输出20mA 20mA 的电流;而当的电流;而当PORTx=0 PORTx=0 时,时,I/O I/O 引脚呈现低引脚呈现低电平,同时可吸纳电平,同时可吸纳20mA 20mA 电流。因此,电流。因此,AVR AVR 的的I/O I/O 在输出方式下提供了比较大的驱动能力,在输出方式下提供了比较大的驱动能力,可以直接倾动可以直接倾动LED LED 等小功率外围器件。等小功率外围器件。5当
5、当DDRx=0 DDRx=0 时,时,I/O I/O 处于输入工作方式。此处于输入工作方式。此时引脚寄存器时引脚寄存器PINx PINx 中的数据就是外部引中的数据就是外部引脚的实际电平,通过读脚的实际电平,通过读I/O I/O 指令可将物指令可将物理引脚的真实数据读入理引脚的真实数据读入MCUMCU。此外,当。此外,当I/O I/O 口定义为输入时(口定义为输入时(DDRx=0DDRx=0),通过),通过PORTx PORTx 的控制,可使用或不使用内部的的控制,可使用或不使用内部的上拉电阻。上拉电阻。6表中的表中的PUD PUD 为寄存器为寄存器SFIOR SFIOR 中的一位,它的作用相
6、中的一位,它的作用相当当AVR AVR 全部全部I/O I/O 口内部上拉电阻的总开关。当口内部上拉电阻的总开关。当PUD=1 PUD=1 时,时,AVR AVR 所有所有I/O I/O 内部上拉电阻都不起作内部上拉电阻都不起作用(内部不上拉);而用(内部不上拉);而PUD=0 PUD=0 时,各个时,各个I/O I/O 口内口内部上拉电阻取决于部上拉电阻取决于DDRXn DDRXn 的设置。的设置。71 1)使用使用AVR AVR 的的I/O I/O 口,首先要正确设置其工口,首先要正确设置其工作方式,确定其工作在输入方式还是输入方作方式,确定其工作在输入方式还是输入方式。式。2 2)当当I
7、/O I/O 工作在输入方式,要读取外部引脚工作在输入方式,要读取外部引脚上的电平时,应读取上的电平时,应读取PINxn PINxn 的值,而不是的值,而不是PORTxn PORTxn 的值。的值。3 3)当当I/O I/O 工作在输入方式,要根据实际情况工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。使用或不使用内部的上拉电阻。4 4)一旦将一旦将I/O I/O 口的工作方式由输出设置成输口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正入方式后,必须等待一个时钟周期后才能正确的读到外部引脚确的读到外部引脚PINxn PINxn 的值。的值。8LED 发光二极管的控制
8、例例6.1 6.1 简易彩灯控制系统简易彩灯控制系统1)1)硬件电路设计:硬件电路设计:发光二极管一般为砷化镓半导体二极管,其电路入图发光二极管一般为砷化镓半导体二极管,其电路入图6-56-5所示。当电压所示。当电压U1 U1 大于大于U2 U2 约约1V 1V 以上时,二极管以上时,二极管导通发光。当导通电流大于导通发光。当导通电流大于5mA 5mA 时,人的眼睛就可时,人的眼睛就可以明显地观察到二极管的发光,导通电流越大,亮以明显地观察到二极管的发光,导通电流越大,亮度越高。一般导通电流不要超过度越高。一般导通电流不要超过10mA10mA,否则将导致,否则将导致二极管的烧毁或二极管的烧毁或
9、I/O I/O 引脚的烧毁。因此在引脚的烧毁。因此在LED LED 二极二极管电路中要串接一个限流电阻,阻值在管电路中要串接一个限流电阻,阻值在100100500500之之间,调节阻值的大小可以控制发光二极管的发光亮间,调节阻值的大小可以控制发光二极管的发光亮度。导通电流与限流电阻之间的关系由下面的计算度。导通电流与限流电阻之间的关系由下面的计算公式确定:公式确定:9式中,式中,Vled Vled 为为LED LED 的导通电压。的导通电压。由于由于AVR AVR 的的I/O I/O 口输出口输出“0 0”时,可以吸收最大时,可以吸收最大40mA 40mA 的电流,因此采用控制发光二极管的电流
10、,因此采用控制发光二极管负极的设计比较好。负极的设计比较好。8 8 个个LED LED 发光二极管控制系发光二极管控制系统的硬件电路见图统的硬件电路见图6-66-6。10112)2)软件设计软件设计ATmega16 ATmega16 的的PA PA 口工作在输出方式下,口工作在输出方式下,8 8 个个引脚分别控制引脚分别控制8 8 个发光二极管。个发光二极管。当当I/O I/O 口输出口输出“0 0”时时LED LED 导通发光,输出导通发光,输出“1 1”时时LED LED 截止熄灭。截止熄灭。下面给出一个简单的控制程序,其完成的功下面给出一个简单的控制程序,其完成的功能是能是8 8 个个L
11、ED LED 逐一循环发光逐一循环发光1 1 秒,构成秒,构成“走马灯走马灯”12#include#include void main(void)char position=0;/position 为控制位的位置PORTA=0 xFF;/PA 口输出全1,LED 全灭DDRA=0 xFF;/PA 口工作为输出方式while(1)PORTA=(1=8)position=0;delay_ms(1000);13继电器控制例例6.2 6.2 控制恒温箱的加热的硬件电路设计控制恒温箱的加热的硬件电路设计恒温箱的加热源采用恒温箱的加热源采用500W 500W 电炉,电炉的工电炉,电炉的工作电压作电压220
12、v220v,电流,电流2.3A2.3A。选用。选用HG4200 HG4200 继电器,继电器,开关负载能力为开关负载能力为5A/AC220V5A/AC220V,继电器吸合线圈,继电器吸合线圈的工作电压的工作电压5v5v,功耗,功耗0.36W0.36W,计算得吸合电流,计算得吸合电流为为0.36/5=72mA0.36/5=72mA。设计控制电路如图。设计控制电路如图6-86-8。I/OI/O引脚输出引脚输出“1 1”时,三极管导通,继电器吸合,时,三极管导通,继电器吸合,电炉开始加热。电炉开始加热。I/O I/O 引脚输出引脚输出“0 0”时,三极管时,三极管截止,继电器释放,加热停止。截止,继
13、电器释放,加热停止。1415图中的三极管应采用中功率管,导通电流大于图中的三极管应采用中功率管,导通电流大于300mA300mA。电阻。电阻R1 R1 的作用是限制从的作用是限制从I/O I/O 流出的电流出的电流太大,保护流太大,保护I/O I/O 端口,称为限流电阻。注意:端口,称为限流电阻。注意:三极管集电极的负载继电器吸合线圈在三极管三极管集电极的负载继电器吸合线圈在三极管截止时会产生一个很高的反峰电压,在吸合线截止时会产生一个很高的反峰电压,在吸合线圈两端并接一个二极管圈两端并接一个二极管D D,其用途是释放反峰电,其用途是释放反峰电压,保护三极管和压,保护三极管和I/O I/O 口
14、不会被反峰电压击穿,口不会被反峰电压击穿,提高系统的可靠性。设计中还要考虑系统在上提高系统的可靠性。设计中还要考虑系统在上电时的状态。由于电时的状态。由于AVR AVR 在上电时,在上电时,DDRx DDRx 和和PORTx PORTx 的值均初始化为的值均初始化为“0 0”,I/OI/O引脚呈高阻输引脚呈高阻输入方式,因此电阻入方式,因此电阻R2 R2 的作用是确保三极管的集的作用是确保三极管的集电极电位在上电时为电极电位在上电时为“0 0”电平,三极管截止,电平,三极管截止,保证了加热电炉控制系统上电时不会误动作。保证了加热电炉控制系统上电时不会误动作。16AVR mega16单片机单片机
15、 I/O端口端口作为通用数字作为通用数字I/O 使用时,所有使用时,所有AVR I/O 端端口都具有真正的读口都具有真正的读-修改修改-写功能。这意味着写功能。这意味着用用SBI 或或CBI 指令改变某些管脚的方向指令改变某些管脚的方向(或者或者是端口电平、禁止是端口电平、禁止/使能上拉电阻使能上拉电阻)时不会时不会无意地改变其他管脚的方向无意地改变其他管脚的方向(或者是端口电平、或者是端口电平、禁止禁止/使能上拉电阻使能上拉电阻)。输出缓冲器具有对。输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接称的驱动能力,可以输出或吸收大电流,直接驱动驱动LED。所有的端口引脚都具有与电压无。所
16、有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管与关的上拉电阻。并有保护二极管与VCC 和地相和地相连。连。17 每个端口都有三个每个端口都有三个I/O 存储器地址存储器地址:数据寄数据寄存器存器 PORTx、数据方向寄存器数据方向寄存器 DDRx 和和端口输入引脚端口输入引脚 PINx。数据寄存器和数。数据寄存器和数据方向寄存器为读据方向寄存器为读/写寄存器,而端口输入写寄存器,而端口输入引脚为只读寄存器。但是需要特别注意的是,引脚为只读寄存器。但是需要特别注意的是,对对PINx 寄存器某一位写入逻辑寄存器某一位写入逻辑1“将造成将造成数据寄存器相应位的数据发生数据寄存器相应位的数据发生0“与与“1“的交替变化。当寄存器的交替变化。当寄存器MCUCR 的上的上拉禁止位拉禁止位PUD 置位时所有端口引脚的上拉置位时所有端口引脚的上拉电阻都被禁止。电阻都被禁止。18作为通用数字I/O 的端口19 DDxn 用来选择引脚的方向。用来选择引脚的方向。DDxn 为为“1“时,时,Pxn 配置为配置为输出输出,否则配置为输入。,否则配置为输入。引脚配置为输入时,若引脚配置为输入时,若POR