第一篇:学avr单片机的建议
学avr单片机的建议
建议,(1)做工控首选PLC,实现简单安全可靠开发周期很短,不用很系统的学,买一本教材看看就行了,选型也别挑花眼,就选西门子,不用一下就想学会所有的功能,简单的起步,做项目的同时逐渐延伸。
(2)如果要学单片机,8位机就选avr,型号齐全,一个公司做的,资料统一,实现容易。编译器就用icc avr7.22(不用破解,没有bug),仿真软件就用avr studio4.17(免费下载,最新版式4.18,需要注册才能下载,我闲麻烦就用4.17),到的网站上免费下载。建议买两本书《avr单片机c语言开发入门指导》清华大学出版社的,还有就是《avr单片机嵌入式原理与应用实践》马潮、北航。两本书足以。第一本书主要介绍icc,其余的各种编译器也做了详细介绍,都是经典之作(他的icc版本很低,你用7.22的话有些程序定义部分需要改动,还好icc有自动生成代码框架的功能)。第二本书主要以cva编译器为背景,里面的编程思路是国产教材的经典(不用刻意学cva,主要看看编程思路)。-
到网上再下一个(10天学会avr单片机,叶大鹏老师讲的,以icc为背景),真的10天就可以学会.然后最重要的就是到淘宝上买一个avr单片机实验板100元左右的就不错。到此你的avr全套学习和实验系统就全了,很全别的东西都不需要了。
网络上有关于个各种编译器的好坏之争,我觉得icc就很好,所有编译器里最简单好用的。gcc avr也很好(winavr),到百度里搜winavr,到他的官网下个最新的。网络里有关于它的介绍总是很复杂(网络里的gcc avr学习的帖子过时了),其实科技进步了,他也进步了,你用一个winavr+avr studio,就可以构造一个正版的免费的有固定ide界面的(用的avr studio界面)编译系统和仿真系统.最新的gcc是20100110版的,他升级很快,每个版本编程时有地方会不同,你在老版本下通过,到新版本下不一定通过,所以需要固定一个版本使用,并且要认真看看gcc avr的帮助文件(都是英文的,建议打印出来仔细看,这很重要,关于教材上的定义中断的方式在2010下肯定不能用,所以需要看帮助里的中断定义方面的改动和其余的勘误说明)。我现在就用gcc做工程,暂时没有发现有问题。
avr的介绍就到这里,还有就是要仔细看看你所用avr芯片的手册,不管什么编译器,他的头文件里寄存器定义都和手册里的寄存器名相同的,这很重要,否则教材上介绍的mega16,当你换用mega128时就不会用了,达到触类旁通是我们的目标。到atmel网站里可以下载手册和相关的开发说明。编译器选择要么icc要么gcc,不要用iar和别的。以我的经验从零到做项目需要3个月时间。
单片机就是个控制器和工具,如果要做工程靠他还不够,你要经常看看电路系统构成和强电、弱电、测控、数据信号传输方面的综合知识,如果你要只停留在单片机方面就失败了。还要会画电路图(就用altium designer winter09).好了,祝你早日精通单片机。
哦,对了,科技进步今非昔比,如果要学一种芯片何不学一种再先进一点的呢,比如arm的。切记:选择一种芯片和编译器把它学会,不要为别人的说法所动摇。
第二篇:AVR单片机的时钟设计(范文)
基于AVR单片机Mega16的时钟设计报告
1摘 要
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此越来越广泛地应用各个领域.本文的电子钟系统是以单片机(ATmega16)为核心,时钟芯片、数码管显示驱动芯片等元器件组成。具体介绍应用Proteus的ISIS软件进行单片机系统的电子钟设计与仿真的实现方法。该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。
关键词:单片机; 时钟芯片 ;数码管显示驱动芯片 ;电子钟
2引 言
单片机电子时钟系统可以用多种技术手段实现。本文借助于Proteus仿真系统进行系统虚拟开发成功之后再进行实际操作,可以节约开发时间,降低开发成本,具有很大的灵活性和可扩展性。在国外有包括斯坦福、剑桥等在内的几千家高校将Proteus作为电子工程学位的教学和实验平台;在国内也有众多大学正在体验Proteus的独一无二的功能并申报大学计划。该方法具有普遍意义。通过实际应用发现,采用该方法可以大大简化硬件电路测试和系统调试过程中电路板制作、元器件安装、焊接等过程。很明显,使用该方法可以提高开发效率、降低开发成本、提升开发…
AVR系列的单片机不仅具有良好的集成性能,而且都具备在线编程接口,其中的系列还具备仿真和下载功能;含有片内看门狗电路、片内程序FLASH、同步串行接口SPI;多数AVR单片机还内嵌了A/D转换器、EEPROM、模拟比较器、PWM定时计数器等多种功能;AVR单片机的I/O接口具有很强的驱动能力,灌人电流可直接驱动继电器、LED等元件,从而省去驱动电路,节约系统成本。
3设计思路
利用单片机(ATmega16)制作简易电子时钟,由六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。6个PNP管分别控制六个数码管的亮灭,此外还可以实现时间调整、等多种实用功能。整个设计分硬件和软件两大部分。硬件部分采用MEGA16单片机作为可编程芯片,字符液晶作为信号显示;软件部分利用C语言作为设计语言,对MEGA16进行编程实现各种功能。
硬件设计电路分解为单片机、晶体振荡器和数码管3个部分,其结构简单,经济实惠。单片机内部晶体振荡器的外接电路。由两个电容和晶体振荡器构成,其电路如图1所示。图中X1和X2分别接MEGA16的两个脉冲控制端,使得MEGA16的内部脉冲电路为电子时钟和整个系统时钟提供脉冲。
图1所示给出了采用单片机外加电源及晶体振荡器构成最小单片机系统。配合单片机开发的设计、调试和下载,最终将时钟信息从端口输出到字符液晶显示。
图26位模式与单片机的端口相连。
4软件设计及调试过程
软件设计包括Proteus的ISIS软件、Code Vision AVR编辑软件和AVRStudio4调试。利用ISP将生成程序timer.cof 下载到目标板。其主要程序如下:
void display(void)// 6 位LED 数码管动态扫描函数
{
PORTC = 0xff;
PORTA = led_7[dis_buff[posit]];
if(point_on &&(posit==2||posit==4))PORTA |= 0x80;
PORTC = position[posit];
if(++posit >=6)posit = 0;
}
// Timer 0 比较匹配中断服务
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
display();// 调用LED 扫描显示
if(++time_counter>=100)
{
time_counter = 0;
time_1s_ok = 1;
}
}
void time_to_disbuffer(void)// 时钟时间送显示缓冲区函数
{
char i,j=0;
for(i=0;i<=2;i++)
{
dis_buff[j++] = time[i] % 10;
dis_buff[j++] = time[i] / 10;
}
}
// INT0 中断服务程序
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(++time[2]>=24)time[2] = 0;
}
// INT1 中断服务程序
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if(++time[1]>=60)time[1]=0;
}
void main(void)
{
PORTA=0x00;// 显示控制I/O 端口初始化
DDRA=0xFF;
PORTC=0x3F;
DDRC=0x3F;// T/C0 初始化
PORTA=0xFF;
DDRA=0xFF;
GICR|=0xC0;// 允许INT0、INT1 中断
MCUCR=0x0A;// INT0、INT1 下降沿触发
GIFR=0xC0;// 清除INT0、INT1 中断标志位
TCCR0=0x0B;// 内部时钟,64 分频(4M/64=62.5KHz),CTC 模式
TCNT0=0x00;
OCR0=0x7C;// OCR0 = 0x7C(124),(124+1)/62.5=2ms
TIMSK=0x02;// 允许T/C0 比较匹配中断
time[2] = 14;time[1] = 01;time[0] = 55;// 设时间初值23:58:5
5posit = 0;
time_to_disbuffer();
#asm(“sei”)// 开放全局中断
while(1)
{
if(time_1s_ok)// 1 秒到
{
time_1s_ok = 0;
point_on = ~point_on;
if(++time[0] >= 60)// 以下时间调整
{
time[0] = 0;
if(++time[1] >= 60)
{
time[1] = 0;
if(++time[2] >= 24)time[2] = 0;
}
} time_to_disbuffer();// 新调整好的时间送显示缓冲区
5总结心得
这次设计报告培养了学生综合运用所学知识,发现,提出,分析和解决问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机设计,我仍感慨颇多,的确,从选题到定稿,从理论到仿真,在这些日子里,我学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师那里我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
}结束语
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。尤其是AVR单片机可以用高级语言编程,极容易地实现系统移植,并且加快了软件的开发过程。这次设计通过对它的学习、应用,以Mage16单片机为核心,辅以必要的电路,采用高级C语言编程,设汁了一个简易的电子时钟,由
4.5 V直流电源供电,通过数码管能够准确显示时间。
第三篇:AVR单片机定时器TC0定时操作过程
定时器T/C0定时功能实现过程
一、中断总使能:SREG=0X80;
二、使能定时器溢出中断,TIMSK的TOIE0置1
三、选择定时器时钟分频系数,由TCCR0的CS01,CS01,CS00决定。
四、定时器计数器付初始值,TCNT0=61,TCNT0位8位寄存器,计数范围为0-255,付初始值61后,从61开始计数到255时产生溢出中断
付初值后定时就开始工作。
定时时间计算:每个计数时钟脉冲的时间T=1/f,f=晶振频率/分频系数,如晶振为8MHZ,分频系数为1024,则定时器器时钟
频率为f=8000000HZ/1024=7812.5HZ,单个时钟脉冲时间:T=1/f=1/7812.5=0.128ms(毫秒),T/C0最大的计数值 为256,最大计时时间为256*0.128ms=32.768ms。
定时器初值计算公式:定时器初值=256-定时时间/单个时钟脉冲时间: 如定时25ms,初值=256-25ms/0.128ms=256-195=61
注:1MHZ=1000KHZ=1000000HZ,1s(秒)=1000ms(毫秒)
/***************************************************************************************
函数功能:定时器T/C0实现1秒钟定时,控制发光二极管周期性亮灭,晶振8MHZ
***************************************************************************************/
#include
char Counter = 0;// 1S计数变量清零,变量声明
/********端口初始化********/
void port_init()//端口初始化子函数
{
PORTA=0xFF;//PA口配置为输出
DDRA=0xFF;//PA口初始值为“1”
}
/********定时器0初始化********/
void timer0_init()//因为定时时间太短,看不到灯的变化
{
SREG = 0x80;//使能全局中断
TIMSK|=(1< TCCR0|=(1< TCNT0 = 61;//定时初值设置,定时时间 =(256-61)/7812.5=25ms } /********主函数********/ void main() { port_init(); timer0_init(); while(1); } /********定时器0中断服务函数********/ #pragma interrupt_handler timer0_ovf:10 void timer0_ovf(void) { TCNT0 =61;//重装计数初值 if(++Counter >= 40)//定时时间到1S吗?定时中断溢出40次为1S,25ms*40=1000ms=1s(秒){ PORTA^=BIT(0);//,将PA口的第0位取反操作。 Counter = 0;//1S计时变量清零 } } 小企鹅diy科学探究学习网 更多相关文章转到: http://hi.baidu.com/wqb_lmkj/blog文章分类下的单片机 AVR单片机C语言高级程序设计 前言..................................................................................................................................................2 第1章 概述...................................................................................................................................3 1.1提高编制单片机应用程序效率最好的办法是采用C语言编程.....................................4 1.2 C语言具有突出的优点......................................................................................................5 1.3 AVR单片机的C编译器简介............................................................................................6 第二章AVR单片机简介及主要特性...............................................................................................6 2.1 AVR单片机简介及主要特性..........................................................................................6 2.2 学习开发AVR单片机用到的实验工具及器材.............................................................8 第3章 AVR单片机开发软件的安装及初步使用......................................................................14 3.1 ICCAVR6.31A C语言编译器安装...............................................................................14 3.2 AVR Studio集成开发环境安装.....................................................................................18 3.3 PonyProg2000下载软件安装.......................................................................................18 3.4 我们的第一个AVR入门程序.......................................................................................19 第4章 AVR DEMO单片机综合试验板原理介绍及使用..............................................................36 4.1 AVR DEMO单片机综合试验板........................................................................................36 4.2ATMEAG16L单片机的主要特点与内部组成...................................................................38 4.3使用JTAGICE仿真器(JTAG ICE)调试AVR DEMO单片机综合试验板......................39 前言 世界进入21世纪后,由于电子技术及计算机技术的迅猛发展,新型电子产品的更新换代速度越来越快。以单片机为核心构成的智能化产品具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。 从前,汇编语言是单片机工程师进行软件开发的唯一选择,但汇编语言程序的可读性和可移植性较差,采用汇编语言编写单片机应用系统程序的周期长,而且调试和排错也比较困难。许多读者都发现,采用汇编语言设计一个大型复杂程序时,可读性较困难,往往隔一段时间再看,又要花脑力从头再来。并且不同类型的单片机,必须采用不同的汇编语言来编写,这是因为汇编语言完全依赖于单片机硬件。这样,对开发者而言,如果由于项目的变化而经常变更单片机类型,其开发的难度是可想而知的。因为对于学习一种单片机汇编语言开发,总少不了学习、探索、实践、进步这样一个过程,这个过程少则半年,多则1~2年,等你学完后再搞出产品,也许商机已消失。随着社会竞争的日益激烈,开发效率已成为商战致胜的最重要法宝之一。 为了提高编制单片机系统和应用程序的效率,改善程序的可读性和可移植性,最好的办法是采用高级语言编程。目前,C语言逐渐成为国内外开发单片机的主流语言。 C语言是一种通用的编译型结构化计算机程序设计语言,在国际上十分流行,它兼顾了多种高级语言的特点,并具备汇编语言的功能。它支持当前程序设计中广泛采用的由顶向下的结构化程序设计技术。一般的高级语言难以实现汇编语言对于计算机硬件直接进行操作(如对内存地址的操作、移位操作等)的功能,而C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作。C语言有功能丰富的库函数、运算速度快、编译效率高,并且采用C语言编写的程序能够很容易地在不同类型的计算机之间进行移植。因此,C语言的应用范围越来越广泛,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。对汇编语言掌握到只要可以读懂程序,在时间要求比较严格的模块中进行程序的优化即可。采用C语言不必对单片机和硬件接口的结构有很深入的了解,编译器可以自动完成变量的存贮单元的分配,编程者就可以专注于应用软件部分的设计,大大加快了软件的开发速度。统计资料表明,不同单片机的C语言编译程序80%的代码是公共的,采用C语言可以很容易地进行单片机的程序移植工作,有利于产品中的单片机重新选型。C语言的编译效率也很高,对于同一个问题,用C语言编写的程序生成代码的效率仅比用汇编语言编写的程序低10%~20%,由于现在片上ROM(或FLASH ROM)空间做到32/64K字节(或更大)的单片机比比皆是,因此代码效率所差的10%~20%已经不是重要问题。至于对开发速度、软件质量、结构严谨、程序坚固等方面进行综合评述的话,则C语言的完美绝非是汇编语言编程所能比拟的。本书以初学者为对象,从零开始,循序渐进地讲解当前最热门的AVR单片机的C语言高级程序设计,在介绍AVR单片机的各单元部分基本特性的同时,使用入门难度浅、程序长度短且又能立竿见影的初级实例,详细介绍了如何使用ATmega16L的片上资源,帮助初学者快速掌握AVR单片机的高效设计。最后3章详细介绍了3个以AVR单片机为核心的实际产品的软硬件设计。 随书所附的光盘中提供了本书的所有软件设计程序文件,读者朋友可参考。本书的编写工作得到了中国电力出版社大力支持,出版社的资深编辑刘炽老师做了大量耐心细致的工作,使得本书得以顺利完成,在此表示衷心感谢。由于作者水平有限,必定还存在不少缺点或漏洞,诚挚欢迎广大读者提出意见并不吝赐教。 第1章 概述 自从笔者出版了《手把手教你学单片机》(北京航空航天大学出版社出版)一书后,由于教学方式新颖独特,入门难度明显降低,结合边学边练的实训模式,很快有一大批读者入了单片机这扇门。据不完全统计,全国各地(包括港澳台地区)跟着《手把手教你学单片机》学习的读者超过30万名,其中不少读者已取得了丰硕的成果。有的读者给笔者来电说研制的“包装线控制器”已稳定运行数月,还有的读者利用单片机做“霓虹灯程序控制器”并投放市场,„„等等。总之,《手把手教你学单片机》使不少读者从传统的电子技术领域步入了微型计算机领域,进入了一个暂新的天地。 《手把手教你学单片机》一书是以汇编语言为主进行讲解实验的。所谓汇编语言就是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。汇编语言的主要优点是占用资源少、程序执行效率高。作为初学者必须基本掌握汇编语言的设计方法,因为汇编语言直接操作计算机的硬件,学习汇编语言对于了解单片机的硬件构造是有帮助的。 从前,汇编语言是单片机工程师进行软件开发的唯一选择,但汇编语言程序的可读性和可移植性较差,采用汇编语言编写单片机应用系统程序的周期长,而且调试和排错也比较困难。许多读者都发现,采用汇编语言设计一个大型复杂程序时,可读性较困难,往往隔一段时间再看,又要花脑力从头再来。更为重要的是,随着社会竞争的日益激烈,开发效率已成为商战致胜的最重要法宝之一。大家知道,不同类型内核的单片机,其指令系统是不一样的,因此用来编写程序的汇编语言也是不一样的,这样就产生了很严重的问题。例如:我们原来是学51系列单片机的,也做过许多产品,创造出一定的经济效益。但是,忽然有一天,有客户要求用AVR单片机开发一款产品,其利益回报也相当不错,但是你怎么办呢?重新开始学AVR的汇编语言?!等到学好学熟起码要半年(有些人等到会熟练开发产品可能要一年以上的时间),客户会等不及,等半年后也许商机已消失。这只是其中的一个难题,因为现在新型的单片机层出不穷,如果你的一些客户经常拿不同的单片机要你开发设计,那你怎么办?要较好地解决这些问题,你只能采用高级语言编程了。目前在单片机中,C语言是首选的高级开发语言。 1.1提高编制单片机应用程序效率最好的办法是采用C语言编程 为了提高编制计算机系统和应用程序的效率,改善程序的可读性和可移植性,最好的办法是采用高级语言编程。目前,C语言逐渐成为国内外开发单片机的主流语言。 C语言是一种通用的编译型结构化计算机程序设计语言,在国际上十分流行,它兼顾了多种高级语言的特点,并具备汇编语言的功能。它支持当前程序设计中广泛采用的由顶向下的结构化程序设计技术。一般的高级语言难以实现汇编语言对于计算机硬件直接进行操作(如对内存地址的操作、移位操作等)的功能,而C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作。C语言有功能丰富的库函数、运算速度快、编译效率高,并且采用C语言编写的程序能够很容易地在不同类型的计算机之间进行移植。因此,C语言的应用范围越来越广泛。 用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。因此,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。对汇编语言掌握到只要可以读懂程序,在时间要求比较严格的模块中进行程序的优化即可。采用C语言进行设计也不必对单片机和硬件接口的结构有很深入的了解,编译器可以自动完成变量存贮单元的分配,编程者就可以专注于应用软件部分的设计,大大加快了软件的开发速度。采用C语言可以很容易地进行单片机的程序移植工作,有利于产品中的单片机重新选型。 C语言的模块化程序结构特点,可以使程序模块大家共享,不断丰富。C语言可读性的特点,更容易使大家可以借鉴前人的开发经验,提高自己的软件设计水平。采用C语言,可针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块、算法等编制相应的函数,这些函数经过归纳整理可形成专家库函数,供广大的工程技术人员和单片机爱好者使用完善,这样可大大提高国内单片机软件设计水平。 过去长时间困扰人们的“高级语言产生代码太长,运行速度太慢不适合单片机使用”的致命缺点已被大幅度地克服。目前,AVR系列单片机的C语言编译代码长度,已超过中等程序员的水平。而且,AVR系列单片机片上SRAM、FLASH空间都很大、运行速度很快,代码效率所差的10%~20%已经不是什么重要问题。关于速度优化的问题,只要有好的仿真器的帮助,用人工优化关键代码就是很简单的事了。至于谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非是汇编语言编程所能比拟的。 1.2 C语言具有突出的优点 1.语言简洁,使用方便灵活 C语言是现有程序设计语言中规模最小的语言之一,而小的语言体系往往能设计出较好的程序。C语言的关键字很少,ANSI C标准一共只有32个关键字,9种控制语句,压缩了一切不必要的成份。C语言的书写形式比较自由,表达方法简洁,使用一些简单的方法就可以构造出相当复杂的数据类型和程序结构。 2.可移植性好 用过汇编语言的读者都知道,即使是功能完全相同的一种程序,对于不同的单片机,必须采用不同的汇编语言来编写。这是因为汇编语言完全依赖于单片机硬件。而现代社会中新器件的更新换代速度非常快,也许我们每年都要跟新的单片机打交道。如果每接触一种新的单片机就要学习一次新的汇编语言,那么也许我们将一事无成,因为每学一种新的汇编语言,少则几月,多则上年,那么我们还有多少时间真正用于产品开发呢? C语言是通过编译来得到可执行代码的,统计资料表明,不同机器上的C语言编译程序80%的代码是公共的,C语言的编译程序便于移植,从而使在一种单片机上使用的C语言程序,可以不加修改或稍加修改即可方便地移植到另一种结构类型的单片机上去。这大大增强了我们使用各种单片机进行产品开发的能力。 3.表达能力强 C语言具有丰富的数据结构类型,可以根据需要采用整型、实型、字符型、数组类型、指针类型、结构类型、联合类型、枚举类型等多种数据类型来实现各种复杂数据结构的运算。C语言还具有多种运算符,灵活使用各种运算符可以实现其他高级语言难以实现的运算。 4.表达方式灵活 利用C语言提供的多种运算符,可以组成各种表达式,还可采用多种方法来获得表达式的值,从而使用户在程序设计中具有更大的灵活性。C语言的语法规则不太严格,程序设计的自由度比较大,程序的书写格式自由灵活。程序主要用小写字母来编写,而小写字母是比较容易阅读的,这些充分体现了C语言灵活、方便和实用的特点。 5.可进行结构化程序设计 C语言是以函数作为程序设计的基本单位的,C 1.3 AVR单片机的C编译器简介 目前世界上几乎所有系列的单片机都支持C语言开发,开发AVR单片机的C编译器主要有:IAR Embedded Workbench(简称IAR)、Codevision AVR(简称CAVR)、Imagecraft C Compiler(简称ICC)、GNU C For AVR(简称GCCAVR)等。IAR是瑞典IAR SYSTEMS公司开发的AVR单片机集成开发环境(IDE),包含嵌入式编译器、汇编器、连接定位器、库管理器、项目管理及调试器等。其特点是编译效率高、功能齐全,但价格昂贵。 CAVR 也是一个开发AVR单片机的集成开发环境,其界面友好,很容易上手。它带有一个叫Codewizard的代码生成器,可生成外围器件的相应初始化代码,另外,它还提供了很多常用的器件库代码,如:LCD、UART、SPI、实时时钟、温度传感器等。它的价格适中。 ICC是Imagecraft公司开发的使用标准C语言的AVR单片机集成开发环境,它有一个Application Wizard的代码生成器, 也可生成外围器件的初始化代码。其价格适中。 GCCAVR是一个公开源代码的自由软件,因此使用上时不必考虑价格因素,其缺点是没有集成开发环境(IDE),使用时麻烦一些。 本书中,我们使用ICC集成开发环境进行学习开发,ICC集成开发环境软件能够产生形式简洁、效率较高的程序代码,如果程序较大时在代码质量上可以与汇编语言程序相媲美。 第二章AVR单片机简介及主要特性 2.1 AVR单片机简介及主要特性 AVR单片机是ATMEL公司研发的增强型内置Flash的RISC(Reduced Instruction Set CPU)精简指令集高速8位单片机,设计时吸取了80C51及PIC单片机的优点,具备单时钟周期执行一条指令的能力,运行速度高达1Mips/MHz。AVR单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。 AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑),提高了指令执行速度,克服了瓶颈现象,增强了功能;同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。AVR单片机在软/硬件开销、速度、性能和成本诸多方面取得了优化平衡,是一种高性价比的单片机。其主要特性如下: 1.内嵌高质量的Flash程序存储器,可反复擦写,支持ISP和IAP,便于产品的调试、开发、生产、更新。内嵌长寿命的EEPROM可长期保存关键数据,避免断电丢失。片内具有大容量的RAM,有效支持使用高级语言开发系统程序。2.高速度、低功耗,具有SLEEP(省电休眠)功能。每一指令执行速度可达50ns(20MHz),而耗电则在1mA~2.5mA之间(典型功耗,WDT 关闭时为100nA),AVR运用Harvard结构概念(具有预取指令功能),即对程序存储和数据带有不同的存储器和总线当执行某一指令时,下一指令被预先从程序存储器中取出, 这使得指令可以在每一个时钟周期内被执行。AVR单片机可宽电压运行(2.7~5.5V),抗干扰能力强,可降低一般8位机中的软件抗干扰设计工作量和硬件的使用量。 3.AVR单片机的I/O线全部带可设置的上拉电阻,并行I/O 口输入输出特性与PIC 的HI/LOW输出及三态高阻抗HI-Z 输入类同外,也可设定类同80C51系列内部拉高电阻作输入端的功能,可单独设定为输入/输出、可设定(初始)高阻输入。使得I/O口资源灵活、功能强大、可充分利用。AVR的I/O 口是真正的I/O 口, 能正确反映I/O 口的输入/输出真实情况。 4.AVR单片机片内具备多种独立的时钟分频器,分别供URAT、IIC、SPI使用。其中与8/16位定时器配合的具有多达10 位的预分频器,可通过软件设定分频系数提供多种档次的定时时间。AVR单片机中的定时器/计数器(单)可双向计数形成三角波,再与输出比较匹配寄存器配合,生成占空比可变、频率可变、相位可变方波的脉宽调制输出PWM,令人耳目一新。 5.工业级产品,具有大电流10~20mA 或40mA(单一输出),可直接驱动SSR 或继电器。内置的看门狗定时器(WDT)用于防止程序跑飞,提高产品的抗干扰能力。 6.超功能精简指令。具有32 个通用工作寄存器(相当于80C51单片机中的32个累加器),克服了单一累加器在数据处理时造成的瓶颈现象。 7.AVR单片机内有模拟比较器,I/O 口可作A/D 转换用, 可组成廉价的A/D 转换器。 8.像80C51一样,AVR有多个固定中断向量入口地址,因此可快速响应中断,而不会像PIC一样所有中断都在同一向量地址,需要以程序判别后才可响应。9.AVR单片机有自动上电复位电路、独立的看门狗电路、低电压检测电路BOD,多个复位源(自动上下电复位、外部复位、看门狗复位、BOD复位),可设置的启动后延时运行程序,增强了系统的可靠性。 10.有串行异步通讯UART,不占用定时器和SPI 传输功能,因其速度高,故可以工作在一般标准整数频率,而波特率可达576K。11.有多通道10 位A/D转换器及实时时钟RTC。 AVR单片机技术表现出单片机集多种器件(包括FLASH程序存储器、看门狗、EEPROM、同/异步串行口、TWI、SPI、A/D模数转换器、定时器/计数器等)和多种功能(增强可靠性的复位系统、降低功耗抗干扰的休眠模式、品种多门类全的中断系统、具输入捕获和比较匹配输出等多样化功能的定时器/计数器、具替换功能的I/O端口„„)于一身,充分体现了现代单片机技术向“片上系统SoC”过渡及发展的方向。 2.2 学习开发AVR单片机用到的实验工具及器材 学习一种新的单片机技术,实验与实践是必不可少的,否则只能是纸上谈兵。这里我们使用以下的器材进行AVR单片机的C语言设计。1.ImageCraft公司的ICCAVR6.31A C语言编译器。2.Atmel公司的AVR Studio集成开发环境。3.PonyProg2000下载软件。4.AVR DEMO单片机综合试验板。5.AVR单片机JTAG仿真器。6.并口下载器。 7.5V高稳定专用稳压电源。 8.TOP2004多功能USB编程器(可选购)。9.一台奔腾级及以上的家用电脑(PC机)。下面简介一下这些实验工具及器材。 2.2 学习开发AVR单片机用到的实验工具及器材 学习一种新的单片机技术,实验与实践是必不可少的,否则只能是纸上谈兵。这里我们使用以下的器材进行AVR单片机的C语言设计。1.ImageCraft公司的ICCAVR6.31A C语言编译器。2.Atmel公司的AVR Studio集成开发环境。3.PonyProg2000下载软件。4.AVR DEMO单片机综合试验板。5.AVR单片机JTAG仿真器。6.并口下载器。 7.5V高稳定专用稳压电源。 8.TOP2004多功能USB编程器(可选购)。9.一台奔腾级及以上的家用电脑(PC机)。下面简介一下这些实验工具及器材。2.2.1 ICCAVR6.31A C语言编译器 ICCAVR6.31A 是ImageCraft公司开发的用于AVR单片机的C语言编译器,是一个综合了编辑器和工程管理器的纯32位集成开发环境(IDE)。由于ICCAVR功能强大,使用简单方便,具有良好的技术支持且价格合适,故得到了广泛的应用。图2-1 为ICCAVR的工作界面。 图2-1 ICCAVR的工作界面 2.2.2 AVR Studio集成开发环境 AVR Studio是一个Atmel公司开发的集项目管理、程序汇编、程序调试、程序下载、JTAG仿真等功能于一体的集成开发环境。但AVR Studio不支持C语言编译,因此当我们用C语言开发AVR单片机时,需先用ICCAVR编写C语言并进行编译,然后使用AVR Studio打开编译生成的*.cof文件,进行程序的仿真调试。图2-2 为AVR Studio的工作界面。 图2-2 AVR Studio的工作界面 2.2.3 PonyProg2000下载软件 PonyProg2000软件主要用于AVR单片机及PIC单片机的程序下载,能在Windows95/98/ME/NT/2000/XP等操作系统上使用。对英语不好的读者,还可以使用PonyProg2000的汉化程序。图2-3 为PonyProg2000的工作界面。 图2-3 PonyProg2000的工作界面 2.2.4 AVR DEMO单片机综合试验板 AVR DEMO单片机综合试验板为多功能实验板,对入门实习特别有效,其主要功能有: 1.可做AVR单片机的输入/输出实验。2.可做音响实验。3.可做A/D实验。4.可做PWM(D/A)实验。 5.八位数码管动态扫描输出及驱动。6.八位 LED 输出指示。7.可做IIC及SPI总线实验。8.DS18B20温度控制实验。9.红外遥控实验。10.16*2液晶驱动实验。11.128*64液晶驱动实验。 12.与PC机连接做RS232通信实验。图2-4~2-6为AVR单片机综合试验板外型。 图2-4 AVR DEMO单片机综合试验板外型 图2-5 AVR DEMO单片机综合试验板外型(驱动16*2字符型液晶) 图2-6 AVR DEMO单片机综合试验板外型(驱动128*64图型液晶)2.2.5 AVR单片机JTAG仿真器 为经典的AVR仿真器,支持的芯片为: ATmega128,ATmega128L,ATmega16,ATmega162,ATmega162V,ATmega165,ATmega165V,ATmega169,ATmega169V,ATmega16L,ATmega32,ATmega323,ATmega323L,ATmega32L,ATmega64,ATmega64L。图2-7为AVR单片机JTAG仿真器外型。 图2-7 AVR单片机JTAG仿真器外型 2.2.6 并口下载器 低价、可靠、实用。支持AVR单片机及AT89S51/52单片机。下载程序时必用的工具。图2-8为并口下载器外型。 图2-8 并口下载器外型 2.2.7 TOP2004多功能USB编程器 USB接口。支持AT89、AT87F、AT90、ATINY、ATMEGA、SST89、SM、MSU、GSM97、i87C/LC、P87、W77(78)E/LE、IS89C/LV、PIC12/16/17/ 18、EM78P系列单片机。27/28/29/39/49/24C/93C系列存储器。16V8、20V8、22V10.支持74、4000/4500SRAM数字电路测试。支持芯片超过2000种,适合学习、开发、手机维修、电脑BIOS烧写。图2-9为TOP2004多功能USB编程器外型。 图2-9 TOP2004多功能USB编程器外型 第3章 AVR单片机开发软件的安装及初步使用 3.1 ICCAVR6.31A C语言编译器安装 在电脑中放入配套光盘,打开ICCAVR6.31A 安装文件后进入安装界面(图3-1),安装目录可使用默认方式将其安装在C盘的icc文件夹中(图3-2)。 图3-1 打开ICCAVR6.31A 安装文件后进入安装界面 图3-2 安装在C盘的icc文件夹中 安装完成后,需进行注册才能得到无时间限制的完全版软件。注册方式如下: 1.打开ICCAVR6.31A编译器界面,单击菜单栏Help→Regist Software(图3-3),系统会提示关掉计算机的防病毒程序,单击Continue按钮进入注册界面(图3-4)。 图3-3 单击菜单栏Help→Regist Software 图3-4 单击Continue按钮进入注册界面 2.选中并复制EMail Unlock Code栏右侧框内的7组数值。3.打开注册器,粘贴刚才复制的数值(图3-5)。 图3-5 粘贴刚才复制的数值 4.点击得到解锁码(图3-6)。复制该解锁码。 图3-6 点击得到解锁码 5.在ICCAVR6.31A编译器的注册界面的Paste(~V)the unlock code from Imagecraft’s email栏中,粘贴入解锁码(图3-7),单击License按钮后再单击OK完成注册(图3-8)。注册完成后的ICCAVR6.31A启动界面如图3-9所示,主要由菜单栏、工具栏、源文件编辑窗口、工程窗口和编译输出窗口五部分组成。 图3-7 粘贴入解锁码 图3-8 单击License按钮后再单击OK完成注册 图3-9 注册完成后的ICCAVR6.31A启动界面 3.2 AVR Studio集成开发环境安装 打开配套光盘内的AVR Studio安装文件,双击Setup.exe文件,按照提示步骤进行安装。安装结束后,会出现一个关于安装USB驱动的界面,由于我们这里不用到USB驱动的器件,只需点击Cancel关闭即可。安装完成后的AVR Studio启动界面如图3-10所示。 图3-10 AVR Studio启动界面 3.3 PonyProg2000下载软件安装 PonyProg2000软件主要用于AVR单片机及PIC单片机的程序下载,能在Windows95/98/ME/NT/2000/XP等操作系统上使用。双击配套光盘内的PonyProgV206f软件进行安装,安装过程中只需按照提示,单击Next按钮,逐步进行即可。安装完成后,还可以进行汉化,选中汉化程序包中的PonyProg2000文件(注意不要打开),然后复制,随后打开C:/Program Files/ PonyProg2000文件夹,直接点击粘贴。当弹出对话框提示是否需替换时,点确定,原文件即成为中文版。图3-11为PonyProg2000的启动界面。 图11 PonyProg2000的启动界面 AVR单片机开发过程为: 1.设置ICCAVR。2.建立一个工程项目。2.输入C源文件。 3.向工程项目中添加源文件。 4.编译文件,编译通过后生成COFF/HEX文件。 5.在AVR Studio集成开发环境中打开COFF文件,使用JTAG仿真器进行实时在线仿真或进行软件模拟仿真。 7.使用PonyProg2000软件将HEX文件下载到单片机中。8.应用。 3.4 我们的第一个AVR入门程序 接下来我们来做第一个AVR程序,让程序跑起来,控制AVR单片机综合试验板上的8个LED,让它们亮、灭进行闪烁。 3.4.1 设置ICCAVR 通过ICCAVR对源程序编译连接工程之前,需要对编译器属性进行设置,设置好的某些属性可保留起来作为新建工程的默认属性。 打开ICCAVR软件界面,选择Project→Option进入属性设置对话窗。共有Paths、Compiler、Target、Config Salvo四个属性标签页。 1).Paths标签页(图3-12) 在属性中设置编译器的头文件目录(Include Path(s):)和库文件目录(Library Path:)。我们使用系统默认的头文件目录和库文件目录。 图3-12 Paths标签页 由于我们不使用汇编语言进行开发,因此汇编语言包含路径(Asm Include Path(s):)空着不填。 输出文件目录(Output Directory:)空着不填,则输出文件自动存放在工程项目目录中,否则存放在用户填写的路径下。 2).Compiler标签页(图3-13) Strict ANSI C Checkings:选中表示进行严格的C语法检查。 图3-13 Compiler标签页 Accept Extensions(C++ comments,binary constants):选中表示接受C++风格的程序注释。 Int size enum(for backword compatibility):选中表示可以向下兼容程序。 Optimizations栏可以选择默认设置(Default)或使能代码压缩功能(Enable code compression),对程序的编译进行优化。 Output Format栏选择格式输出。COFF格式的文件用于程序的仿真调试,HEX格式的文件可烧写入单片机。 AVR Studio Version(COFF)栏中选择Studio 4.06 and above。3).Target标签页(图3-14) 在Device Configuration下拉列表中,选择我们所使用的单片机芯片型号,这里我们选择ATMega16。其它采用默认设置。 图3-14 Target标签页 4).Config Salvo标签页(图3-15) 采用系统默认的为不带实时操作系统(Do not use Salvo Configurator)。 图3-15 Config Salvo标签页 完成设置后,单击OK即完成ICCAVR的属性设置。如果我们在开发下一个工程项目时,使用这些已经做好的属性设置,则不必再次进行属性设置了。 3.4.2 建立一个工程项目 在我的文档中新建一个ac3-1的文件夹。 在ICCAVR软件界面中,单击Project,在弹出的下拉菜单选中New选项,屏幕显示为图3-16。在出现的Save New Project As对话框中,选择工程项目存放的路径(存放在刚才新建的ac3-1文件夹中)并输入新建工程项目的名称(这里我们取名ac3-1),单击保存按钮,系统自动初始化成三个空文件夹Files、Headers、Documents,如图3-17所示。 图3-16 新建一个工程项目 图3-17 自动初始化成三个空文件夹Files、Headers、Documents 3.4.3 输入C源文件 单击File菜单,在下拉菜单中选择New,随后在出现的Untitled-0文本文件编辑窗口中输入以下的源程序(如图3-18)。 图3-18 输入源程序 #include 程序输入完成后,选择File,在下拉菜单中选中Save as,保存在ac3-1文件夹中,源文件名为ac3-1.c,保存后可看到源文件名由Untitled-0变为ac3-1.c。 3.4.4 向工程项目中添加源文件 选中工程项目区的File文件夹右击。在出现的下拉窗口中选择Add Files,如图3-19所示。在添加文件窗口中选择ac3-1.c源文件,鼠标单击打开按钮,这时ac3-1.c文件便加入到工程项目中(图3-20)。 图3-19 向工程项目中添加源文件 图3-20 源文件加入到工程项目中 3.4.5 编译文件 选择主菜单栏中的Project,在下拉菜单中选中Make Project,这时编译输出窗口出现源程序的编译信息,如图3-21所示。如果编译出错,会在编译输出窗口中显示出来。用户可以在源程序编辑窗口重新输入、修改源程序文件,并再次编译,直到编译通过并生成用户所需的文件。 图3-21 编译输出窗口出现源程序的编译信息 3.4.6 软件模拟仿真 打开AVR Studio集成开发环境,这时出现一个欢迎进入AVR Studio的界面(图3-22)。 图3-22 出现一个欢迎进入AVR Studio的界面 单击Open按钮,选中ac3-1.cof文件后点击打开,出现生成AVR Studio工程项目文件的界面后点保存(图3-23),然后出现选择仿真平台的界面(图3-24)。这里我们进行软件模拟仿真,Debug Platform栏中选择AVR Simulator,Device栏选择Atmega16芯片(图3-25)。点击Finish后进入仿真界面(图3-26)。 图3-23 出现生成AVR Studio工程项目文件的界面后点保存 图3-24 出现选择仿真平台的界面 图3-25 Device栏选择Atmega16芯片 图3-26 点击Finish后进入仿真界面 在主菜单中打开Debug,从Debug的下拉菜单中可看到常用的仿真快捷键,这里我们选择F10(Step Over)进行调试。 选择Debug →AVR Simulator Options,出现图3-27所示的仿真选项,我们将Frequency一项中的仿真频率改为8.00MHz,使其与试验板上的实际工作频率相符。 图3-27 选择Debug →AVR Simulator Options 在左侧Workspace窗口中,存放着ATMeag16的各种寄存器的状态值,我们将I/O ATMEGA16前的加号展开,再将PORTB前的加号展开,将PORTB输出口打开(图3-28)。鼠标在程序的光标箭头上点一下,随后按动F10,可发现PORTB口的各寄存器会发生变化,DDRB全部为黑色(0xFF),说明方向寄存器的设置为输出方式,而随着继续按动F10,PORTB与PINB则一会儿变黑(0xFF),一会儿变白(0x00)。将Workspace窗口中的Processor前的加号展开,最下面有个Stop Watch项,该项就是AVR Studio在选定时钟频率下计算出的运行时间(图3-29)。我们可发现,PORTB输出低电平到高电平的时间间隔约0.439秒,反复循环。仿真调试通过后,关闭AVR Studio开发环境。 图3-28 将PORTB输出口打开 图3-29 AVR Studio在选定时钟频率下计算出的运行时间 3.4.7 将HEX文件下载到单片机中 将并口下载器插电脑的并口,下载线的另一端插AVR DEMO单片机综合试验板的ISP口。 将试验板上标示PB0-PB7的双排针上8个短路块拔下,插到标有LED的双排针上,使PB口与LED接通。试验板通电工作,注意,5V稳压电源接DC5V插座;若使用9V-15V电源时,插9V-15V的插座。插错电源会损坏芯片! 第一次使用PonyProg2000下载程序时,需对PonyProg2000进行设置,选择合适的下载接口方式,并对端口进行校正。PonyProg2000支持串口及并口下载,这里我们采用并口SPI方式下载程序。 双击桌面上的PonyProg2000快捷图标运行软件(图3-30),出现小马头图标后点确认。 程序下载前先进行端口设置及校正。选择设置→接口设置,出现图3-31对话框。如果我们的电脑使用的操作系统是Windows 95/98/ME,单击并行,选择Avr ISP API,并选择LPT1;如果我们的电脑使用的操作系统是Windows NT/2000/XP,则单击并行,选择Avr ISP I/O,并选择LPT1。 图3-30 运行PonyProg2000软件 图3-31 进行端口设置及校正 下来选择设置→校正,对端口进行校正,出现图3-32的窗口。单击Yes开始校正,校正完成后会有提示(图3-33),点OK即可。 图3-32 单击Yes开始校正 图3-33 校正完成 选择器件→AVR micro→Atmega16(图3-34)。 图3-34 选择器件→AVR micro→Atmega16 选择文件→打开程序(FLASH)文件,文件类型选*HEX,装载编程文件(图3-35)。 图3-35 装载编程文件 选择命令→擦除,先擦除器件(图3-36)。 图3-36 选择命令→擦除 选择命令→Security and Configuration Bits„,按图3-37配置熔丝位。单击写入,写入熔丝位配置。 图3-37 写入熔丝位配置 选择命令→写入所有,开始下载烧写文件(图3-38)。 图3-38 选择命令→写入所有 在下载文件时,ISP旁的发光二极管D0会点亮。3.4.8 应用 下载烧写完成时,我们即可看到PB口驱动的8个发光二极管开始闪亮,周期约0.8秒,即点亮0.4秒、熄灭0.4秒,反复进行。 恭喜您,您已经踏入了AVR高速单片机的大门,请您继续行动起来,掌握AVR单片机的高效设计。 第4章 AVR DEMO单片机综合试验板原理介绍及使用 4.1 AVR DEMO单片机综合试验板 AVR DEMO单片机综合试验板为多功能实验板,对入门实习及学成后开发产品特别有帮助,图4-1为AVR DEMO单片机综合试验板电路原理图(作者注:使用Protel99se打开)。 图4-1 AVR DEMO单片机综合试验板电路原理图 U1为单片机ATMEAG16L。JP1、JP2为双排针,便于单片机外扩其它器件。 D1-D8为8个发光二极管,通过LED双排针与PB0-PB7连接,可作开关量输出的指示。 ISP为在线下载程序的接口。JTAG为在线JTAG仿真接口。 LCD128_64为驱动128*64图型液晶的接口,可做128*64液晶驱动实验。LCD16_2为驱动16*2液晶的接口,可做16*2液晶驱动实验。JTAG_R双排针连接R2-R5这4个10K的上拉电阻,这是进行JTAG仿真所需的,一般情况下用短路块将JTAG_R双排针短接。 U2为232通信芯片,通过UART双排针与单片机ATMEAG16L的PD0、PD1连接,方便与PC机连接做RS232通信实验。 SW_DIP4为4位拔码开关,它通过SW_DIP短路块与PD4-PD7连接,可做状态转换的实验。 RV1为多圈电位器,所取得的模拟电压通过排针AD后送单片机的PA7,可做A/D实验。 Q1及蜂鸣器BZ组成音响电路,通过排针BEEP与单片机的PD5连接,可做音响实验。 S1-S4为4个轻触式按键开关,通过KEY双排针与PD4-PD7连接,可做开关量的输入实验。 INT0、INT1为2个轻触式按键开关,通过INT双排针与PD2、PD3连接,可进行AVR单片机的外部中断实验。 LEDMOD1、LEDMOD2为8位数码管显示器,其中字段码经LEDMOD_DATA双排针后由单片机的PA0-PA7送出,位选码经LEDMOD_COM双排针后由单片机的PC0-PC7送出,可做8位数码管动态扫描输出及驱动。 U4为IIC总线实验器件24C01,通过IIC双排针与PC0、PC1连接,可做IIC总线实验。 U5为SPI总线实验器件93C46,通过SPI双排针与PB4-PB7连接,可做SPI总线实验。 U7为测温器件,通过排针18B20与PC7连接,能进行测温及控温实验。U8为38KHz的红外接收器,通过排针IR与PD6连接,可做红外遥控实验。 U6A、U6B及外围器件组成有源滤波电路,通过双排针PWM_IN与单片机的PB3、PD4、PD5、PD7连接,可做PWM(D/A)实验。 J1、J2为外接电源插口,其中J1输入9-15V直流电压,供U6运放使用,同时经U3稳压获得的5V供其它部分使用。若实验中不需从PWM_OUT1、PWM_OUT2端口取得PWM的模拟量,那么直接从J2口输入5V稳压电源即可,而不用J1口。 4.2ATMEAG16L单片机的主要特点与内部组成 ATMEAG16L是AVR单片机家族中的高档产品,其包含的功能较为齐全,非常适合于学习及开发实践。选择ATMEAG16L进行学习的另一个主要原因是该芯片支持JTAG调试,这样大大降低了我们在学习、开发过程中的调试难度及成本。 ATMEAG16L的主要特点为: ●内部Flash程序存储器内部含有16K字节的Flash存储器,支持ISP(在系统编程)和IAP(在应用编程),可被重复擦写10000次。 ●内部数据存储器SRAM达1K字节。 ●内部EEPROM达512字节,可擦写100000次,可以在系统掉电时保存一些用户信息。 ●32个I/O口,分PA、PB、PC、PD共4组,每组8位。每个I/O口可负载20~40mA的电流,芯片的总电流不超过200mA。 ●有两个可分频的8位定时器/计数器和一个可分频的16位定时器/计数器,带输入捕获、比较输出功能。有4个通道的PWM,可作DAC转换器。●中断单元有20个中断源,每个中断有独立的中断向量入口地址,所有的中断事件都有各自的使能位,可以根据需要使能或屏蔽。 ●Atmega16L支持多种时钟方式,有外部晶振、外部RC振荡、外部时钟和内部RC振荡等。Atmega16L内置上电复位电路、可编程低电压检测(BOD)复位电路和带独立振荡器的看门狗,支持上电复位、外部复位、看门狗复位和低电压检测复位等复位源。 ●内置8通道10位精度的逐次逼近式模/数转换器(ADC),支持单端和双端差分信号输入,内含增益可编程运算放大器。●SPI同步接口。●全双工的USART。● 片内模拟比较器。● 二线总线(TWI)等。 图4-2为ATMEAG16L的引脚排列。图4-3为ATMEAG16L的内部组成结构。 图4-2 ATMEAG16L的引脚排列 图4-3 ATMEAG16L的内部组成结构 4.3使用JTAGICE仿真器(JTAG ICE)调试AVR DEMO单片机综合试验板 JTAG ICE与AVR DEMO单片机综合试验板连接的电路图见图4-4,图4-4中虚线的部分是可选连接。 图4-4 JTAG ICE与AVR单片机综合试验板连接的电路 当JTAGICE与用户板和个人电脑均连接上之后,就可以开始调试。下面以第3章中所作的第一个程序ac3-1.c为例,使用JTAG ICE进行实际调试。 前5步的操作与第3章中介绍的完全相同,即: 1.设置ICCAVR。2.建立一个工程项目。3.输入C源文件。4.向工程项目中添加源文件。 5.编译文件,编译通过后生成COFF/HEX文件。仅第6步的操作不同,下面将第6步介绍一下: 需要说明的是,进行JTAG仿真前,应确定单片机的JTAGEN熔丝位已被编程,这可以用下载软件PonyProg2000进行熔丝位检查。 6.使用JTAG仿真器进行实时在线仿真 将JTAG仿真器通过串口线与PC机的串口连接,另一端的10PlN扁平电缆则插入AVR DEMO单片机综合试验板上的JTAG插口。AVR DEMO单片机综合试验板通上5V电压,然后打开AVR Studio集成开发环境,这时出现一个欢迎进入AVR Studio的界面(图4-5)。 图4-5 进入AVR Studio的界面 单击Open按钮,选中ac3-1.cof文件后点击打开,出现生成AVR Studio工程项目文件的界面后点保存,然后出现选择仿真平台的界面(图4-6)。这里我们在Debug Platform栏中选择JTAG ICE,Device栏选择Atmega16芯片(图4-7)。点击Finish后JTAG ICE会与PC机建立通信连接,进入在线仿真界面(图4-8)。 图4-6 出现选择仿真平台的界面 图4-7 Device栏选择Atmega16芯片 图4-8 进入在线仿真界面 在主菜单中打开Debug,从Debug的下拉菜单中可看到常用的仿真快捷键,这里我们选择F10(Step Over)进行调试。 在左侧Workspace窗口中,存放着ATMeag16的各种寄存器的状态值,我们将I/O ATMEGA16前的加号展开,再将PORTB前的加号展开,将PORTB输出口打开。鼠标在程序的光标箭头上点一下,随后按动F10,可发现PORTB口的各寄存器会发生变化,DDRB全部为黑色(0xFF),说明方向寄存器的设置为输出方式,而随着继续按动F10,PORTB与PINB则一会儿变黑(0xFF),一会儿变白(0x00),对应的,实验板上的发光二极管也亮、灭闪烁。当按动F5快捷键(Run)后,程序全速运行,这时实验板上的发光二极管自动闪烁。 AVR单片机相关软件安装 本次项目开发使用AVR的AT90CAN128单片机,使用JTAG ICE仿真器,需要安装的软件及驱动有AVRStudio、iccavr、USB转串口驱动以及仿真器驱动。 一、AVRStudio软件安装 1.双击开始准备安装 2.单击“Next”,选择同意License 3.选择安装路径 4.选择USB 驱动 5.确定开始安装 6.安装中 7.安装完成二、iccavr软件安装 1.双击,接着双击,开始装备安装 2.单击下一步 3.选择安装路径 4.点击安装 5.安装完成三、USB转串口驱动 1.双击,点击INSTALL,等待安装完成即可 四、仿真器驱动安装(XP版) 1.双击点击SETUP.EXE安装 2.安装完成,重新启动计算机 AVR单片机编译烧写流程 本文以在AT90CAN128芯片上编写的工程can128_sw_defn为例,简单介绍AVR单片机的编译和烧写流程: 一、AVR单片机编译流程 1.打开ICCAVR软件,下拉菜单栏上Project,点击open,弹出对话框如下: 选择can128_sw_defn.prj打开,点击右侧栏中的can128_sw_defn.C文件,修改代码。 2.点击Project->options,或者点按钮,弹出对话框如下: 在Target下面的Device Configuration中选择芯片为AT90CAN128,如图所示,点击OK。 3.点击Build Project,调试栏出现下图即为编译成功,若有错误请根据错误指示进行相应代码修改即可。 二、AVR单片机烧写流程 1.将JTAG ICE与目标板以及PC机相连。 2.打开AVRStudio,将会提示一个welcome对话框,如下图所示: 点“Cancel”即可,然后点击avr studio主窗口中的图标前面标有Con的那个图标,然后按下图选择点“Connect”即可进行JTAG的联机(由于avr studio会记忆用户使用的设备是并且同时会记忆用户使用的COM号,如果下次和上次使用的是相同的设备并且没有更换COM口,那么下次使用的时候直接点击右边标有AVR的那个图标就可以快速进入联机状态;如果下次和上次使用了不同的设备或不同的COM口请使用Con图标进行联机)。 3.如果出现连接失败对话框,将JTAG 虚拟出的串口改到COM1 到COM4 之间 3.1在设备管理器中找到JTAG,如图,双击JTAG 这项: 3.2 弹出属性修改框 3.3选择端口设置 3.4 单击高级 3.5查看修改后的JTAG 4.然后点击按钮,弹出以下对话框: 在Device栏中选择AT90CAN128,并将Erase Device Before 勾上。在Flash->Input HEX Fi中选择所要烧写文件的地址,比如本工程的地址为D:\iccv7avr\examples.avr\can128_sw_defn\can128_sw_defn.hex,最后点击Flash栏中的Program等待程序烧写完成。完成后上面对话框在最后一栏会出现 表示烧写成功。第四篇:AVR单片机C语言高级程序设计(共)
第五篇:AVR单片机相关软件安装及编译烧写流程