ATMEGA128--AVR教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AVR教程(1):AVR单片机介绍
作者:微雪电子文章来源: 点击数: 478 更新时间:2008-4-1 23:58:21 AVR,它来源于:1997年,由ATMEL公司挪威设计中心的A先生与V先生利用ATMEL公司的Flash新技术,共同研发出RISC精简指令集的高速8位单片机,简称AVR。
AVR单片机特点
每种MCU都有自身的优点与缺点,与其它8-bit MCU相比,AVR 8-bit MCU最大的特点是:●哈佛结构,具备1MIPS / MHz的高速运行处理能力;
●超功能精简指令集(RISC),具有32个通用工作寄存器,克服了如8051 MCU采用单一ACC 进行处理造成的瓶颈现象;
●快速的存取寄存器组、单周期指令系统,大大优化了目标代码的大小、执行效率,部分型号FLASH非常大,特别适用于使用高级语言进行开发;
●作输出时与PIC的HI/LOW相同,可输出40mA(单一输出),作输入时可设置为三态高阻抗输入或带上拉电阻输入,具备10mA-20mA灌电流的能力;
●片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠;
●大部分AVR片上资源丰富:带E2PROM,PWM,RTC,SPI,UART,TWI,ISP,AD,Analog Comp arator,WDT等;
●大部分AVR除了有ISP功能外,还有IAP功能,方便升级或销毁应用程序。
●性价比高。
开发AVR单片机,需要哪些编译器、调试器?
软件名称类型简介官方网址
AVR Studio IDE、汇编编
译器
ATMEL AVR Studio集成开发环境(IDE),可使用
汇编语言进行开发(使用其它语言需第三方软件协
助),集软硬件仿真、调试、下载编程于一体。
ATMEL
官方及市面上通用的AVR开发工具都支持AVRStudio。
GCCAVR (WinAVR) C编译器
GCC是Linux的唯一开发语言。
GCC的编译器优化
程度可以说是目前世界上民用软件中做的最好的,另
外,它有一个非常大优点是,免费!在国外,使用它
的人几乎是最多的。
但,相对而言,它的缺点是,使
用操作较为麻烦。
ICC AVR
C编译器
(集烧写程
序功能)
市面上(大陆)的教科书使用它作为例程的较多,
集成代码生成向导,虽然它的各方面性能均不是特别
突出,但使用较为方便。
虽然ICCAVR软件不是免费的,
但,它有Demo版本,在45天内是完全版。
CodeVision AVR
C编译器
(集烧写程
序功能)
与KeilC51的代码风格最为相似,集成较多常用
外围器件的操作函数,集成代码生成向导,有软件模
块,不是免费软件,Demo版为限2KB版。
www.hpinfotech.ro
ATman AVR C编译器支持多个模块调试(AVRStudio不支持多个模块调试)。
IAR AVR C编译器
IAR实际上在国外比较多人使用,但它的价格较
为昂贵,所以,中国大陆内,使用它的开发人员较少,
只有习惯用IAR的工程师才会去使用它。
AVR的仿真方式
一般来说,AVR有三种仿真方式:
(1)JTAG仿真方式,适用于具备JTAG仿真接口的AVR。
如:Atmega16/32,At mega64/128等。
JTAG是IEEE的标准规范,通过这个标准,可对具有JTAG接口的芯片的硬件电路进行边界扫描和故障检测。
部分AVR型号带JTAG仿真调试接口,可使用JTAG仿真方式。
(2)debugWIRE仿真方式,适用于具备debugWIRE仿真接口的AVR。
如:Attin y13/24/2313,Atmega48/88/168等。
debugWIRE 是用以降低成本和调试引脚的开销,ATMEL在AVR器件上使用的新的调试接口:debugWIRE,与JTAG相比其主要区别在于仅使用一根信号线(R ESET),即可完成调试信息的交互,达到控制程序流向,执行指令以及编程熔丝位的功能。
它的总的连接图如下:
这里的 RESET 信号被用于传递调试信息。
(3)采用仿真头替代AVR MCU仿真方式,适用于不带仿真接口的AVR。
如Atti ny26,Atmega8,Atmega8515等。
AVR的烧写方式
一般来说,AVR的编程方式有:
(1)串行编程(即ISP编程)
ISP是In System Program的缩写,意思是在系统编程。
目前的AVR芯片基本上都具备ISP接口,可通过ISP接口进行编程。
它一共使用了两条电源线:V CC、GND,三条信号线:SCK、MOSI、MISO,以及复位线:RESET。
由于仅仅使用了几条数据线,所以我们亦常将其称为串行编程。
值得注意的是,虽然下载器端使用的信号线名为SCK、MOSI、MISO,但AVR MCU的信号端不一定是名为SCK、M OSI、MISO。
AVR的串行编程方式有很多种,如:
(1)STK200/STK300:并口下载器多采用该烧写方式,最早期的一种烧写方式,支持型号少,烧写速度低,不支持AVR Studio。
(2)STK500:ATMEL最推荐的编程方式,由于采用ATMEL官方的STK500固件,使得它可烧写全系列AVR(若对固件进行升级亦可支持未来的AVR型号),烧写速度非常快,支持AVR Studio。
(3)AVRISP(准STK500):由于采用ATMEL官方的STK500固件,使得它可烧写大部分AVR(若对固件进行升级亦可支持未来的AVR型号),烧写速度非常快,支持AVR Studio。
(4)AVRISPmkII:由于采用ATMEL官方的AVRISPmkII固件,使得它可烧写大部分AVR(若对固件进行升级亦可支持未来的AVR型号),烧写速度非常快,支持AVR Studio。
(5)当然还有其它的ISP方式,但已经那些均不是最为常见的串行编程方式,在此不在作一一介绍。
(2)高压/并行编程
AVR的高压编程/并行编程,实际上是更早出现的编程方法,它功能强大,但需要:
1)连接较多的引脚(故称“并行编程”)
2)使用12V电压(故称“高压编程”)
联合起来一般叫高压/并行编程。
实际上,有些编程是高压/串行编程,
如Attiny13。
(Attiny13端口非常少)高压/并行编程(理论上)能修
复任何熔丝位,例如:
1)Attiny13/24/2313、Atmega8/48/88/168等AVR的RESET端口与IO
端口是共用的,由于这类AVR的引脚一般较少,(如Attiny13仅有6
个IO口),经常出现IO不够用的情况,需要将RESET端口设置为IO
端口使用,然而,一旦将RESET设置为IO,便无法再进行ISP编程了,
更无法使用ISP恢复RESET功能,因为ISP编程需要RESET功能。
然而,
这种情况下,使用高压/并行编程,可以恢复RESET功能,(注意:RES
ET端口与IO端口是共用的AVR,具备debugWIRE功能,“dW”熔丝位必
须为启动状态)因为高压/并行编程不需要RESET功能。
2)当设置错了熔丝位导致芯片锁死,这种情况下,使用高压/并行编程,可恢复熔丝位。
(3)JTAG编程
JTAG烧写方式仅适用于带JTAG接口的AVR,另外,JTAG对比ISP烧写方式主要有个缺点:必须占用JTAG对应的IO端口。
例如,ATMEGA16必须占用PC2-PC5这几个端口。
然而,有时候,缺点也是优点,因为对于IO够用的AVR来说,在产品开发过程,可以用JTAG接口来仿真调试,产品量产后,产品板预留的JT AG接口还可以用来烧写程序。
(4)IAP编程
AVR MCU的ISP功能和debugWIRE功能是互斥的,也就是说,使能了AVR MC U的 debugWIRE 功能后ISP功能就无法使用,使能了ISP功能后debugWIRE功能就无法使用。
那么,怎样确定AVR的RESET引脚为ISP功能使用还是debugWIRE功能使用呢?
在具备debugWIRE 的AVR 器件中,有一个可编程的熔丝位DWEN,如果该熔丝被编程(且lockbits未被编程),则debugWIRE 功能被启用,AVR的RESET
引脚将被作为debugWIRE 功能使用,可与调试器进行debugWIRE仿真通信(此时,ISP 功能被禁用)。
AVR芯片出厂时,DWEN熔丝位是未编程的,也即是说I SP 功能是使能的,debugWIRE 被禁用。
使用ISP 功能时,通过调试器对debug WIRE熔丝进行编程使能,可启用debugWIRE功能;使用debugWIRE功能时,对通过调试器对debugWIRE熔丝禁止,可使能ISP 功能。
编程语言建议使用C而不是汇编开发AVR
首先说说C的优点。
1、直观,可读性强:这点很重要。
对于一个产品,周期是很长的,即使出第一台产品之后,还有很长的维护时间。
这中间维护人员可能经常变动,如果可读性强,将给维护工作省下很大的成本。
即使是在开发,可读性强的程序也便于查错。
2、模块化可以做的很好:这点也是很重要的。
模块化做得好,当然程序得重用性就高。
对于公司来说,这一点是关系到公司长远发展的。
程序可以重用,说明下一次开发的投入就可以减少,时间也可以加快,多好的事呀。
还有很多有点,当然也就是高级语言相对于汇编语言的优点,这里就不一一列举了。
再来看看汇编的优点:应该来说,汇编语言操作硬件直观,对于硬件非常熟悉的人来说,直接操作很方便。
另外可能就是很多人说的效率要高了。
针对以上两点我来说说,首先“汇编语言操作硬件直观”,这是在代码编写阶段,对于整个产品周期来说,应该是要避免使用汇编语言的,这个在C语言的优点中已经说明。
对于第二点,效率问题,目前C语言的编译器优化也做的很好,对于一个汇编不是很熟练的来说,C编出来的程序应该不会效率比汇编低。
当然这样就对开发人员的要求降低了很多,人员的限制也就没有那么严格。
另外是否真的是效率问题呢。
我觉得应该是一个整体效率和局部效率的均衡问题。
需要提高的是整体的效率。
一个好的软件架构,远远比一个好的函数效率要高的多。
因此主要的精力应该放在软件的架构上。
另外现在CPU的速度不停的往上提,CPU 越来越快,这点应该也可以弥补程序的效率吧。
当然,我的意思不是不学习汇编。
汇编对于熟悉硬件有很大的好处,应此汇编语言在学习初期一定是要学习的。
在基本的硬件熟悉之后,就可以转向C了。