资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,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,,数据寄存器,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,在输出方式下提供了比较大的驱动能力,可以直接倾动,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,口,首先要正确设置其工作方式,确定其工作在输入方式还是输入方式。,2,)当,I/O,工作在输入方式,要读取外部引脚上的电平时,应读取,PINxn,的值,而不是,PORTxn,的值。,3,)当,I/O,工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。,4,)一旦将,I/O,口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚,PINxn,的值。,8,LED,发光二极管的控制,例,6.1,简易彩灯控制系统,1),硬件电路设计:,发光二极管一般为砷化镓半导体二极管,其电路入图,6-5,所示。当电压,U1,大于,U2,约,1V,以上时,二极管导通发光。当导通电流大于,5mA,时,人的眼睛就可以明显地观察到二极管的发光,导通电流越大,亮度越高。一般导通电流不要超过,10mA,,否则将导致二极管的烧毁或,I/O,引脚的烧毁。因此在,LED,二极,管电路中要串接一个限流电阻,阻值在,100,500,之间,调节阻值的大小可以控制发光二极管的发光亮度。导通电流与限流电阻之间的关系由下面的计算公式确定:,9,式中,,Vled,为,LED,的导通电压。,由于,AVR,的,I/O,口输出,“,0,”,时,可以吸收最大,40mA,的电流,因此采用控制发光二极管,负极的设计比较好。,8,个,LED,发光二极管控制系统的硬件电路见图,6-6,。,10,11,2),软件设计,ATmega16,的,PA,口工作在输出方式下,,8,个引脚分别控制,8,个发光二极管。,当,I/O,口输出,“,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,,电流,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,口不会被反峰电压击穿,提高系统的可靠性。设计中还要考虑系统在上电时的状态。由于,AVR,在上电时,,DDRx,和,PORTx,的值均初始化为,“,0,”,,,I/O,引脚呈高阻输入方式,因此电阻,R2,的作用是确保三极管的集电极电位在上电时为,“,0,”,电平,三极管截止,保证了加热电炉控制系统上电时不会误动作。,16,AVR mega16,单片机,I/O,端口,作为通用数字,I/O,使用时,所有,AVR I/O,端口都具有真正的读,-,修改,-,写功能。这意味着,用,SBI,或,CBI,指令改变某些管脚的方向,(,或者是端口电平、禁止,/,使能上拉电阻,),时不会,无意地改变其他管脚的方向,(,或者是端口电平、禁止,/,使能上拉电阻,),。输出缓冲器具有对,称的驱动能力,可以输出或吸收大电流,直接驱动,LED,。所有的端口引脚都具有与电压无,关的上拉电阻。并有保护二极管与,VCC,和地相连。,17,每个端口都有三个,I/O,存储器地址,:,数据寄存器,PORTx,、,数据方向寄存器,DDRx,和,端口输入引脚,PINx,。数据寄存器和数据方向寄存器为读,/,写寄存器,而端口输入引脚为只读寄存器。但是需要特别注意的是,对,PINx,寄存器某一位写入逻辑,1,“,将造成数据寄存器相应位的数据发生,0,“,与,“,1,“,的交替变化。当寄存器,MCUCR,的上拉禁止位,PUD,置位时所有端口引脚的上拉电阻都被禁止。,18,作为通用数字,I/O,的端口,19,DDxn,用来选择引脚的方向。,DDxn,为,“,1,“,时,,Pxn,配置为,输出,,否则配置为输入。,引脚配置为输入时,若,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,
展开阅读全文