《第2讲单片机IO端口.ppt》由会员分享,可在线阅读,更多相关《第2讲单片机IO端口.ppt(27页珍藏版)》请在课桌文档上搜索。
1、1,MEGA16通用I/O 接口基本结构与应用,ATmega16 芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4 组8 位,共32 路通用I/O 接口,分别对应于芯片上32 根I/O 引脚。所有这些I/O 口都是双(有的为3)功能复用的。其中第一功能均作为数字通用I/O 接口使用,而复用功能则分别用于中断、时钟/计数器、USART、I2C 和SPI 串行通信、模拟比较、捕捉等应用。,2,通用I/O 口的基本结构与特性,图6-1 为通用I/O 口的基本结构示意图。从图中可以看出,每组I/O 口配备三个8 位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器
2、PORTx,和输入引脚寄存器PINx(x=ABCD)。I/O 口的工作方式和表现特征由这3 个I/O 口寄存器控制。,3,4,方向控制寄存器DDRx 用于控制I/O 口的输入输出方向,即控制I/O 口的工作方式为输出方式还是输入方式。当DDRx=1 时,I/O 口处于输出工作方式。此时数据寄存器PORTx 中的数据通过一个推挽电路输出到外部引脚。AVR 的输出采用推挽电路提高了I/O 口的输出能力,当PORTx=1 时,I/O 引脚呈现高电平,同时可提供输出20mA 的电流;而当PORTx=0 时,I/O 引脚呈现低电平,同时可吸纳20mA 电流。因此,AVR 的I/O 在输出方式下提供了比较
3、大的驱动能力,可以直接倾动LED 等小功率外围器件。,5,当DDRx=0 时,I/O 处于输入工作方式。此时引脚寄存器PINx 中的数据就是外部引脚的实际电平,通过读I/O 指令可将物理引脚的真实数据读入MCU。此外,当I/O 口定义为输入时(DDRx=0),通过PORTx 的控制,可使用或不使用内部的上拉电阻。,6,表中的PUD 为寄存器SFIOR 中的一位,它的作用相当AVR 全部I/O 口内部上拉电阻的总开关。当PUD=1 时,AVR 所有I/O 内部上拉电阻都不起作用(内部不上拉);而PUD=0 时,各个I/O 口内部上拉电阻取决于DDRXn 的设置。,7,1)使用AVR 的I/O 口
4、,首先要正确设置其工作方式,确定其工作在输入方式还是输入方式。2)当I/O 工作在输入方式,要读取外部引脚上的电平时,应读取PINxn 的值,而不是PORTxn 的值。3)当I/O 工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。4)一旦将I/O 口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚PINxn 的值。,8,LED 发光二极管的控制,例6.1 简易彩灯控制系统1)硬件电路设计:发光二极管一般为砷化镓半导体二极管,其电路入图6-5所示。当电压U1 大于U2 约1V 以上时,二极管导通发光。当导通电流大于5mA 时,人的眼睛就可以明显地观察到二极
5、管的发光,导通电流越大,亮度越高。一般导通电流不要超过10mA,否则将导致二极管的烧毁或I/O 引脚的烧毁。因此在LED 二极管电路中要串接一个限流电阻,阻值在100500之间,调节阻值的大小可以控制发光二极管的发光亮度。导通电流与限流电阻之间的关系由下面的计算公式确定:,9,式中,Vled 为LED 的导通电压。由于AVR 的I/O 口输出“0”时,可以吸收最大40mA 的电流,因此采用控制发光二极管负极的设计比较好。8 个LED 发光二极管控制系统的硬件电路见图6-6。,10,11,2)软件设计ATmega16 的PA 口工作在输出方式下,8 个引脚分别控制8 个发光二极管。当I/O 口输
6、出“0”时LED 导通发光,输出“1”时LED 截止熄灭。下面给出一个简单的控制程序,其完成的功能是8 个LED 逐一循环发光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 控制恒温箱的加热的硬件电路设计恒温箱的加热源采用500W 电炉,电炉的工作电压220v,电流
7、2.3A。选用HG4200 继电器,开关负载能力为5A/AC220V,继电器吸合线圈的工作电压5v,功耗0.36W,计算得吸合电流为0.36/5=72mA。设计控制电路如图6-8。I/O引脚输出“1”时,三极管导通,继电器吸合,电炉开始加热。I/O 引脚输出“0”时,三极管截止,继电器释放,加热停止。,14,15,图中的三极管应采用中功率管,导通电流大于300mA。电阻R1 的作用是限制从I/O 流出的电流太大,保护I/O 端口,称为限流电阻。注意:三极管集电极的负载继电器吸合线圈在三极管截止时会产生一个很高的反峰电压,在吸合线圈两端并接一个二极管D,其用途是释放反峰电压,保护三极管和I/O
8、口不会被反峰电压击穿,提高系统的可靠性。设计中还要考虑系统在上电时的状态。由于AVR 在上电时,DDRx 和PORTx 的值均初始化为“0”,I/O引脚呈高阻输入方式,因此电阻R2 的作用是确保三极管的集电极电位在上电时为“0”电平,三极管截止,保证了加热电炉控制系统上电时不会误动作。,16,AVR mega16单片机 I/O端口,作为通用数字I/O 使用时,所有AVR I/O 端口都具有真正的读-修改-写功能。这意味着用SBI 或CBI 指令改变某些管脚的方向(或者是端口电平、禁止/使能上拉电阻)时不会无意地改变其他管脚的方向(或者是端口电平、禁止/使能上拉电阻)。输出缓冲器具有对称的驱动能
9、力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管与VCC 和地相连。,17,每个端口都有三个I/O 存储器地址:数据寄存器 PORTx、数据方向寄存器 DDRx 和端口输入引脚 PINx。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚为只读寄存器。但是需要特别注意的是,对PINx 寄存器某一位写入逻辑1“将造成数据寄存器相应位的数据发生0“与“1“的交替变化。当寄存器MCUCR 的上拉禁止位PUD 置位时所有端口引脚的上拉电阻都被禁止。,18,作为通用数字I/O 的端口,19,DDxn 用来选择引脚的方向。DDxn 为“1“时,Pxn
10、 配置为输出,否则配置为输入。引脚配置为输入时,若PORTxn 为”1“,上拉电阻将使能。如果需要关闭这个上拉电阻,可以将PORTxn 清零,或者将这个引脚配置为输出。复位时各引脚为高阻态,即使此时并没有时钟在运行。当引脚配置为输出时,若PORTxn 为1“,引脚输出高电平(1“),否则输出低电平(“0“)。,20,下面的例子演示了如何置位端口B 的引脚0 和1,清零引脚2 和3,以及将引脚4 到7 设置为输入,并且为引脚6 和7 设置上拉电阻。然后将各个引脚的数据读回来。如前面讨论的那样,我们在输出和输入语句之间插入了一个nop 指令。,21,22,23,24,25,26,I/O 端口寄存器的说明,端口A 数据寄存器 PORTA端口A 数据方向寄存器 DDRA端口A 输入引脚地址 PINA,27,