林夕依然AVR学习笔记移植笔记_1.doc
《林夕依然AVR学习笔记移植笔记_1.doc》由会员分享,可在线阅读,更多相关《林夕依然AVR学习笔记移植笔记_1.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除林夕依然ATmega16学习笔记例程移植到Atmel Studio 6.2笔记相信你已经有了一定的C语言及数字电路基础,以及能定下心来,决心学点东西。如果做不到的话,麻烦您把我轻轻的放开,该干啥干啥去。前言最近学习AVR,网上找了N多资料后,发现就算林夕依然ATmega16学习笔记最合俺的心意。优点如下:1、 不讲原理,直接操作,适合俺这种不愿背书的差生。2、 每个例程都附有源程序及PROTEUS仿真文件,省了买零件的金钱及焊板的时间。缺点当然也有:1、 太省事了,初学者容易只跑跑例程,不求甚解(这也是市售所有学习板的通病)。2、 基于ICCAV
2、R,而不是最新的AtmelStudio。3、 理论知识太少(也算是优点)。还有一条就是这玩意是用EXE文件打包的,初次下载时,我不敢打开,生怕会给我强装软件或者开个后门什么的。后来在网上下载了一个开发板的附带光盘文件,发现里面也带着这玩意。心想这里面不该会有问题呀,才不是太放心的打开,打开后发现相见恨晚呀!好吧,先把这些例程一个一个琢磨完吧。不过看程序时发现想打瞌睡,也难怪,看这玩意也太没挑战性了。既然我的电脑中装了AtmelStudio,即然ICCAVR迟早要过时,不如把这里面的例程移植到AtmelStudio中吧!顺便也可以学习一下编程。笔记不妨公开,俺也好刷一点成在感。本文中所有例程均在
3、AtmelStudio6.2+Proteus7.8中调试通过。本文是我个人学习时的笔记,希望后来者能少走一点弯路。学习MCU的惟一捷径是多读例程,多写程序,别无他法。林夕依然ATmega16学习笔记下载链结如下:链接: 密码:mzah实验1:8种LED点亮模式1、 移植到AtmelStudio中的步骤打开Atmel Studio 6.2,新建一个项目。不知道啥意思,我选第二个后,在下面起好项目名称及选好项目目录后OK。这个好办,按CPU型号选就好了。终于进入编辑窗口了。一言蔽之,提取包中所有.c(C源码)、.h(C头文件)、.dsn(PROTEUS仿真文件)文件。AtmelStudio自己生成
4、的那个.c文件要删掉,否则你懂的。移植的时候,要把头文件换一下,否则用不了所有的iom16v.h替换为avr/io.h所有#include 全部注释掉。有这一句的文件中,全部增加#define BIT(x)(1 (x)当然了,移植的时候,我们懒得逐一去改BIT,才这么将就一下。那么AtmelStudio与BIT()等价的命令是什么呢?打开sfr_defs.h文件,里面有一行:没错,AtmelStudio中与BIT等价的命令是_BV。再把随项目自动生成的那个C文件(含main函数的那个)删掉。main函数要改成int型。嗯,C99是这样规定的,新出的标准C编译器都得这么干,否则会有警告。某个不仅
5、仅是五百强的公司的编程规范中可是明文规定编译时不准有任何警告。按F7编译在项目目录中找到生成的hex文件,一般在DEBUG子目录里,用Proteus仿真。2、Proteus仿真步骤假设已经装好Proteus,我装的是7.8版本。双击打开包中的DSN文件。如上图所示,双击CPU,弹出下框。在Program File中找到刚才编译出来的hex文件。然后点击OK。点击程序左下角的三角形图标开始仿真我们现在可以愉悦的看着LED图标在欢快的上下滚动。3、知识点作为开山第一个实验,知识点会多一些,我会很认真的写,希望你能看懂。AtmelStudio不支持直接对单个位进行操作,若要对单个位进行操作,则要通过
6、与或非的办法。小知识:ICCAVR位操作的宏定义C语言位操作的功能是其比较出色的地方,现在许多微处理器都支持C编译器也可看出。汇编语言的位操作也很直观,但在某些C编译器对位操作却不能象汇编中对单个的位进行直接处理,而要转化为对一个字节的操作,在ICCAVR中这种限制充分体现出来。如要对PORTA的PORTA0置1,则应写成PORTA|=0X01;这样的位处在字节的两端还比较直观,但若是要置PORTA的第3位,第6位置1,则写出的程序可读性不强了。于是便有了一些宏操作定义#define BIT(x) (1 (x)(需要包含头文件macros.h)才可直接使用。下面给出两种置1和清0的宏定义:置1
7、:1,#define set(x) (1(x)2,#define setb(temp,x) temp|=(1(x)清0:1,#define clr(x) (1(x)2,#define clrb(temp,x) temp&=(1(x)比较上述置1的两种宏定义,第1种在写1时需写成 PORTA|=set(x); x表示要处理的位,第2种更象函数,使用起来也比较直观:setb(PORTA,x), 可读性比较强 但是第2种却并非是万能的,以MEGA8515为例,USART的UBRRH和UCSRC共用一个I/O location,在写UBRRH的时候最高位必须为0,写UCSRC时则正好相反。上述第2种的
8、置1和清0操作只能对1 个BIT进行操作,所以是不能处理UBRRH和UCSRC的写入工作的,而第1种置1和清0操作却可以通过或/与进行多个位操作的,比如写入UCSRC 0x01可以写作:UCSRC|=set(7)|set(0); 而如果用第2种宏定义则让它太为难了。两种方法有其利弊,使用的时候靠自己衡量了。#define checkbit(var,bit) (var&(0x01(bit) /*定义查询位函数*/#define setbit(var,bit) (var|=(0x01(bit) /*定义置位函数*/#define clrbit(var,bit) (var&=(0x01(bit) /
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 依然 AVR 学习 笔记 移植 _1
限制150内