AtmelStudio60简易入门教程精炼实用Word格式.docx
《AtmelStudio60简易入门教程精炼实用Word格式.docx》由会员分享,可在线阅读,更多相关《AtmelStudio60简易入门教程精炼实用Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
NEW->
Project然后就看到下而的新建工程界而了,选择第一个GCCCEXeCUtabIeTS就可以,第二个GcCCStatiCLibrary是用來新建.h文件的。
然后下面蓝圈1是C文件的名称,蓝圈2SOIUtiOnName是工程的文件,中间的LOeatiOn是文件存放位置,自己选择合适的位置即可。
点击下面的OK
卜両接着是单片机型号选择界而,选择合适的单片机就可以了。
DeViCeFamily:
megaAVR,8-bit▼
Name
App./BootMemOry(KbyteS)DataMemory(bytes)
EEPR
ATmega6490P
64
4096
2048∙
ATmega649A
2048
ATmega649P
ATmega64A
ATmega64C1
ATmega64HVE2
1024
ATnnega64Ml
ATmega64RFR2
8192
ATmega8
8
512
ATmega8515
ATmega8535
ATmega88
ATmega88A
ATmega88P
ATmega88PA
ATmega8A
512■
ATmega8HVA
ATmega8U2
512U
▼
SearChfordevice
DeViCeInfo:
DeViCeName:
ATfneaa8A
Speed:
Vcc:
Family:
*3DatBSheetS
O
2.7/5.5megaAVR
SUPPOrtedTOOlS
AVRDraqOn
»
AVRISPmkII
rAVRONEj
TjJTAGlCE3
BJTAGlCEmkll
SimUlatOr
夕STK500
fSTK600
4.卜-面就看到真正的代码编辑界面了,软件会智能的添加工程文件说明佶息,并提供简单的main
两数代码,比较好。
在代码编辑区编写你的实现代码即可。
<
⅛(dhV⅛∙VAiPttX心Prς⅛αZDHWgT2∙WZ■Hep
J-⅛)JJ√Λ“、・•:
•住、,MM•9•习二區纟,=灣谭二2>
_■>
•'
.
I乜二:
七Rr86⅛c・」・iM:
∙J∙*∙<
JJ••:
」X•:
CJ二∙-∙atr⅛wbδINOr<
x>
w^9
5.大家可能看到上面中文注释部分由让人不喜欢的下划波浪线,下面告诉你怎么除掉它。
VASSiStX->
ViSUalASSiStXOPtiOnS然后UnderlineS选择min即可,如下图
•ViSUalASSiStXOPtionS
6.对于软件环境的工具栏常用按键下面简单说一下,如下图。
(1)圈1:
就是编译按钮和KElL的按键是一样的
(2)圈2:
是单片机型号选择,这个不同平台之间移植要首先修改单片机型号,不然会出错,这个也是本软件的一个优点,这样就AVR所有的单片机系列之间可以轻松的移植,如果遇到寄存器变化,编译的时候就会出错,提示你修改
(3)圈3:
就是注释和缩进快捷按钮也是编写代码比较常用的
7.下面介绍一些使用atmelstudio6.0需要注意的一下事项。
这些事项很重要,不然会导致你无法
编译成功,这些事项其实是从网上一篇文章《从l∞AVR到AtmelStUdiO6》中摘录的,
一直不知道这位大侠是谁,在这里先向这位无私的大侠致敬,如果该大侠看到该我的文章,如果有不同意还请告诉我。
注意事项整理如下:
1)MCU必须的头文件
AtmelstUdi06(以下简称AS6)屮统•用#includevavr/io.h>。
这点很重要,AS6把atmel所冇的单片机头文件全都集成在一起了,以后不必再去分具体的每种芯片的头文件了
2)汇编嵌入
在AS6中,你可以虚接使用asm(“xxx”)格式.或者用小写的sei();
这个其实是很爽的,最弟用的就是中断控制,使用比较方便。
3)延时函数
在AS6屮,只需要加载一个头文件#include<
util/delay.h>
就对以使用两个标准的延时断数,分别是_delay_ms(double_ms)和_delay_us(double_us),虽然参数为double型,
但可赋整型值。
注意在调用前定义#defineILCPU8000000UL,如卜-图,这样延时IOmS的换数写为_delay_ms(10),经过试川,只耍晶振填写准确,这两个延时两数很准确。
FiIeEdftVieWVA$$i$tXASFProjectBUiIdDebUgToolsWindOWHeIP
一-∙•一丨•-:
•
:
住二&
吒£
8仏給/川」>
⅛门>
3HeX-J∙7耳M:
IUW∙ATmegaS
4)中断函数
在AS6ψ,霸加载头文##include<
avr/interrupt.h>
并且函数名为ISR,不可自定义函数名,格式如下:
ISR(TIMERO_OVF_vect)
{...}
TIMERO_OVF_vect含义同iv_TIMERO_OVF,是To溢出中断号。
不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iOmXX)Ch中查找。
5)EEPROM操作函数
在IcC中加载头文#-#include<
eeprom.h>
后,可以使用如卜-两个读写隊[数:
EEPRoM_read(addr,var);
〃读EEPROM中的…个字节
EEPROM_write(addr,var);
〃向EEPROM中写入一个字节
6)定义数据在flash区主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少data区的使用,不至于使data区溢出。
在AS61I'
需加载头文件#include<
avr/pgmspace.h>
然后用PRoGMEM。
举例说明:
PROGMEM8∏stUnSignedCharflash(10];
在flash区声明一个UnsigedChar型的数组,成员个数10。
UnSignecIChara;
a=pgm_read_byte(flash[O]);
把flash[0]值赋给变量a。
而a=flash[O]是不会从flashK读数据的,而是读dataIx的数据。
•-维数组:
PRC)GMEMCOnStUnSignedCharflash[3][10]={};
指针数组:
PRoGMEMCOnStUnSignedchar*COnStflash[3]={};
工程文件的优化设置
点击工程项目,PrOPertieS进行设置
定位代码地址,bootloader是必须的,其它程序也可能盂要在“属性”小
BUild
BUiIdKVentS
ToOlCk<
in
D∙v>
c∙
Tool
AdVgCQd
ASF
设置晶振频率(这也是预设计的#define...)
BniId
BUiIdEVentSToolchftin^D∙vic・
ToOlAdVanCed
CCnfigUrfttionIACtXVdIJQbag)VPIAtformACtiVe(AVR)司
CCRfirUɪgeuyan⅜f∙r...
设置头文件路径
BUiId
BUlldZVentS
ToOlChMM
D⅜viCe
Toφ1
AdVanCed
^nfigUratiOnACtiVeODobu&
)VPItttfOrnIACIiVO(AVR)
ð
園AVR/WUCo=Onʌ
AVR/GXUCCoaPlI∙r∙Dιr∙ctorι∙β
3fOutFUtFilee日画AVR/GMICCoepg3fG∙n∙r∙l^PreprocessorJfSyaZ
^fOPtiBiZation22fD∙bufg2∏s
Includ∙PathB(-ɪ)
圍Q逐bQ
Myarmy
∙llan∙out
SAWGMlLink∙r
3fG*n∙r∙l^fLibr*ri∙s^foPtiBization3fM∙s0rySettings^Misc⅛llanGθU8曰^A∖rR∕<
2fUAsseebler3fGeneralVDebuffffinff
设置需要生成的文件(设置生成文件hex)
BuiId
BTXiIdEvents
CCefiCuɪfttiosMamfer..-
ToolchftiM
DQVɪee
TooI
ASP
8圏AVR/GXUCoefiOa
^G⅜n⅜r∙I
曰LiIAVRCCocpxltrHG∙n⅜ral^Pr∙proc∙tBor^SyBboIt^DIrACtoxx«
S"
¾
fOPtiɪiZation3ΓD∙buffin∣3fiamingsXisceIlaneoug
SIaJAW∞rLinkttr3ΓOeneraI3fLibraries^fOPtiSiXatioa3fMe®
OryStttinCt2fMiβc⅛llan⅜ous
曰[¾
AVR/GNUAt8⅜a⅛l*rHG∙n⅜ral"
STDGbufffiinc
^7Γ
A∖Tv,G>
lCoesoa睁OUtPUtriles
•Generatehexfile)(GtnerAttItsfile)(Generatee⅛pfile)(G∙MT∙t∙∙x⅜cfiɪ<
'
0□.00
设置优化率
添加自定义库
DUiId
BUildEvents
COnflcUr处ionACtiVeCDebU¢
)V
natfont:
ACtiVe(AVR)V
Toolchfldrt*DeViCe
TOOIAdvanced
"
θ^A∖τR∕rGXUCc≡onNG∙n∙r∙l3ΓOutputFilte日園AvR/GXUCCc≡pιlβrNG«
n«
ral
FreProCo8sox3FSyɪbola^DirectoxiaaMθptɪɪiɪatɪoɑ^DebUgflngIamingB^ylSC∙Ilazx∙ousS圉A∖rR∕GIaILinker
NG∙n∙ral
θptɪɪɪɪatɪoa
JU≡orySettiDfS
^^Miscellaneous
θ[ifA∖rR∕GXUAssembler
NGenerAI
√.czjrrιr.:
IAvR/GNULιnk∙r■Libraries
Libr∙ri∙s(-<
1,~1>
-MId也;
r∣⅛∣
二
LibrarrSearChPath(-1IrL)
[δ]ClSl<
t∣8,
更换为WinaAVr编译条件的设置
BuiIdEVentSToOIChAinDeViCe
TooIAdVanCed
Toolchainflavourss∙tti∏f8Of*λts∙lAvR8-bit,toolchainCanbo≡odιfi∙dfroa
ToOIChainFIaVOUr>
ςat;
Ve
T8“■〉Opt:
on*■>
T81chpχπ-;
FlzomrCorlfigU"
tx5’
设置芯片
DeViCeNaɪe:
ATΠ∩θ<
]a48
App./BootMemoryCKbytes}:
4
DataMer,Ory(bytes):
512
EEFROM(bytes):
256
SPeediO
1.8/5.5
Faiily:
MegaAVR
-2DataSheetS
SUPPOrtedTooIS、AVRDraQOn»
AVRISPmklltAVRONE!
电JTAGlCE3ΛJTAGICEmkll
AVRSimUTatoH
脅STK500
设置仿真器(我没冇使用仿真器,设置为SimUIatOr)
三、从ICC_AVR_到_Atmel_StiIdio_6
以前一直在用ICCAVR感觉牛成文档方便,现在发现了AtmeIStUdio6,因为偶尔会用C#(VS2010)所以一下子就喜欢上了这个编译器,我只用8bit的AVR另外也是刚刚接触,所以在移植过程屮会遇到各种问题,以下是自己的一些问题写出来共大家参考;
1.MCU必须的头文件
例如在ICCAVR(以下简称ICC)中使用#include<
ioml6v.h>
或#inchκk<
ioml28v.h>
要根据不同的mcu型号选择头文件。
而在AtmClStUdiO6(以下简称AS6)中统一用#include<
avr/io.h>
o(ICCAVR7的版本中也可以用统一的头文件了)
2.头文件Vmacros.h>
在ICC中,头文件Vmacros.h>
包含#include<
AVRdef.h>
o在AVRdCf.h中,宏定义了一些常用的汇编指令和一些不常用的函数。
例如:
(详细内容请参考ICC安装程序中AVRdef.h)
#defineWDR()asm("
wdr"
)
#defineSEIOasm(,'
sei,'
#defineCLI()asm(”Clr)
#defineNOP()asm("
nop"
#defineSLEEPoasm(,'
sleep"
);
#define_WDR()asm("
WdrU)
#define_SEI()asm(,,sei,'
#define_CLI()asm(πcliu)
#define_NOP()asm("
#define_SLEEP()asm("
#defineBIT(X)(1«
(x));
在AS6中,你可以直接使用asm(”xxx”)格式.或者用小写的sei();
(当然要包含相应的头文件);
Ps:
如果移植ICC的代码比较麻烦,可以将这些宏命令添加到一个总的头文件(include.h)中,所有C文件都引用include.h,那么在移植过程中,将不需要修改代码。
3.延时函数
在ICC屮,delay延时函数,需要自己写,往往不准。
而在AS中,只需要加载一个头文!
#include<
就可以使用两个标准的延时函数,分别是_delay_ms(double_ms)flLdeIay_us(double_us),虽然参数为double型,但可赋整型值。
注意在调用前定义#defineF_CPU16000000UL(我也不知道为什么要加UL),这样延吋IOmS的函数写为_delay_ms(IO)O
4.中断函数
例如To溢出小断,在ICC小如下定义:
#pragmainteɪTUPt_handlcrtimcrO_ovf_isr:
iv_TIMERO_OVF
VOidtimerO_ovf_isr(VOid){•••}
timerO_ovf_isr这个函数名是自定义的。
而在A6中,需加载头文件#include<
并且函数名为ISR,不可自定义函数名,格式如下:
ISR(TIMERO_OVF_vcct)
{•・・}
TIMERO_OVF_vect含义同iv_TIMERO_OVF,是TO溢出中断号。
不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iomXXX.h中查找。
5.EEPROM操作函数
在ICC中加载头文件#includeVCCPI*om.h>
后,可以使用如下两个读写函数:
EEPROM_read(addr,var);
〃读EEPROM中的一个字节
//向EEPROM中写入一个字节
在AS6中,加载头文件#include<
avr/eeprom.h>
_EEGET(var,addr);
_EEPUT(addr,Var);
为了移植时不修改代码,我的做法是在总的头文件(include.h)中添加以下宏定义:
#defineEEPROM_rcad(addr,Var)_EEGET(var,addr)
#defineEEPROM_write(addr,Var)_EEPUT(addr,Var)
6.定义数据在flash区
主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少dam区的使用,不至于使data区溢出.在ICC中,用ConSt关键字定义变量,并在ICC软件设置项中,勾选treat"
const"
as_flash即可。
在AS6中,需加载头文件#include<
avr/PgmSPaCe.h>
然后用PROGMEM举例说明:
PROGMEMCOnStUnSignedCharHash[10];
在flash区声明一个UnSigedChar型的数组,成员个数IOoUnSignedChara;
a=Pgm_read_byte(flashIOJ);
把flash[0]值赋给变量a。
而a=flash[0]是不会从flash
区读数据的,而是读data区的数据。
二维数组:
PROGMEMCOnStUnSignedCharflash[3][10]={};
PROGMEMCOnStUnSignedchar*COnStflash[3]={};