欢迎来到天天文库
浏览记录
ID:45560221
大小:407.24 KB
页数:57页
时间:2019-11-14
《-【优秀文档资料】AVR学习笔记(提交版)(打印版)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、AVR学习笔记前言:学习一块单片机,我们要几项准备工作:1•开发软件(熟悉开发软件操作流程,基本上开发软件都羞不多的,学会了一款,再学其它的就会很顺手了(新建工程、新建设计文件、把源文件加到工程里面、最后设置一些参数)2.编程语言(这个就不用说了,先学语法规则,能够熟练掌握到自己写的代码没冇语法错误,然后再逐步把自己的想法驾驭到编程语言上)3•硬件(硬件包括的范围很广,不仅包括你所要学的单片机还有单片机的外围电路所用到的器件),最好要学一款仿真软件。我们始终要记住学单片机绝对不可以纸上谈兵,一定要实践,就是把口己所写的代码
2、下载到板上,看看实际效果。开发板可以买,也可以自己做!我喜欢自己做。实验一:点亮发光二极管1.AVR单片机的I/O端口1)学习单片机的主要任务就是了解、掌握单片机I/O端口的功能,以及如何正确设计这些端口与外围电路的连接,从而能够组成一个嵌入式系统,并编程、管理和运用他们完成各种各样的任务。2)ATmegal6有4个8位的双向I/O端口PA、PB、PC、PD,他们对外对应32个I/O引脚,每一位都可以独立地用于逻辑信号的输入和输出。在5VT•作电压下,输出高点平时,每个引脚可输出达20mA的驱动电流;而输出低电平时,每个引
3、脚可吸收最大为40mA的电流,可以玄接驱动发光二极管(一般的发光二极管的驱动屯流为10mA)和小型继屯器等小功率器件。AVR人部分的I/O端口都具备双重功能(有的还有第三功能)。其中第一功能是作为数字通用I/O接口使用,而复用的功能可分别与片内的各种不同功能的外围接口电路组合成一些可以完成特殊功能的UO口,如定时器、计数器、串行接口、模拟比较器、捕捉器、USART、SPI等。3)AVR单片机的每组I/O口都配备有二•个8为寄存器,分别是:方向控制寄存器DDRx、数据寄存器PORTx、输入引脚寄存器PINx(x=A/B/C/
4、D).1/0口的工作方式和表现特征由这三个I/O寄存器控制。方向控制寄存器DDRx用于控制I/O口的输入输出方向,及控制I/O口的工作方式为输出方式还是输入方式。DDRx=l时,I/O口处丁•输川工作方式;此时数据寄存器PORTx中的数据输川到外部引脚。DDRx=0时,I/O口处于输入工作方式;此时输入引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCUo此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。(关于上拉电阻的解释请看后
5、面附录2)4)AVR通用I/O端口的主耍特点为:a)双向可独立位控的I/O口ATmegal6的PA、PB、PC、PD四个端口都是8位双向I/O口,每一位引脚都可以单独的进行定义,相互不受影响。如用户可以在定义PA口第0、2、3、4、5、6位用于输入的同时定义第1、7位用于输出,互不影响。b)Push-Pull大电流驱动(最大40mA)每个I/O口输出方式均采用推挽(关于推挽电路,请参阅附录3)式缓冲器输出,提供大电流的驱动,可以输出(吸入)20mA的电流,因而能氏接驱动LED显示器。c)可控制的引脚内部上拉电阻每一位引脚内
6、部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉屯阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输岀电流(uA量级)。DDxnPORTxnPUD(inI/O上拉电阻说明SFIOR)00XInputNo高阻态010InputYes被外部电路拉低时将输出电流011InputNo高阻态10XOutputNo输出低电平11XOutputNo输出高电平d)DDRx可控的方向寄存器。AVR的I/O端口结构同其它类型单片机的明显区别是,AVR采用3个寄存器来控制I/O端口。一
7、般单片机的I/O仅有数据寄存器和控制寄存器,而AVR还多了一个方向控制器,用于控制I/O的输入输出方向。由丁•输入寄存器PINx实际不是一个寄存器,而是一个可选通的「:态缓冲器,外部引脚通过该三态缓冲器与MCU的内部总线连接,因此,读PINx时是读取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。2.软件编写1)使用的ICCAVR开发环境,开发语言是C语言2).程序代码:#include#defineucharunsignedchar#defineuintunsignedintvoiddelay_
8、ms(uint);main(){ucharizk;DDRA=0xff;while(1){PORTA=Oxfe;for(k=5;k>0;k一-){for(i=0;i<8;i++){//PORTA=(PORTA<<1)
9、0x01;PORTA=~(l<
此文档下载收益归作者所有