AtmelStudio60简易入门教程精炼实用.docx
- 文档编号:7852676
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:139.81KB
AtmelStudio60简易入门教程精炼实用.docx
《AtmelStudio60简易入门教程精炼实用.docx》由会员分享,可在线阅读,更多相关《AtmelStudio60简易入门教程精炼实用.docx(13页珍藏版)》请在冰豆网上搜索。
AtmelStudio60简易入门教程精炼实用
、建议工程文件
AtmeIStUdi6.0这个全新的环境使用起来极其不顺手,因为首先我对AtmeIStUdiO以前的版本也根本没有使用经验,就根据很陌生,其次,这个新版本软件还根本
没有人用,根本没有任何的相关教程资料,唯一可以参考的只是官网的比较简单的视频教程,还是英文讲解,反正没怎么搞透。
不过还是硬着头皮用下去,因为软件是免费的,而且当后來我知
道代码编辑环境其实就是微软VS环境的时候,我就更不犹豫了,大家应该都了解VS的代码编写环境是很智能的,尤其自动补全功能。
现在,我己经能很熟练的使用AtmelSUdio6.0软件了,随若使用我也更加喜欢玩AVR单片机做一些小作品了,而不再用普通51和SrC了。
当使用熟练以后也就感觉到其实这个免费智能的编译环境其实是很简单的,那现在我就帮助更多喜欢使用AVR而没用使用AtmeIStUCliO软件的同学们轻松越过这一个门槛,进入一个美好的编程世界。
该软件的不足之处:
一是软件相对较大,打开比较慢,但是运行还是比较顺利的;二是不支持
山寨仿真器,这可苦了没钱的劳苦电工们了。
(不过我都是用ISP烧求调试,一般不用仿真)
最下而附件有一个简单的LED_test工程文件,编译通过的。
大家可以试用。
下面开始介绍的软件工程的建立。
1.软件总界面
总体界面还是比较简洁的,和其他编译软件都是差不多的,而Jl•和KEIL软件的界面是很相似的,使用很方便。
•SiΛPage・.:
m∙Ytvdkl‰dπvΛ⅞r∙Mo<ι
曰TWrWV,Mι⅛t×ΛΛfPrqeCtOaQTOd‰WirHRP
Jj∙4)JfiJ
r¾ɔ⅛∙'∙';T
JClo$«NKafterProxet⅛>adJS*>OWp»®eco
OUtPui
y∣owCUtPHt⅛oαr
2.新建工程
新建工程很简单:
FlLE->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
64
4096
2048
ATmega649P
64
4096
2048
ATmega64A
64
4096
2048
ATmega64C1
64
4096
2048
ATmega64HVE2
64
4096
1024
ATnnega64Ml
64
4096
2048
ATmega64RFR2
64
8192
2048
ATmega8
8
1024
512
ATmega8515
8
512
512
ATmega8535
8
512
512
ATmega88
8
1024
512
ATmega88A
8
1024
512
ATmega88P
8
1024
512
ATmega88PA
8
1024
512
ATmega8A
8
1024
512■
ATmega8HVA
8
512
ATmega8U2
8
512
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∙*∙ 」X•: CJ二∙-∙atr⅛wbδINOr 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 但可赋整型值。 注意在调用前定义#defineILCPU8000000UL,如卜-图,这样延时IOmS的换数写为_delay_ms(10),经过试川,只耍晶振填写准确,这两个延时两数很准确。 FiIeEdftVieWVA$$i$tXASFProjectBUiIdDebUgToolsWindOWHeIP 一-∙•一丨•-: • : 住二&吒£8仏給/川」>⅛门>3HeX-J∙7耳M: IUW∙ATmegaS 4)中断函数 在AS6ψ,霸加载头文##include ISR(TIMERO_OVF_vect) {...} TIMERO_OVF_vect含义同iv_TIMERO_OVF,是To溢出中断号。 不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iOmXX)Ch中查找。 5)EEPROM操作函数 在IcC中加载头文#-#include EEPRoM_read(addr,var);〃读EEPROM中的…个字节 EEPROM_write(addr,var);〃向EEPROM中写入一个字节 6)定义数据在flash区主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少data区的使用,不至于使data区溢出。 在AS61I',需加载头文件#include 举例说明: 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 D∙v>c∙ Tool AdVgCQd ASF 设置晶振频率(这也是预设计的#define...) BniId BUiIdEVentSToolchftin^D∙vic・ ToOlAdVanCed ASF CCnfigUrfttionIACtXVdIJQbag)VPIAtformACtiVe(AVR)司 CCRfirUɪgeuyan⅜f∙r... 设置头文件路径 BUiId BUlldZVentS ToOlChMM D⅜viCe Toφ1 AdVanCed ASF ^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 AdVanCed 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 ASF "θ^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编译条件的设置 BUiId 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 Vcc: 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 而在AtmClStUdiO6(以下简称AS6)中统一用#include 2.头文件Vmacros.h> 在ICC中,头文件Vmacros.h>包含#include 例如: (详细内容请参考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("nop") #define_SLEEP()asm("sleep"); #defineBIT(X)(1«(x)); 在AS6中,你可以直接使用asm(”xxx”)格式.或者用小写的sei();(当然要包含相应的头文件); Ps: 如果移植ICC的代码比较麻烦,可以将这些宏命令添加到一个总的头文件(include.h)中,所有C文件都引用include.h,那么在移植过程中,将不需要修改代码。 3.延时函数 在ICC屮,delay延时函数,需要自己写,往往不准。 而在AS中,只需要加载一个头文! #include 注意在调用前定义#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(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_write(addr,var);//向EEPROM中写入一个字节 在AS6中,加载头文件#include _EEGET(var,addr);〃读EEPROM中的一个字节 _EEPUT(addr,Var);〃向EEPROM中写入一个字节 Ps: 为了移植时不修改代码,我的做法是在总的头文件(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 PROGMEMCOnStUnSignedCharHash[10];在flash区声明一个UnSigedChar型的数组,成员个数IOoUnSignedChara; a=Pgm_read_byte(flashIOJ);把flash[0]值赋给变量a。 而a=flash[0]是不会从flash 区读数据的,而是读data区的数据。 二维数组: PROGMEMCOnStUnSignedCharflash[3][10]={}; 指针数组: PROGMEMCOnStUnSignedchar*COnStflash[3]={};
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AtmelStudio60 简易 入门教程 精炼 实用