AVR单片机新手入门必看教程课件5_第1页
AVR单片机新手入门必看教程课件5_第2页
AVR单片机新手入门必看教程课件5_第3页
AVR单片机新手入门必看教程课件5_第4页
AVR单片机新手入门必看教程课件5_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。所有这些I/O口都是双(有的为3)功能复用的。模拟集成电路的特点

模拟集成电路的特点

其中第一功能均作为数字通用I/O接口使用,复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。恭喜你:选择了正确的AVR学习资料通用I/O接口基本结构与输出应用

ATmega16芯片有PORTA、PORTB1I/O口的基本结构

每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。I/O口的基本结构每组I/O口配备三个8位寄存器,它2方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。当DDRx=1时,I/O口处于输出工作方式。当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚呈现低电平,同时可吸纳20mA电流。方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制3当DDRx=0时,I/O处于输入工作方式

此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。当DDRx=0时,I/O处于输入工作方式此时引脚寄4表6.1是AVR通用I/O端口的引脚配置情况

表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。当PUD=1时,AVR所有I/O内部上拉电阻都不起作用(全局内部上拉无效);而PUD=0时,各个I/O口内部上拉电阻取决于DDRXn的设置。表6.1是AVR通用I/O端口的引脚配置情况5(1).使用AVR的I/O口,首先要正确设置其工作方式,确定其工作在输出方式还是输入方式。(2)当I/O工作在输入方式,要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。(3)当I/O工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。(4)一旦将I/O口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚PINxn的值。(1).使用AVR的I/O口,首先要正确设置其工作6I/O端口寄存器PA口寄存器—PORTA、DDRA、PINA各个位的具体定义I/O端口寄存器PA口寄存器—PORTA、DDRA、PIN7

正确使用AVR的I/O口要注意:(1)先正确设置DDRx方向寄存器,再进行I/O口的读写操作。(2)AVR的I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。所以,外部引脚呈现三态高阻输入状态。(3)用户程序需要首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入),当设定为输入方式时,还要考虑是否使用内部的上拉电阻。(4)在硬件电路设计时,如能利用AVR内部I/O口的上拉电阻,可以节省外部的上拉电阻。C语言中的位操作

正确使用AVR的I/O口要注意:C语言8AVR通用I/O端口的主要特点为:双向可独立位控的I/O口Push-Pull大电流驱动(最大40mA)可控制的引脚内部上拉电阻每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。可控的方向寄存器DDRxAVR通用I/O端口的主要特点为:双向可独立位控的I/O口P9C语言中的位操作

a|b–-按位或

这个表达式指示中a被表达式中的b按位进行或运算这惯用于打开某些位尤其常用|=的形式例如PORTA|=0x80;//打开位7(最高位)

a&b–-按位与

这个运算在检查某些位是否置1时有用例如If((PORTA&0x81)==0)//检查位7和位0注意圆括号需要括在&运算符的周围因为它和==相比运算优先级较低这是C程序中很多错误的原因之一

a^b–-按位异或

这个运算对一个位取反有用例如在下面的例子中位7是被翻转的PORTA^=0x80;//翻转位7

~a–-按位取反

在表达式中这个运算执行一个取反当用按位与运算关闭某些位时与这个运算组合使用尤其有用如PORTA&=~0x80;//关闭位7

C语言中的位操作a|b–-按位或这个表达式指示10PORTC

|=(1<<BIT0)|(1<<BIT3);

1<<(BIT0)表示逻辑1左移到PORTC的D0位,结果为0b00000001;1<<(BIT3)表示逻辑1左移PORTC的D3位,结果为0b00001000。0b00000001在同0b00001000相或,结果为0b00001001。

PORTD^=BIT(PD7)PORTD口的第7位取反/,取反PD0引脚,TCCR0|=(1<<CS01)|(1<<CS00);TCCR0功能寄存器的CS01、CS00位置1。PORTC|=(1<<BIT0)|(1<<BIT311通用数字I/O口的设置与编程1.通用I/O输出设计要点

应用I/O口输出时,在系统的软硬件设计上应注意的问题有:

输出电平的转换和匹配。

输出电流的驱动能力。

I/O口输出为“1”时,可以提供20mA左右的驱动电流。输出为“0”时,可以吸收20mA左右的灌电流(最大为40mA)。输出电平转换的延时。应用举例:LED发光二极管的控制设计一个带有一排8个发光二极管的简易彩灯控制系统通用数字I/O口的设置与编程1.通用I/O输出12硬件电路设计

当电压U1大于U2约1V以上时,二极管导通发光。当导通电流大于5mA时,人的眼睛就可以明显地观察到二极管的发光,导通电流越大,亮度越高。

AVR的I/O口输出“0”时,可以吸收最大40mA的电流,因此采用控制发光二极管负极的设计比较好。硬件电路设计当电压U1大于U2约1V以上时,二极管导通发光13#include<iom16v.h> //包含单片机型号头文件#include<macros.h> //包含"位"操作头文件#include<delay.h> //包含延时头文件#define LED PORTB //LED端口#defineOpen_LED PORTA|=0x10//使能LEDvoidEn_Led(void)//使能LED{ DDRB=0xff; //设置输出 PORTB=0xff; //输出高电平 Open_LED; //打开LED功能}#include<iom16v.h> //包含单片机型号14voidmain(void){ unsignedchari; En_Led(); //使能LED while(1) { for(i=0;i<8;i++) { LED=0xff; //LED全部熄灭 LED&=~BIT(i); //点亮相应位LED // LED=LED&(~BIT(i)); delay_nms(200); //延时大约100毫秒 } for(i=9;i>1;i--) { LED=0xff; //LED全部熄灭 LED&=~BIT(i-2); //点亮相应位LED delay_nms(200); //延时大约100毫秒 } }}voidmain(void)15应用举例:继电器控制控制恒温箱的加热的硬件电路设计

恒温箱的加热源采用500W电炉,电炉的工作电压220v,电流2.3A。选用HG4200继电器,开关负载能力为5A/AC220V,继电器吸合线圈的工作电压5v,功耗0.36W,计算得吸合电流为0.36/5=72mA。因此,要能使继电器稳定的吸合,驱动电流应该大于80mA。该电流已经超出AVR本身I/O口的驱动能力,因此外部需要使用功率驱动元件。I/O引脚输出“1”时,三极管导通,继电器吸合,电炉开始加热。I/O引脚输出“0”时,三极管截止,继电器释放,加热停止。应用举例:继电器控制控制恒温箱的加热的硬件电路设计16PORTC

|=(1<<

PORTC0)

PORTC位置1。继电器吸合,电炉开始加热。PORTC&

=~(1<<

PORTC0)PORTC&

=

~0x80

PORTC位置0。继电器释放,加热停止。

PORTC|=(1<<PORTC0)PORTC&17应用举例:LED数码显示器的应用

应用举例:LED数码显示器的应用18AVR单片机新手入门必看教程课件5190-D7连接PB0-PB7,段选信号SMGLK11连接PA3,位选信号BITLK11连接PA2,74AC573SJ为锁存器。

0-D7连接PB0-PB7,段选信号SMGLK11连接PA320#include<iom16v.h> //包含单片机型号头文件#include<macros.h> //包含"位"操作头文件#include<delay.h> //包含延时头文件#include<AVR_XQV12.h> //包含通用函数及宏定义头文件/************************************************//******函数名称:Display_All_SMG()******//******功能:显示8位数据信息******//******参数:*pdata--显示缓冲数组地址指针******/voidDisplay_All_SMG(unsignedchar*pdata){ unsignedchari; for(i=0;i<8;i++)//循环8次,每次显示一位 { Display_One_SMG(i,pdata[i]); }}#include<iom16v.h> //包含单片机型号21/*******************************************************//******函数名称:Display_Cycle_SMG()******//******功能:循环显示8位数据信息******//******参数:*pdata--显示缓冲数组地址指针******//******返回值:无******/voidDisplay_Cycle_SMG(unsignedchar*pdata){ unsignedinti,j; for(i=0;i<800;i++) //滚动8次,每次内容循环显示40次 { for(j=10;j>1;j--) //扫描8个数码管 { Display_One_SMG(j-2,pdata[(i/50+9-j)%16]);//调用显示 } }}/*****************************22/*****************************************************//******函数名称:main()******//******功能:数码管滚动显示数字******//******参数:无******//******返回值:无******//*****************************************************/voidmain(void){ unsignedcharSMG_Display[16]={0,1,2,3,4,5,6,7,8, 9,10,11,12,13,14,15}; //显示缓存 CPU_Init(); //初始化CPU while(1) //无限循环,滚动显示数字 { Display_Cycle_SMG(SMG_Display); }}/*****************************23AVR单片机新手入门必看教程课件524ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。所有这些I/O口都是双(有的为3)功能复用的。模拟集成电路的特点

模拟集成电路的特点

其中第一功能均作为数字通用I/O接口使用,复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。恭喜你:选择了正确的AVR学习资料通用I/O接口基本结构与输出应用

ATmega16芯片有PORTA、PORTB25I/O口的基本结构

每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。I/O口的基本结构每组I/O口配备三个8位寄存器,它26方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。当DDRx=1时,I/O口处于输出工作方式。当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚呈现低电平,同时可吸纳20mA电流。方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制27当DDRx=0时,I/O处于输入工作方式

此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。当DDRx=0时,I/O处于输入工作方式此时引脚寄28表6.1是AVR通用I/O端口的引脚配置情况

表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。当PUD=1时,AVR所有I/O内部上拉电阻都不起作用(全局内部上拉无效);而PUD=0时,各个I/O口内部上拉电阻取决于DDRXn的设置。表6.1是AVR通用I/O端口的引脚配置情况29(1).使用AVR的I/O口,首先要正确设置其工作方式,确定其工作在输出方式还是输入方式。(2)当I/O工作在输入方式,要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。(3)当I/O工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。(4)一旦将I/O口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚PINxn的值。(1).使用AVR的I/O口,首先要正确设置其工作30I/O端口寄存器PA口寄存器—PORTA、DDRA、PINA各个位的具体定义I/O端口寄存器PA口寄存器—PORTA、DDRA、PIN31

正确使用AVR的I/O口要注意:(1)先正确设置DDRx方向寄存器,再进行I/O口的读写操作。(2)AVR的I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。所以,外部引脚呈现三态高阻输入状态。(3)用户程序需要首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入),当设定为输入方式时,还要考虑是否使用内部的上拉电阻。(4)在硬件电路设计时,如能利用AVR内部I/O口的上拉电阻,可以节省外部的上拉电阻。C语言中的位操作

正确使用AVR的I/O口要注意:C语言32AVR通用I/O端口的主要特点为:双向可独立位控的I/O口Push-Pull大电流驱动(最大40mA)可控制的引脚内部上拉电阻每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。可控的方向寄存器DDRxAVR通用I/O端口的主要特点为:双向可独立位控的I/O口P33C语言中的位操作

a|b–-按位或

这个表达式指示中a被表达式中的b按位进行或运算这惯用于打开某些位尤其常用|=的形式例如PORTA|=0x80;//打开位7(最高位)

a&b–-按位与

这个运算在检查某些位是否置1时有用例如If((PORTA&0x81)==0)//检查位7和位0注意圆括号需要括在&运算符的周围因为它和==相比运算优先级较低这是C程序中很多错误的原因之一

a^b–-按位异或

这个运算对一个位取反有用例如在下面的例子中位7是被翻转的PORTA^=0x80;//翻转位7

~a–-按位取反

在表达式中这个运算执行一个取反当用按位与运算关闭某些位时与这个运算组合使用尤其有用如PORTA&=~0x80;//关闭位7

C语言中的位操作a|b–-按位或这个表达式指示34PORTC

|=(1<<BIT0)|(1<<BIT3);

1<<(BIT0)表示逻辑1左移到PORTC的D0位,结果为0b00000001;1<<(BIT3)表示逻辑1左移PORTC的D3位,结果为0b00001000。0b00000001在同0b00001000相或,结果为0b00001001。

PORTD^=BIT(PD7)PORTD口的第7位取反/,取反PD0引脚,TCCR0|=(1<<CS01)|(1<<CS00);TCCR0功能寄存器的CS01、CS00位置1。PORTC|=(1<<BIT0)|(1<<BIT335通用数字I/O口的设置与编程1.通用I/O输出设计要点

应用I/O口输出时,在系统的软硬件设计上应注意的问题有:

输出电平的转换和匹配。

输出电流的驱动能力。

I/O口输出为“1”时,可以提供20mA左右的驱动电流。输出为“0”时,可以吸收20mA左右的灌电流(最大为40mA)。输出电平转换的延时。应用举例:LED发光二极管的控制设计一个带有一排8个发光二极管的简易彩灯控制系统通用数字I/O口的设置与编程1.通用I/O输出36硬件电路设计

当电压U1大于U2约1V以上时,二极管导通发光。当导通电流大于5mA时,人的眼睛就可以明显地观察到二极管的发光,导通电流越大,亮度越高。

AVR的I/O口输出“0”时,可以吸收最大40mA的电流,因此采用控制发光二极管负极的设计比较好。硬件电路设计当电压U1大于U2约1V以上时,二极管导通发光37#include<iom16v.h> //包含单片机型号头文件#include<macros.h> //包含"位"操作头文件#include<delay.h> //包含延时头文件#define LED PORTB //LED端口#defineOpen_LED PORTA|=0x10//使能LEDvoidEn_Led(void)//使能LED{ DDRB=0xff; //设置输出 PORTB=0xff; //输出高电平 Open_LED; //打开LED功能}#include<iom16v.h> //包含单片机型号38voidmain(void){ unsignedchari; En_Led(); //使能LED while(1) { for(i=0;i<8;i++) { LED=0xff; //LED全部熄灭 LED&=~BIT(i); //点亮相应位LED // LED=LED&(~BIT(i)); delay_nms(200); //延时大约100毫秒 } for(i=9;i>1;i--) { LED=0xff; //LED全部熄灭 LED&=~BIT(i-2); //点亮相应位LED delay_nms(200); //延时大约100毫秒 } }}voidmain(void)39应用举例:继电器控制控制恒温箱的加热的硬件电路设计

恒温箱的加热源采用500W电炉,电炉的工作电压220v,电流2.3A。选用HG4200继电器,开关负载能力为5A/AC220V,继电器吸合线圈的工作电压5v,功耗0.36W,计算得吸合电流为0.36/5=72mA。因此,要能使继电器稳定的吸合,驱动电流应该大于80mA。该电流已经超出AVR本身I/O口的驱动能力,因此外部需要使用功率驱动元件。I/O引脚输出“1”时,三极管导通,继电器吸合,电炉开始加热。I/O引脚输出“0”时,三极管截止,继电器释放,加热停止。应用举例:继电器控制控制恒温箱的加热的硬件电路设计40PORTC

|=(1<<

PORTC0)

PORTC位置1。继电器吸合,电炉开始加热。PORTC&

=~(1<<

PORTC0)PORTC&

=

~0x80

PORTC位置0。继电器释放,加热停止。

PORTC|=(1<<PORTC0)PORTC&41应用举例:LED数码显示器的应用

应用举例:LED数码显示器的应用42AVR单片机新手入门必看教程课件5430-D7连接PB0-PB7,段选信号SMGLK11连接PA3,位选信号BITLK11连接PA2,74AC573SJ为锁存器。

0-D7连接PB0-PB7,段选信号SMGLK11连接PA344#include<iom16v.h> //包含单片机型号头文件#include<macros.h> //包含"位"操作头文件#include<delay.h> //包含延时头文件#include<AVR_XQV12.h> //包含通用函数及宏定义头文件/************************************************//******函数名称:Display_All_SMG()******//******功能:显示8位数据信息******//******参数:*pdata--显示缓冲数组地址指针******/voidDisplay_All_SMG(unsignedchar*pdata){ unsignedch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论