ICCAVR入门编程
- 格式:pdf
- 大小:178.85 KB
- 文档页数:4
ICCA VR 的使用1,运行iccavr软件,出现如下界面:2,点击“project”里德“new”选项,如下图:3,点击“new”后出现如下对话框:可以自己命名工程名。
4,假设存在新建文件夹下可取名为“TEST”,如下图:5,点击保存,即新建一个名为“TEST”的工程,在软件右上角会出现如下图样:6,点击左上角的“”的图案可新建一个源文件,点击后出现如下图样:7,可以再空白区编写程序,例如写一个流水灯的程序,在空白区编写如下图:8,写完之后点击左上角的保存按钮“”,会出现如下对话框,在对话框中写入源文件名(可自己取)如test,但是需要注意的是后面必须跟着“.c”后缀,或者是“.h”后缀。
9,然后点击保存,保存之后需要把“tese.c”文件添加到工程中,方法如下:鼠标右击右上角的“files”图样,会出现“Add file(s)”字样,10,点击它,出现对话框,10,选中“test”文件,点击“打开”按钮,这时在右上角就会出现如下图样(即源文件已添加到工程中):11,点击工具栏中的“project”选项中的“options”选项,出现如下对话框:12,这是选择单片机类型的对话框,在“Device Configuration”字样的下拉菜单中选型如下图:12,并且把前面打钩,如下图:13,点击左下角的:“ok”。
14,点击工具栏中的编译快捷键“”,点击后下方会出现如下图样表示没有错:在保存的文件中会找到“.hex”文件,这是烧写程序需要的文件。
这样我们就学会了初步使用iccavr软件了,以后的工作就是自己慢慢研究了。
双击A VR_fighter.exe弹出如下对话框:(运行该软件前要先安装ISP驱动)点击左上角装入FLASH图标,弹出如下对话框:找到利用ICC所建的工程,打开,找到.exe文件,点击打开,装入FLASH完毕,2.进行芯片选择:点击下拉按钮,出现一系列单片机芯片类型,找到我们需要的就可,在我们选择Atmega16的芯片。
ISE、Keil C和ICCAVR快速入门指南编者:王辉版本:1.0日期:2007.02目录第一章 ISE6.2i快速入门 (3)1. 新建一个工程 (3)2. 新建新的源文件 (5)3. 绘制原理图文件 (6)4. 分配器件引脚 (9)5. 编译整个工程 (11)6. 烧录目标板CPLD (11)第二章 Keil C快速入门 (16)1.新建一个工程 (16)2.设置工程选项 (17)3.添加新的文件 (18)4.编译整个工程 (19)5.查看汇编代码 (19)6.烧录目标器件 (20)第三章 ICCAVR快速入门 (21)1. 新建一个工程 (21)2. 设置工程选项 (21)3. 添加新的文件 (22)4. 编译整个工程 (23)5. 烧录目标器件 (24)第一章 ISE6.2i快速入门这是一个在Xilinx ISE集成环境里一步步完成新工程建立,增加、新建源文件,编译工程,分配器件引脚,以及烧录CPLD整个实验步骤。
实验顶层文件采用的是原理图,实验结果相当简单,就是点亮一个LED灯,目的是快速体验ISE的应用,希望对未接触ISE软件及CPLD的人员能有所帮助。
1. 新建一个工程启动ISE软件(Xilinx ISE 6 Æ Project Navigator),单击主工具栏中菜单File Æ New Project…选项,在新出现的对话框中输入相对应的工程名,如下图所示:单击下一步,在新出现的对话框中,选择目标板的CPLD的具体型号,如下图所示:然后单击下一步按钮,出现如下的对话框,这是建立新的源文件对话框,也可以稍后通过工程来建立新的源文件,在这里选择后者;然后单击下一步按钮,将出现的如下对话框,这是添加一个存在的源文件,由于目前还没有源文件,直接单击下一步按钮;之后新出现的对话框是一个告知新的工程相关信息,如下图如所示,直接单击完成按钮即可。
2. 新建新的源文件首先选择工程,然后在工程上单击鼠标右键,出现如下图所示的对话框,单击New Source…选项;在新出现的对话框中,选择源文件的类型,然后输入相应的文件名,如下图红色标记所示:单击下一步按钮,在新出现的对话框中单击完成按钮。
ICCAVR快速开发使用教程
一、安装ICCAVR
二、创建一个新项目
安装完成后,打开ICCAVR并点击“新建项目”按钮。
在弹出的对话
框中,输入项目的名称和保存路径,然后点击“确定”按钮。
三、设置系统时钟频率
在新建的项目中,可以看到一个默认的配置文件。
点击打开配置文件,然后找到“系统时钟频率”选项。
根据自己的需求,设置系统时钟频率,
并保存配置文件。
四、编写代码
在左侧的工程资源管理器中,可以看到项目的文件结构。
双击打开“main.c”文件,就可以开始编写代码了。
在这里,可以使用C语言进行
编程,并且ICCAVR提供了丰富的API函数供开发者使用。
在编写代码时,可以参考官方文档和示例代码。
六、调试程序
七、常用功能
除了上述基本功能外,ICCAVR还提供了许多其他的功能,如代码模板、固件库管理、仿真器支持等。
开发者可以根据自己的需求,灵活地使
用这些功能,提高开发效率。
八、学习资源
除了官方文档和示例代码外,开发者还可以通过参加培训班或自学来学习ICCAVR的使用。
在互联网上也有很多关于ICCAVR的教程和论坛,可以提供帮助和解答问题。
总结:
ICCAVR是一款强大的AVR单片机开发工具,可以帮助开发者快速开发应用程序。
本教程简要介绍了ICCAVR的安装和基本使用方法,以及常用功能和学习资源。
希望通过本教程,开发者能够更好地掌握ICCAVR的使用,提高开发效率。
AVR单片机教程7—第七课ICCAVR使用教程——第七课ICCA VR使用教程本教程节选自周兴华老师《手把手教你学AVR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书实验器材,可登陆周兴华单片机培训中心网购部自助购买!接下来我们来做第一个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),对程序的编译进行优化。
在使用ICCAVR过程中如有疑问,请即登陆E-mail :Richard@,或联络一运行光盘上的SETUP.EXE程序进行安装aÎҵĵçÄÔ打开光盘驱动器所对应的盘符c SETUP.EXE按照屏幕提示a¿ªÊ¼在对话框中填入 注意drive对应你的机器中的光盘驱动器盘符cÈ·¶¨其余同方法一注意按上述方法进行安装后对正式版用户还要进行第二步的注册2ÔÚ±ê×¼°æÖÐÓÐһЩ¹¦ÄÜÏÞÖÆ´úÂëµÄѹËõ2¿ÉÒÔÕâÑù×¢²áa IDEb Unlock Diskc Help Import License from Floppy²¢ÇÒ½øÐе¥»÷ICCAVR软件自动进行注册当你确定并再次重新启动ICCAVR后对不是首次安装或使用时间已超过30天的用户 对这类用户在程序启动时已不能进入IDE环境你应该选择按钮 这时会出现一个注册对话框Import License fromFloppyc Unlock Diskµ¥»÷ÉÏÒ»²½ÖÐÌáµ½µÄ°´Å¥ICCAVR软件自动进行注册当你确定并再次重新启动ICCAVR后注意软盘在注册时应打开写保护b软盘成为一张空盘cÓ¦¸ÃÊ×ÏÈÔÚ菜单中选择一项然后再按上述方法进行安装注册ICCAVR介绍1MCU ËüÓÐÒÔϼ¸¸öÖ÷ÒªÌØµãIDE其可在WINDOWS9X/NT下运行文件的编辑和工程的构筑也在这个环境中完成并且当你用鼠标单击编译错误时这个工程管理器还能直接产生您希望得到的可以直接使用的INTEL HEX格式文件用于下载程序到芯片中去支持长文件名本说明书并不介绍通用的C语言语法知识因此要求读者在阅读本说明书内容之前2IDE和编译器可以使用以下几种类型的文件.c 扩展名----表示是C语言源文件.s 扩展名----表示是汇编语言源文件.h 扩展名----表示是C语言的头文件.prj 扩展名----表示是工程文件.a 扩展名----库文件libcavr.a是一个包含了标准C的库和AVR特殊程序调用的基本库链接器会将其链接到您的模块或文件中输出文件由编译器在编译时产生的汇编输出文件多个目标文件可以链接成一个可执行文件其中包含了程序的机器代码包含了EEPROM的初始化数据用于在ATMEL的AvrStudio环境下进行程序调试在这个文件中列举出了目标代码对应的最终地址它包含了您程序中有关符号及其所占内存大小的信息.noi NoICE 3.xx调试命令文件3编译附注#pragma interrupt_handler <func1>:<vector number> <func2>:<vector> ...这个附注必须在函数之前定义func2是中断操作函数器在中断操作函数中生成中断返回指令reti来代替普通返回指令retͬÑù±àÒëÆ÷¸ù¾ÝÖжÏÏòÁ¿ºÅvector number生成中断向量地址它的典型应用是在RTOS 实时操作系统中让RTOS核直接管理寄存器使其与命令行选项相适应使其与命令行选项相适应读者可参考存取EEPROM的例子重定位而是从<address>开始分配绝对地址#pragma end_abs_address结束绝对定位C++ 注释如果你选择了编译扩充(Project->Options->Compiler)二进制常数如果你选择了编译扩充(Project->Options->Compiler)ÀýÈç内汇编你可以使用asm("string")函数来指定内汇编代码4ËüÓÐÊ®·Ö·á¸»µÄÔ´´úÂë¾ø´ó¶àÊý·ûºÏANSI C标准的程序代码不需要转换中断操作描述而IAR引入了语法扩充在ICCAVR中func为中断处理函数名称在IAR中IAR C的中断向量地址使用中断名称来代替扩充关键字IAR引入flash关键字将项目分配进入程序存贮空间过程调用转换在两个编译系统之间函数参数传递使用的寄存器是不同的内汇编IAR不支持内汇编符号三Ê×ÏÈ´ÓProject菜单系统选择Open命令led¹¤³Ì¹ÜÀíÆ÷ÏÔʾÔÚÕâ¸ö¹¤³ÌÖÐÖ»ÓÐÒ»¸öÎļþled.cÔÚ"Target"标号下选择目标处理器IDE将调用编译器编译这个工程文件如果没有错误在这个例子中是\icc\examples.avr这个文件是INTEL HEX格式并且能下载这个程序进入你的目标系统如果你希望用支持COFF调试信息的工具来测试你的程序那么你需要从Project菜单中选择Options命令对一些常用的功能例如在工程窗口中双击文件名按这个方法打开led.cÀýÈç´ÓÒ»ÐÐÖÐɾ³ý·ÖºÅÏÖÔÚ´ÓProject菜单中选择Make Project命令并且开始编译这个文件单击状态窗口中错误信息行光标将移到编辑器中错误行的下面一行上并且浏览至你希望输出工程文件的目录例如那么输出文件名称为foo.hex或foo.cof等你可以开始写你的源代码(C或汇编格式)µ¥»÷¹¤¾ßÀ¸ÖÐ图标IDE输出与ATMEL的AVR Studio完全兼容的COFF文件为更容易地使用这个开发工具2±àÒëÆ÷»á½«ÄãµÄ³ÌÐòÓëÆô¶¯´úÂëºÍ¿âº¯ÊýÁ´½Ó³ÉÒ»¸öÎļþÆô¶¯´úÂëµÄÓÃ;ÔÚÆô¶¯ÎļþÖкÜÏêϸµØ±»ÃèÊöÁËÆô¶¯´úÂë³õʼ»¯Õâ¸öÄ¿±êʹÆäÂú×ãËùÓеÄÒªÇóÄãµÄmain例程完成一些初始化后作为例子#include <io8515.h> /* 为使能够看清LED的变化void LED_On(int i){PORTB = ~BIT(i); /* 低电平输出使LED点亮 */Delay();}void main()4{int i;DDRB = 0xFF; /*定义B口输出*/PORTB = 0xFF; /* B口全部为高电平在初始化一些IO寄存器后之后并且在这个循环中改变LED的步进图案在LED_On例程中直接写正确的数值到IO端口为能够看见图案变化LED_On例程调用了延时例程这一对嵌套循环只能给出延时的近似延时时间那么这个例程应该使用硬件定时器来完成延时8515intr.c程序很简单这两个例子可以作为你的程序的起点ICCAVR的IDE环境1ÄãÊ×ÏÈÓ¦¸Ã½¨Á¢Ò»¸ö¹¤³ÌÎļþ²¢ÇÒ¶¨ÒåÊôÓÚÕâ¸ö¹¤³ÌµÄËùÓÐÎļþÎÒÃÇÓÐʱҲÐèÒª½«Ò»¸öÎļþµ¥¶ÀµØ±àÒëΪĿ±êÎļþ»ò×îÖÕµÄÊä³öÎļþ´ÓIDE菜单中选择命令to Object to Outputµ±Äãµ÷ÓÃÕâ¸öÃüÁîʱ²¢ÇÒÔÚ±à¼-´°¿ÚÖпÉÒÔ±à¼-µÄto Object对检查语法错误和编译一个新的启动文件是很有用的to Output对较小的并且是一个文件的程序较为有用这里使用默认的编译选项创建一个新的工程为创建一个新的工程Project New IDE会弹出一个对话框这也是你的输出文件的名称你可在菜单中选择命令你可以在菜单中选择命令来建立一个新的源文件来输入你的代码File Save Save AsÈ»ºóÄã¿ÉÒÔÏóÉÏÃæËùÊöµ÷ÓÃ命令将文件加入到工程中Add to Projectͨ³£ÄãÊä³öÔ´ÎļþÔÚ¹¤³Ìͬһ¸öĿ¼ÖÐ工程的编译选项使用菜单中中的命令工程管理工程管理允许你将多个文件组织进同一个工程这个特性允许你将工程分解成许多小的模块只有一个文件被修改和重新编译当你编译包含这个头文件的源文件时一个源文件可以写成C或汇编格式的任意一种.c»ã±àÎļþ±ØÐëʹÓÃ扩展名例如你可以将一个工程文档文件放在工程管理窗口中对目标器件不同的工程当你新建一个工程时你可以将现有编译选项设置成默认选项默认编译选项保存在default.prj文件中你可以指定输出文件和中间文件到一个指定的目录4ÔÚÕâ¸ö´°¿ÚÖÐÄã¿ÉÒÔÐÞ¸ÄÏàÓ¦µÄÎļþÓÃÊó±êµ¥»÷ÓйشíÎóÐÅϢʱעÒâµÄ´íÎó5Äã¿ÉÒÔµ¥»÷¹¤¾ßÌõÖеÄ按钮或菜单中的命令来调用它应用构筑向导显示目标MCU的每一个外围设备子系统在这里你可以设置MCU的所具有的中断定时器UART²¢²úÉúÏàÓ¦µÄ´úÂ뻹¿É²úÉúmain( )函数状态窗口状态窗口显示IDE的状态信息终端仿真IDE有一个内置的终端仿真器在系统编程但它可以作为一个简单的终端也可下载一个ASC从6.20版本开始IDE加入了对ISP的支持菜单解释1ÄÇôI CCAVR会根据实际情况弹出相应的工具菜单File Menu 文件菜单New Äã¿ÉÔÚ±à¼-´°¿ÚÊÇÊäÈëÎÄ×Ö»ò´úÂë重新打开历史文件OpenÎļþÓÃä¯ÀÀ´°¿ÚÑ¡Ôñ放弃全部的修改Reload….from Back UPSaveÈç¹û»·¾³ÉèÖÃÖÐÉèÖÃÁ˱£´æ±¸·ÝÎļþSave asCloseÈç¹ûÎļþÓйýÐÞ¸ÄCompile File …to Object ×¢ÒâÄ¿±êÎļþ²»¿ÉÒÔÖ±½ÓÓÃÓÚ¶ÔоƬ±à³Ì»òÓÃÓÚµ÷ÊÔÓï·¨¼ì²éCompile File ... to OutputÆä²úÉúµÄÊä³öÎļþ¿ÉÓÃÓÚ±à³ÌÆ÷ºÍµ÷ÊÔÆ÷保存所有打开的文件关闭当前打开的所有文件PrintExit3撤消最后一次的修改撤消最后一次的Undo剪切选择的内容到剪帖板拷贝选择的内容到剪帖板将剪帖板内容粘帖在当前光标的位置删除选择的内容选择当前全部内容对选择的整块内容右移Block OutdentSearch menu 寻找菜单Find…在编辑窗口中寻找一个文本Match Case – 区分大小写Whole Word – 全字匹配Up/Down –往上或往下Find in Files... –在当前打开的文件中或在当前工程的所有文件中或当前目录中的文件中寻找一段文本Case Sensitive –区分大小写Whole Word - 全字匹配Regular Expression – 寻找规则的表达式Replace... – 在编辑器中替换文本Goto Line Number – 转到指定行号Delete Bookmark – 删除书签Goto Bookmark – 跳转到指定的书签View Menu视图菜单Status Window – 如果选中Project Makefile – 以只读方式打开makefile 文件Project Builder 产生一个makefile 文件来说明工程文件的从属关系Output Listing File – 以只读方式打开列表文件详见Listing FileProject Menu工程菜单New... – 创建一个新的工程文件Open All Files... – 打开工程的全部源文件Reopen... – 重新打开一个最近打开过的工程文件Rebuild All – 重新构筑全部文件Add File(s) – 添加一个文件到工程中Remove Selected Files – 从工程中删除选择的文件Close – 关闭工程Save As... – 将工程换一个名称存盘Tools Menu 工具菜单Environment Options – 打开环境和终端仿真器选项对话框Editor and Print Options –打开编辑和打印选项对话框AVR Calc – 打开AVR计算器定时器的定时常数Application Builder –打开应用向导程序Configure Tools – 允许你添加自己的内容到工具菜单Run –以命令行方式运行一个程序8PathsInclude Path(s) –你可以指定包含文件的路径Assembler Include Path(s) – 指定汇编包含文件的路径Library Path – 链接器所使用的库文件的路径Strict ANSI C Checking – 严格的ANSI C语法检查Accept Extensions – 接受C++类型语法扩充Macro Define(s) – 定义宏宏定义形式如下例如但意义相反Intel HEX或COFFÏó¼Ä´æÆ÷·ÖÅäËüµ÷ÓÃÁË´úÂëѹËõÓÅ»¯Target页面有包括ROMData Address – 指定数据起始地址 Use Long JMP/CALL 指定MCU是否支持长跳转和长调用IO Registers Offset Internal SRAM – 指定内部SRAM的偏移量而 Mega603 , IO寄存器覆盖在SRAM 空间中Internal 对External SRAM – 指定你的目标系统的数据SRAM类型PRINTF Version – 选择PRINTF的版本Small 或 Basic: 只有 %c, %d, %x, %X, %u, and %s 格式支持Long: 支持 %ld, %lu, %lx, %lXFloating point: %f 支持AVR Studio Simulator IO – 如果选中Additional Libraries –使用标准库以外的附加库Strings in FLASH – 字符串只保存在FLASH存贮器中编译器使用的软件堆栈的大小不需地指定系统默认的启动文件在Paths页中指定Unused ROM Fill Pattern – 用一串十六进制数填充空余的ROM空间C库函数与启动文件1²¢½«±ê×¼¿âlibcavr.a与你的程序相连接启动文件定义了一个全局符号__startÆô¶¯ÎļþµÄ¹¦ÄÜÓÐ初始化硬件和软件堆栈指针从idata区拷贝初始化数据到直接寻址数据区data区将bss区全部初始化为零调用用户主程序定义一个退出点如果主函数main( )一旦退出这个退出点进行无限循环你不需要修改启动文件来使用别的中断为修改和使用新的启动文件创建一个新的crtavr.ocopy crtavr.o ..\lib ; 拷贝到库目录如果您使用的目标MCU是Mega注意Mega的每个中断入口地址使用两个字word你也可以有多个启动文件注意2ȱʡ·¾¶Îªc:\icc\libsrc.avr\libsrc.zipÄã¿ÉÒÔ´Ó»¥Á¬ÍøÉÏÈÎÒâÏÂÔØÒ»¸öUNZIP程序进行解压缩密码显示在"About"对话框中unzip -s libsrc.zip; unzip 提示输入密码2AVR特殊函数----- ICCAVR有许多访问UART¶ÑÕ»¼ì²éº¯Êý¶Ô¼ì²â¶ÑÕ»ÊÇ·ñÒç³öºÜÓÐÓÃ3io*.h (io2313.h, io8515.h, iom603.h, ... 等.)这些文件中是从ATMEL官方的定义IO寄存器的源文件经过修改得到的PORTB = 1;uc = PORTA;4macros.h这个文件包含了许多有用的宏和定义如果你的程序使用了头文件所列出的函数在使用浮点数和长整型数的程序中必须用#include预编译指令调用这些包含了这些函数原形的头文件assert.h - assert(),宏声明ctype.h – 字符类型函数float.h – 浮点数原形limits.h – 数据类型的大小和范围math.h – 浮点运算函数stdarg.h – 变量参数表.stddef.h – 标准定义stdio.h – 标准输入输出函数stdlib.h – 包含内存分配函数的标准库string.h – 字符串处理函数3ʹÓÃÕâЩº¯Êý֮ǰӦµ±ÓÃ"#include <ctype.h>"包含否则返回零int isalpha(int c)如果c是字母返回非零数值如FF, BELL, LF ..等否则返回零int isdigit(int c)如果c是数字返回非零数值否则返回零int islower(int c)如果c是小写字母返回非零数值否则返回零int ispunct(int c)如果c是一个可打印字符而不是空格否则返回零int isspace(int c)如果c是一个空格字符返回非零数值否则返回零int isupper(int c)如果c是大写字母返回非零数值否则返回零int tolower(int c)如果c是大写字母则返回c对应的小写字母其它类型仍然返回c4ʹÓÃÕâЩº¯Êý֮ǰ±ØÐëÓÃ包含float asin(float x)以弧度形式返回x的反正弦值float acos(float x)以弧度形式返回x的反余弦值float atan(float x)以弧度形式返回x的反正切值float atan2(float x, float y)返回y/x的反正切 ̄+float ceil(float x)返回对应x的一个整型数float cos(float x)返回以弧度形式表示的x的余弦值float cosh(float x)返回x的双曲余弦函数值float exp(float x)返回以e为底的x的幂即10xfloat fabs(float x)返回x的绝对值float floor(float x)返回不大于x的最大整数float fmod(float x, float y)返回x/y的余数float frexp(float x, int *pexp)把浮点数x分解成数字部分yºÍÒÔ2为底的指数n两个部分2ny y值被函数返回float fround(float x)返回最接近x的整型数float ldexp(float x, int exp)返回xÕûÊý²¿·Ö´æ·Åµ½pint指向的变量并且作为函数返回值返回标准输入输出库标准的文件输入输出是不能真正植入微控制器的可以使用同样使用之前应用"#include <stdio.h>"预处理最低层的IO程序是由单字符的输入(getchar)和输出(putchar)程序组成的例如用printf输出到LCD为在ATMEL的AVR Studio模拟器使用标准IO函数注意单字符输出函数putchar发送一个字符到UART器件而不做修改'\n' 字符必须被映射为成对的回车和换行extern int_textmode; //在库中定义…_textmode = 1;一旦这样分配CR/LF可以通过给变量赋0来复位格式说明符是标准格式的一个子集同 %x%u - 输出无符号十进制整数%s – 输出一个以C中空字符NULL结束的字符串%c – 以 ASCII 字符形式输出%o x×Ö·û如果在%和一个整数格式字符之间指定有一个(字母l)字符而不是整型整数取决于你的需要和代码的大小代码越大基本形: 只支持不带修饰符的 %c, %d, %x, %u, 和 %s 格式说明符长整形: 支持长整形数修饰符%ld, %lu, %lx 和宽度及精度修饰符浮点形: 支持全部格式包括%f你使用编译选项对话框来选择版本int putchar(int c)输出单个字符注意输出’\n’字符至程序终端窗口int sprintf(char *buf, char *fmt)按照frm中的格式说明符输出一个格式化文本字符串到缓冲区 支持功能"const char *" cprintf 和csprintf 是将FLASH中的格式字符串分别以prinf和sprinf形式输出6并且描述了下列函数比如.. calloc±ØÐëµ÷ÓÃ_NewHeap来初始化堆heapÈç·¢Éú´íÎóÔò·µ»Ø0long atol(char *s)转换” s”中的初始化字符为长整型数 void *calloc(size_t nelem, size_t size) 分配"nelem"个数据项的内存连续空间如果分配成功返回分配内存单元的首地址 void exit(status) 终止程序运行void free(void *ptr)释放ptr所指向的内存区void *malloc(size_t size)分配size字节的存贮区如内存不够分配则返回0Ò»¸öµäÐ͵ĵ÷ÓÃÊǽ«·ûºÅ_bss_end+1的地址用作"start"值加1 的目的是堆栈检查函数使用_bss_end字节存贮为标志字节extern char _bss_end;_NewHeap(&_bss_end+1, &_bss_end + 201); // 初始化200 字节大小的堆int rand(void)返回一个在0和RAND_MAX之间的伪随机数size可比原来大或小void srand(unsigned seed)初始化随后调用的随机数发生器的种子数如果"endptr"不为空unsigned long strtoul(char *s, char **endptr, int base)除了返回类型为无符号长整型数外字符串函数用"#include <string.h>"预处理后<string.h>定义了NULLvoid *memchr(void *s, int c, size_t n)在n个字节长的字符串s中搜索第一个出现的c字符否则返回NULLÈç¹ûÏàͬÔò·µ»Ø0Èç¹û s1中字符小于 s2中字符void *memcpy(void *s1, void *s2, size_t n)拷贝s2 中n个字符至s1void *memmove(void *s1, void *s2, size_t n)拷贝s2 中n个字符至s1其与memcpy基本相同void *memset(void *s, int c, size_t n)在s中填充n个字节的cchar *strcat(char *s1, char *s2)拷贝s2到s1的结尾 char *strchr(char *s, int c) 在s1中搜索第一个出现的cÈç¹û³É¹¦·µ»ØÖ¸ÏòÆ¥Åä×Ö·ûµÄÖ¸ Õë·µ»Ø¿ÕÖ¸ÕëÈç¹ûÏàͬ·µ»Ø0如果s1<s2则返回-1返回s1°üÀ¨½áÊøNULL字符size_t strlen(char *s)返回字符串s的长度char *strncat(char *s1, char *s2, size_t n)拷贝字符串s2ÖÐn个字符到s1ÔòÖ»¿½±´s2int strncmp(char *s1, char *s2, size_t n)基本和strcmp函数相同char *strncpy(char *s1, char *s2, size_t n)基本和strcpy函数相同char *strpbrk(char *s1, char *s2)基本和strcspn函数相同否则返回NULL指针并返回它的指针. size_t strspn(char *s1, char *s2) 在字符串s1搜索与字符串s2不匹配的第一个字符其返回s1中找到的第一个不匹配字符的索引如果成功它返回s1中匹配子字符串的地址指针 支持函数"const char *" 这些函数除了它的操作对象是在FLASH中常数字符串外size_t cstrlen(const char *s)char *cstrcpy(char *dst, const char *src);int cstrcmp(const char *s1, char *s2);8Ëü¶¨ÒåÁ˲»È·¶¨µÄÀàÐÍva_list和三个宏分派指定的类型如int 小的整型类型如"char"不能被支持printf()可以使用vfprintf()来实现#include <stdarg.h>int printf(char *fmt, ...){va_list ap;va_start(ap, fmt);vfprintf(fmt, ap);va_end(ap);}9ÄÚ´æÍ¼ÈçÏÂÄÇôÈí¼þ¶ÑÕ»µÄÄÚÈݽ«»á±»¸Ä±äÓ²¼þ¶ÑÕ»ÊÇÓÃ×÷º¯ÊýµÄ·µ»ØµØÖ·同样地如果你使用动态分配内存警戒线低端地址警戒线启动代码写了一个正确的关于数据区的地址字节和一个类似的正确的关于软件堆栈的地址字节作为警戒线如果你使用了你自己的启动文件你将需要额外改造为新的启动文件如果你使用动态分配内存参考内存分配函数如果警戒线字节仍然保持正确的值那么函数检查通过那么警戒线字节将可能被破坏你的程序将可能运行不正常或偶然崩溃它调用了带一个参数的函数_StackOverflowed(char c)那么硬件堆栈有过溢出那么软件堆栈曾经溢出它是两个堆栈都可能溢出的在_StackOverflowed执行起作用时作为例子那么将不能返回_StackCheck函数库会用一个缺省的_StackOverflowed函数来跳转到0的位置你可能希望用一个函数来代替它以指示更多的错误条件注意自堆栈溢出指示故障程序以来这两个函数的原型在头文件macros.h.中七访问AVR的低层硬件C 的特点在于尽管它是高级语言有了这种性能就算目标MCU的硬件特点在C语言中不能很好地使用头文件io*.h iom603.h等这些文件是从ATMEL官方发布的文件经过修改文件macros.h 定义了许多有用的宏当访问由IO寄存器映射的内存时这个编译器能自动产生单周期指令象in sbissbi等注意尽管io*.h定义了它们的bit 的位置很多时候你将需要使用定义在macros.h文件中的BIT()宏avr.h:#define SRE 0x80 // 外部 RAM 使能... (你的C程序)MCUCR |= SRE;io8515.h#define SRE 7... (你的C程序)#include <macros.h>MCUCR |= BIT(SRE);2bit幸运的是而无需借助于汇编指令或其它非标准C结构a |b – 按位或这惯用于打开某些位例如这个运算在检查某些位是否置1时是有用的If ((PORTA & 0x81) == 0) // 检查位7和位0注意圆括号需要括在&运算符的周围这是C程序中很多错误的原因之一这个运算对一个位取反有用在下面的例子中PORTA ^= 0x80; // 翻转位7~a – 按位取反. 在表达式中这个运算执行一个取反与这个运算组合使用尤其有用PORTA &= ~0x80; // 关闭位7这个编译器对这些运算能产生最理想的机器指令sbic指令可以用在根据位的状态进行条件分枝的按位与运算中程序存贮器和常量数据AVR是哈佛结构的MCUÕâÑùµÄÉè¼ÆÊÇÓÐһЩÓŵãµÄ·Ö¿ªµÄµØÖ·¿Õ¼äÔÊÐíAVR装置比传统结构访问更多的存贮器Atmega系列允许有超过64K字的程序存贮器和64K字节的数据存贮器MCU装置可能用到更多的程序存贮器不幸的是特别地C规则已经指定你不可以假设数据和函数指针能被向前和向后修改要求数据指针能指向任一个数据内存和程序内存ImageCraft AVR 编译器使用"const"限定词表示项目是在程序存贮器中这个const限定词可以应用于不同的场合例如"ptr1"是一个项目在数据存贮器而指向数据的指针在程序存贮器最后在大多数的例子中"table" 和和"ptr1"是很典型的注意C标准不要求"const"数据是放入只读存贮器中除了正确访问就没有要紧的了在承认参数的C标准中使用const限定是非传统的这样做与标准C函数定义是有一定冲突的标准"strcpy"的原型是strcpy(char *dst, const char *src)È»¶øÔÚICCAVR下因此这些函数定义设有const限制注意只有常数变量以文件存贮类型放入FLASH中如果你使用有const限制的局部变量4Õâҳ˵Ã÷×Ö·û´®×îÀ§ÄѵÄÊÇ×Ö·û´®µÄ·ÖÅäºÍ´¦ÀíÈç¹û×Ö·û´®ÊÇ·ÖÅä½ø³ÌÐò´æÖüÆ÷ÖлòÕß×Ö·û´®Ò²±ØÐë±»·ÖÅäÔÚÊý¾Ý´æÖüÆ÷ÖÐ缺省的字符串分配这个缺省的方法是同时分配字符串在数据和程序存贮器中为了确保它们的值是正确的因此只有单一的字符串拷贝函数是必须的你能使用常量字符型数组来将字符串只分配进程序存贮器中const char hello[] = "Hello World";在这个例子中但不能用作标准C库中字符串函数的参数另外函数已加入了对只存贮于FLASH中字符串的支持你可以令编译器将字符串只放在FLASH中当这个选项是选中的并且你必须保证函数获得了合适的参数类型创建了cprintf 和csprintf函数承认字符串格式的类型注意只分配全部字符串到FLASH存贮器中应使用cprintf()²¢ÇÒ¼Ó%S参数应使用printf()²¢ÇÒ¼Ó%S 参数堆栈生成代码使用两个堆栈一个是用于以堆栈结构传递的参数硬件堆栈起初是用于存贮函数返回的地址通常也不调用象带有%f格式的printf()等库函数在绝大多数程序中再入式函数最多40个字节的硬件堆栈应该是足够的而软件堆栈是在它下面分配的一定数量字节硬件堆栈和数据内存的大小是受在编译器选项中的目标装置项设定限制的在IO空间之后必须避免硬件堆栈向软件堆栈溢出除非用到递归方程如果外部SRAM用作附加的数据存储器另一种方法是把堆栈放置到内部SRAM中因为startup文件中提供了全部源代码如果你选择的目标装置带有32K或64K的外部SRAM¶øÇÒÏòµÍÄÚ´æµØÖ··½ÏòÉú³¤堆栈检查任意一个程序失败的重要原因是堆栈溢出到其它数据内存的范围并且当一个堆栈溢出时会偶然产生坏的事情6ÄÚ»ã±àÔÊÐíÄãд»ã±à´úÂë½øÄãµÄC文件中当然asm("<string>");多个汇编语句可以被符号\n分隔成新的一行StringΪÁËÔÚ»ã±àÓï¾äÖзÃÎÊÒ»¸öC的变量如register unsigned char uc;asm("mov %uc,R0\n""sleep\n");通过这个方法任意一个C变量都可以被引用你必须使用寄存器存贮类来强制分配一个局部变量到CPU寄存器中使用内汇编来引用局部寄存器的能力是有限的就很可能没有CPU寄存器可用你将从汇编程序得到一个错误提示所以你的内处理指令可能失效使用LDI指令需要使用R16~R31中的一个寄存器同样也没有引用一个整数寄存器的上半部分编译器将内汇编的每一行缩进以增加可读性ImageCraft编译器允许标签放置在任意地方当汇编声明在函数外部时你可以不理会这些警告IO寄存器IO寄存器可以用两种方法访问可以使用IN和OUT指令读写IO寄存器可以使用普通数据访问指令和寻址模式来读写数据内存地址例如数据内存地址0到31指向CPU寄存器当访问在IO寄存器范围中的数据内存时outsbrc等是首选的方法你可以使用内汇编和预处理宏来访问IO地址老的头文件avr.h定义IO寄存器的bit有一些模糊因此使用io*.h 和IO 寄存器的bitÀýÈçMCUCR |= BIT(SRE);8ÀýÈçÍⲿIO设备通常被映射成特殊的内存通常你可以使用内汇编或单独的汇编文件来描述那些定位在特殊内存地址的数据将在C语言中提供这些能力假设有一个两字节的LCD 控制寄存器定位在0x1000地址并且有一个100字节的双口SRAM定位在0x2000的地址在一个汇编文件中输入以下内容extern unsigned int LCD_control_register, LCD_data_register;extern char dual_port_SRAM[100];注意并且使用两个冒号定义为全局变量内汇编遵守同样的汇编语法规则在C文件中asm(".area memory(abs)"".org 0x1000""_LCD_control_register:: .blkw 1""_LCD_data_register:: .blkw 1");asm(".org 0x2000""_dual_port_SRAM:: .blkb 100");在C中你仍然要使用"extern"描述变量因为C编译器不知道在asm中的声明C任务 正如汇编界面和调用规则中描述的那样在一些情况下例如实时操作系统RTOS管理着寄存器的保存和恢复并作为任务切换处理的一部分为了禁止这种行为例如这个附注(pragma)必须被用在函数定义之前从不返回的程序"main"是有这个属性的10ÎÞÂÛº¯Êý¶¨ÒåÔÚÎļþµÄʲôµØ·½pragma#pragma interrupt_handler <name>:<vector number> *"vector number" 中断的向量号那是复位向量编译器生成RETI指令代替RET指令编译器生成以向量号和目标MCU为基础的中断向量#pragma interrupt_handler timer_handler:4...void timer_handler(){...}编译器生成的指令为rjmp _timer_handler ; 对普通AVR MCU或者jmp _timer_handler ;对Mega MCU上述指令定位在0x06Õë¶ÔÆÕͨװÖÃ字节地址Mega使用2个字作为中断向量你可以在一个interrupt_handler附注中放置多个用空格分开的名称用不同的向量号声明多次就可以了#pragma interrupt_handler timer_ovf:7 timer_ovf:8汇编中断操作你可以用汇编语言编写中断操作无论如何要小心参考汇编界面C函数不做这些操作那么你必须自己定义向量用".org"来声明rjmp 或jmp指令的正确地址; 对全部除ATMega 以外的MCU.area vectors(abs) ;中断向量.org 0x6rjmp _timer; 对 ATMega MCU.area vectors(abs) ; 中断向量.org 0xCjmp _timer11ÔÚ\icc\examples.avr 目录12ÔÚµ÷ÓÃÕâЩº¯Êý֮ǰ¼ÓÈë#include <eeprom.h>"object"可以是任意程序变量包括结构和数组int i;EEPROM_Read(0x1, i); // 读2个字节给iEEPROM_WRITE(int location, object)这个宏调用了EEPROMWriteBytes函数将数据对象写入到EEPROM的指定位置例如可是对EEPROM单元少于256字节的MCUÒòΪËüÈÔÈ»ÊÇҪдµÄÄã¿ÉÒÔΪEEPROM较少的目标器件重新编译库源代码在C源文件中它作为一个全局变量被分配到特殊调用区域"eeprom."中的结果是产生扩展名为.eep的输出文件#pragma data:eepromint foo = 0x1234;char table[] = { 0, 1, 2, 3, 4, 5 };#pragma data:data...int i;EEPROM_READ((int)&foo, i); // i等于 0x1234为重设数据区名称到默认的"data."注意因为AVR的硬件原因注意当使用外部描述时例如但是上面关于宏的描述对大多数装置应该是有能力的如果成功返回0void EEPROMWriteBytes(int location, void *ptr, int size)从EEPROM指定位置处开始写"size"个字节13¸ü¶àµÄÐÅÏ¢²Î¿¼spi.h相对转移/调用的地址范围带8K程序存贮器的器件中为达到这个目的例如0x2000为8Kʵ¼ÊÉÏ»áÌø×ªµ½µØÖ·0x100处只要目标装置的程序存贮器是8K的C的运行结构1unsigned int 2 0..65535(signed) int 2 -32768..32767unsigned long 4 0..4294967295(signed) long 4 -2147483648..2147483647float 4 +/-1.175e-38..3.40e+38double 4 +/-1.175e-38..3.40e+38(*) "char" 等同于 "unsigned char"floats 和 doubles 为7位指数1个符号位的IEEE 标准 32位格式而且将被包含在一个较小的空间中struct {unsigned a : 1, b : 1;};这个结构体的长度只有一个1 byte2名称C 语言中的名称在汇编文件中是以下划线为前缀的名称的有效长度为32个字符:可以定义成一个全局变量_foo::.word 1(在C 文件中)extern int foo;b)µÚ¶þ¸ö²ÎÊýÔòͨ¹ýR18/R19传递其余参数通过软件堆栈传递如char int¼´Ê¹º¯ÊýÔ-ÐÍÊÇ¿ÉÓõĶøµÚ¶þ¸ö²ÎÊýÊdz¤ÕûÐÍ»ò¸¡µãÊý¶ø¸ß°ë²¿·Öͨ¹ýÈí¼þ¶ÑÕ»´«µÝ¶ø³¤ÕûÐÍ»ò¸¡µãÊý·µ»ØÔòͨ¹ýR16/R17/R18/R19返回保护的寄存器在汇编函数中必须保护和恢复下列寄存器这是结构指针这些寄存器是调用保护寄存器d)¶ø²»±»±£»¤ºÍ»Ö¸´ÕâЩ¼Ä´æÆ÷µÄÄÚÈÝÔÚ±»º¯Êýµ÷Óúó¿ÉÒԸıäÔÚÖжϲÙ×÷ÖбØÐë±£»¤ºÍ»Ö¸´ËüËùʹÓõÄÈ«²¿¼Ä´æÆ÷。
ICCAVR的基本使⽤图解ICCAVR的基本使⽤图解1、打开ICCAVR⽤⿏标双击桌⾯快捷⽅式。
就可以弹出IICAVR主界⾯。
2、新建⼯程1)、单击project菜单下的new选项,在弹出的save new project as.....填写好⼯程名称并保存。
⼯程管理器中将列出新建⼯程。
2)、单击按钮,弹出的“compiler options”。
在paths选项中output directory中点击browser指定到我们新建⼯程⽬录下。
在target选项中的device configuration下拉单中选择AVR单⽚机型号。
然后点击ok按钮退出。
3、新建⼀个C⽂件,并将它保存到⼯程中1)点击按钮,将弹出⼀个空⽩⽂本。
输⼊我们的程序。
2)点击按钮,在弹出的savefile as.....的中输⼊以.c为后缀的⽂件名,点击保存按钮。
3)在⼯作区右键选择把程序⽂本添加到⼯程中。
4)、程序的编译。
把程序写进.C⽂档中。
点击project下的rebuild all,对程序进⾏编译。
之后对⽂档做修改后可以点击对程序重新编译。
⽤和查找编译中出现的错误。
5)可以利⽤ICCAVR的程序⽣成向导功能⽣成程序格式。
点击在弹出选项对话框。
(1)在cpu选项target cpu下选择avr单⽚机型号,在xtal speed(MHz)下选择晶振的⼯作频率。
(2)在ports下设定IO⼝。
(3)点击options选项,选择include“main()”(4)点击ok⽣成标准⽂档格式。
AVR单片机教程7—第七课ICCAVR使用教程AVR单片机是一种高性能、低功耗的8位微控制器,因其易于使用和广泛应用于各种嵌入式系统而备受欢迎。
本教程将带您深入了解AVR单片机的编程和应用,特别是介绍第七课程ICCAVR的使用。
ICCAVR是一种基于AVR系列单片机的集成开发环境,它提供了丰富的功能和工具,有助于简化和加速单片机的开发过程。
在本节课中,我们将学习如何使用ICCAVR进行AVR单片机的编程。
一、ICCAVR的安装与配置在开始使用ICCAVR之前,首先需要下载并安装该软件。
您可以在官方网站上找到ICCAVR的最新版本,并按照安装向导进行安装。
安装完成后,打开ICCAVR,进入设置界面,完成对编译器、调试器和单片机型号的配置。
确保所选的单片机型号与您所使用的AVR单片机一致,这样才能保证编程的准确性和兼容性。
二、新建工程在ICCAVR中,您可以创建一个新的工程来开始编程。
选择“文件”-“新建”-“项目”,然后选择单片机型号和存储工程的路径。
点击“确定”后,ICCAVR将自动生成一个空的工程,供您编写代码和调试。
三、编写代码在ICCAVR的工程中,您可以添加源文件和头文件。
源文件中包含了您的程序代码,而头文件则用于声明变量、函数和宏定义等。
编写代码时,您可以使用C语言或汇编语言进行编程。
C语言是一种高级语言,更易于使用和理解,适合大多数应用场景。
而汇编语言则更接近底层硬件,可以直接控制单片机的各个寄存器和引脚,适用于对性能要求较高的应用。
四、编译和烧录在编写完代码后,可以使用ICCAVR提供的编译器将代码转换为可执行文件。
选择“生成”-“编译”,ICCAVR会检查代码中的语法错误并生成可执行文件。
生成可执行文件后,您可以选择烧录器将程序烧录到AVR单片机中。
连接烧录器到电脑,并将AVR单片机与烧录器连接好。
选择“烧录”-“烧录器设置”,然后选择正确的烧录器和单片机型号。
点击“烧录”按钮,ICCAVR会自动将程序加载到单片机中进行烧录。
在 ICCA VR 中如何编写供 C 调用的汇编子程序在 ICCA VR 中,参数通过 r16/r17,r18/r19传递。
r16/r17是整体的,传递 uchar 和uint 会全部占用,当 uchar 时, r17空置。
r18/r19同理。
如果还有参数要传递,则是通过 Y 指针指向的软件堆栈传递。
每一个 char 和int 都占用 2个字节,如果是 char ,高字节空置。
也就是说,参数总要占用偶数个空间。
例如传递参数如下:uchar *point1,uchar *point2,uchar data1,uchar data2,uchar data3共 5个参数,那么 point1通过 r16/r17传递, point2通过 r18/r19传递, data1通过Y+0指向的软件堆栈传递, data2通过 Y+2指向的软件堆栈传递, data3通过 Y+4指向的软件堆栈传递。
例子如下:.s 汇编文件; 多字节相加;sum[number]+=add[number];void BytesAdd(uchar *sum,uchar *add,uchar number_BytesAdd::clc ;c<-0mov r26,r16mov r27,r17 ;x<-summov r30,r18mov r31,r19 ;z<-addld r0,y ;r0<-numberbalp:ld r1,xld r2,z+adc r1,r2 ;sum+=add+cst x+,r1 ;store sumdec r0brne balp ;branch if number!=0ret;****************************************************** ; 多字节相减;minuend[number]-=subtrahend[number];void BytesSub(uchar *minuend,uchar *subtrahend,uchar number _BytesSub::clc ;c=0mov r26,r16mov r27,r17 ;x=minuendmov r30,r18mov r31,r19 ;z=subtrahendld r0,y ;r0=numberbslp:ld r1,xld r2,z+sbc r1,r2 ;minuend-=subtrahend+cst x+,r1 ;store minuenddec r0brne bslp ;branch if number!=0ret;*******************************************************C 调用:uchar sum[5],add[5];uchar minuend[5],subtrahend[5];BytesAdd(sum,add,5; //sum+=add,5bytes BytesSub(minuend,subtrahend,5; //minuend-=subtrahend。
新手入门的第一个范例作者:527dz() / 2004-09-01 / armok 对涉及PonyProg内容修改成SL_ISP,加入时钟校正 /你准备好AVR下载电缆和AVR的开发软件了吗?如果准备好了,我们就来体验一下玩单片机的乐趣吧!做实验前,请先下载准备好以下三个软件:ICCAVR 6.31A , AVR Studio 4.10 , SL_ISP 1.3 . 可以到本站此处下载:AVR 开发软件介绍及下载实验目标:现在我们的目标是设计一个电路,用AVR单片机来控制一个红色的LED和绿色的LED。
电路加电后,首先绿色的LED点亮,5秒钟以后,绿色的LED熄灭,然后红色的LED点亮5秒钟。
最后红色的LED和绿色的LED以1Hz左右的频率交替闪烁。
通过本实验可以让我们了解玩AVR单片机的基本步骤和基本开发软件的简单使用。
实验器材:需要准备的器材:Atmega8或者其他AVR单片机一片、红色LED一只、绿色LED一只、万能实验板一块、7805、100uF电容各一只、470欧姆电阻两只。
实验电路图:用C(ICC)语言编写程序:创建一个新项目:从ICC的“Project”菜单中选择“New”命令,选择一个目录后,将这个项目取名为test_C1存盘。
存盘后,在ICC窗口的右边(项目管理器)显示了新建工程的目录结构,如下图:项目管理器显示的项目新建源程序文件:选择“Fill”菜单的“New”命令,ICC自动生成一个Untitled-0的文件。
然后“Fill”菜单的“Save As”命令,将Untitled-0文件名改为test_C1.c后存盘。
添加源程序文件到项目中去:鼠标右键点击项目管理器的File目录,选择弹出窗口的“Add To File”命令将test_C1.c文件加入到项目中,如下图:源程序文件添加到了项目中开始编辑源程序:C源代码下载:点击此处下载源程序编译:选择“Project”菜单下的“Operation”命令弹出编译选项。
ICCAVR使用快速入门ICCAVR(Integrated Concurrent C Language and AVR)是一种基于嵌入式系统的编程语言,可以用于开发和控制单片机等硬件设备。
使用ICCAVR可以实现对硬件设备的操作和控制,并编写各种嵌入式系统应用程序。
以下是ICCAVR的快速入门指南,以帮助您开始使用这个强大的嵌入式系统编程语言。
2.创建新项目:打开ICCAVR软件后,您可以创建一个新的项目。
在项目中,您可以编写和管理多个源文件,并定义所需的硬件设备配置和库文件。
3.编写源代码:在新项目中,您可以使用ICCAVR的编译器和IDE(集成开发环境)来编写源代码。
ICCAVR支持C语言,因此您可以使用C语言的语法和特性来编写代码。
在代码中,您可以使用ICCAVR提供的库函数来操作硬件设备,如GPIO(通用输入输出)口、串口、定时器等。
4.编译和调试代码:在编写完源代码后,您可以使用ICCAVR的编译器将源代码编译为目标代码。
编译后,ICCAVR会生成可执行的机器码文件。
您可以使用ICCAVR的调试工具来调试和测试代码,以确保代码的正确性和稳定性。
5.烧写和运行代码:在调试通过后,您可以使用ICCAVR或其他的固件烧写工具将目标代码烧写到硬件设备中。
烧写完成后,您可以将硬件设备连接到电源,并观察代码的运行情况。
6.调优和优化代码:通过观察代码的运行情况,您可以发现和解决潜在的问题和优化代码。
ICCAVR提供了一系列的优化功能和性能工具,可以帮助您发现代码中的性能瓶颈和内存泄漏等问题,并进行改进和优化。
以上是ICCAVR的快速入门指南。
通过学习和掌握ICCAVR的使用,您可以编写出高质量和高可靠性的嵌入式系统应用程序,并将其应用于各种硬件设备。
祝您编程愉快!。
AVR 单片机ICC 使用快速入门
ICC AVR 是一款非常好用的AVR 编译软件,现在我们来教你如何快速进入使用。
1、关于窗口设置:[如图]
如上图:这是ICC avr 6.31 版本的窗口,分为5 大区。
菜单项
文件
新建,打开,打印文件等常规选项。
很别扭的一件事关闭文件在菜单里。
编辑
复制,粘贴,删除,撤销,重做等常规操作,一看就明白。
搜索
搜索功能,书签功能,可以使用添加标签,删除标签,下一个标签,转到标签。
你可以直接点击左侧快速添加或删除标签。
视图
对新手几乎没有用处,你可以用它显示或者隐藏工程文件窗口,编译状态窗口。
查看输出文件,makefile 文件,Map 文件。
Project Menu 工程菜单
New... –创建一个新的工程文件
Open –打开一个已经存在的工程文件
Open All Files... –打开工程的全部源文件
Close All Files –关闭全部打开的文件
Reopen... –重新打开一个最近打开过的工程文件
Make Project –解释和编译已经修改的文件为输出文件*注意与7Rebuild All 的。
简易AVR单⽚机教程简易单⽚机教程ICCAVR的使⽤参考程序代码1模拟⽐较器#include#includevoid main(){unsigned char mid;DDRC=0xFF;PORTC=0xFF;ACSR=0x00; //启动模拟⽐较器参考电压接⽐较器正端中断屏蔽触发定时计数器1的捕获关闭while(1){mid=ACSR&0x20; //读出模拟⽐较器的输出值if(mid==0)PORTC|=BIT(0); //PC0=1elsePORTC&=~BIT(0); //PC0=0}}Function:流⽔灯Author:CWBData:2010-05-05--------------------------------*/ #includevoid delay_ms(int ms) {int m,n;for(m=0;m<=ms;m++) for(n=0;n<=450;n++); }void main(){int i,j,k;DDRA=0xFF;DDRB=0xFF;DDRC=0xFF;DDRD=0xFF; PORTA=0x00; PORTB=0x00; PORTC=0x00; PORTD=0x00;while(1){j=0x01;for(i=0;i<=6;i++){PORTA=j;PORTB=j;PORTD=j;delay_ms(600);j=(j<<1);}for(i=0;i<=6;i++)PORTA=j;PORTB=j;PORTD=j;delay_ms(600);j=(j>>1);}}}3、定时计数器TC2#include#pragma interrupt_handler MyCounter:20 static int iCounter=0;void MyCounter(void){if(iCounter<=10){//PORTA^=0xFF;//~PINA;//0xFF;//iCounter++;//iCounter=0;}else iCounter=0;}void main(void){DDRA=0xFF;PORTA=0x00;//PORTB=0xFF;DDRB=0xFF;TCCR0=0x1B;//PWM相位可调,T/C0与输出引脚断开,CLK/64分频//00011011 TCNT0=0x00;//从0开始计数OCR0=0x3E;//达到63时,⽐较匹配发⽣TIMSK=0x02;//中断屏蔽寄存器T/C0输出匹配中断使能#asm("sei");//总中断开放SREG|=0x80;while(1){// for(i=0;i<1000;i++)// for(j=0;j<400;j++);if (iCounter==8) PORTA^=0xFF;};}4、计数器TC0#include#pragma interrupt_handler MyCounter:20static int iCounter=0;void MyCounter(void){if(iCounter<=10){//PORTA^=0xFF;//~PINA;//0xFF;//iCounter++;//iCounter=0;}else iCounter=0;}void main(void){DDRA=0xFF;PORTA=0x00;//PORTB=0xFF;DDRB=0xFF;TCCR0=0x1B;//PWM相位可调,T/C0与输出引脚断开,CLK/64分频//00011011 TCNT0=0x00;//从0开始计数OCR0=0x3E;//达到63时,⽐较匹配发⽣TIMSK=0x02;//中断屏蔽寄存器T/C0输出匹配中断使能#asm('sei')/********************************************//不明原因,C中嵌⼊汇编不能⽤**********************************************/SREG|=0x80;//总中断开放SREG|=0x80;int i,j;// for(i=0;i<1000;i++)// for(j=0;j<400;j++);if (iCounter==8){ PORTA^=0xFF;for(i=0;i<1000;i++)for(j=0;j<400;j++);}};}5、EEPROM/*访问单⽚机资源EEPROM*/#include#define sei() SREG|=0X80#define cli() SREG&=0X7F//EEPROM控制寄存器位定义#define EERE 0 //READ#define EEWE 1 //WRITE#define EEMWE 2 //总写⼊#define WWRIE 3 //中断/*端⼝初始化*/void _init(void){DDRA=0XFF;PORTA=0XFF; }/*EEPROM读程序*/char EEPROM_R(unsigned int EEAdd) {while(EECR&(1<EEAR=EEAdd; //设置读⼊地址EECR|=(1<return EEDR; }/*EEPROM写程序*/while(EECR&(1<EEAR=EEAdd; //设置写⼊地址EEDR=EEData; //设置写⼊数据EECR|=(1<EECR|=(1<}void main(){_init();cli(); //关中断EEPROM_W(0X100, 0X07); //将数据写⼊EEPROM中的0x0100单元PORTA=EEPROM_R(0X0100); //读取0x0100单元的数据,送显sei(); //开中断/***********************开中断关中断的作⽤??*****************************/while(1);}6、计数器测频率#include/*******************程序还有问题要解决**************************/void main(){DDRB=0x08;PORTB=0x00;//PB3(OC0) CONFIG outputTCCR0=0x1B;//64分频pwm ⽐较匹配发⽣oc0触发TCNT0=0x00;OCR0=0x80;//RECT WAVEASSR=0x00; //同步⽅式///T/C2 ⽬的定时1MSTCCR2=0x0B;//32 fen pin CTC 与输出引脚断开TCCR1A=0x00;TCCR1B=0x06;//时钟外部T1引酵下降驱动⼀般模式TCNT1H=0x00;TCNT1L=0x00; //从零开始记数ICR1H=0x00;//似乎没⽤到输⼊捕获寄存器??OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;//都为0 TCNT1中也为0 ⽐较匹配貌似在这种情况不发⽣TIMSK=0x80;SREG|=0x80; //t/c2 ⽐较匹配中断开放全局中断开放}7、串⼝中断int// Target : M16// Crystal: 8.0000Mhz//AVR单⽚机atmega16串⼝中断接收和发送程序。
ICC AVR快速入门 2004-10 by MZICC A VR作为A VR入门编译器为不少人使用,下面以一个实际例子来讲一下如何快速上手。
首先打开ICC A VR,在Project选项选择Open Project,如下图1,在ICC的安装目录内的examples.avr文件夹内选择led.prj。
图1,打开工程打开文件后在点击图2中红色框选中的按钮,打开设置选项,图2,Compiler Options在Device configuration下拉框里面改选为ATMega8(方便仿真),并在Advanced区内将Return Stack Size有16 改为30,不然系统将提示你更改,设置完成后如图3:图3,设置器件及其它在完成以上设置后在Project选项里面点击Rebuild All进行编译和链接,如图4:图4,Rebuild All编译结果在图4的左下角显示,应该不会有错误。
接下来打开A VRStudio 进行调试。
如下图5,找到.cof文件并打开:图5,.cof打开.COF文件后A VRStudio将提示你选择调试平台,这里采用软件仿真,如下图进行选择,点击Finish完成。
图6,选择平台如果购买了本站的A VR JTAG则可以直接选择JTAG ICE进行目标板仿真。
如果操作正确将出现如下图所示的页面,表示导入成功。
可以通过工具栏上的按钮进行相应软件仿真操作。
在此不再细述。
图7,仿真界面接下来用Proteus进行较为直观的仿真,先建立如下图8的电路,图8,Proteus电路图在鼠标操作模式下左击ATMega8,出现如下图9页面:图9,设置.HEX文件点击文件夹图标,找到在ICC A VR里面生成的.HEX文件,点击OK按钮完成加载。
然后点击左下的运行按钮即可仿真,效果如下图10所示:图10,仿真截图在ICC A VR中还有几个比较有用的工具,首先介绍一个Application Builder,点击图11中红色框内的按钮(或在Tools菜单下选择Application Builder)将出现图11中所示的页面:图11,Application Builder在Application Builder里面可以进行各种初始化操作,可以初始化设置CPU,Watchdog,EEPROM,Ports,Timer等等,设置完成后点击OK,ICC A VR将为你生成一个文件,如图12:图12,生成的包含各部件初始化程序的文件你可以保存该文件并加入你的工程,也可以直接有选择性的复制部分初始化子程序到你的程序中。
ICCARV使用教程
一、打开ICCARV软件
二、Project à New,选择保存路径,以及工程文件名称。
三、File à New,新建一个C源程序文件,保存在工程路径中,名称后缀.c必不可少。
点击保存完成保存。
四、输入程序,在程序空白处点击右键à Add to project,或者右键点击Files à Add File(s)…,将刚编好的C程序加入到工程中。
在工程的Files中就会出现刚刚加入的C程序文件。
五、Project à Options…,在弹出的Compiler Options对话框中
Target选项中,选择ATmega128芯片,点击OK。
六、Project à Rebuilt All,或者点击图标,编译程序。
如果
出现错误,则下方会出现提醒,根据提示修改程序。
在出现Device 0% full,则没有错误,并生成可执行程序.hex文件。
.hex文件在工程路径下。
ICC AVR入门编程
下面是本试验板中的例子,点亮一个发光二极管实验。
采用试验板自带的项目学习,省去了文件编写及工程创建等一大堆过程。
让初学者尽快完成第一个实验,等到成功后再来学习一些创建过程及相关设置(先实践再理论),ICC AVR编程例子。
1、打开ICC AVR软件:
2、由主菜单project(工程)里选new(打开工程)选项,建立一个新项目。
3、选择新工程的存放路径,如存放在exp文件夹中。
4、给工程起个名字,如exp1。
5、点击“保存”按钮,将工程保存至exp1文件夹中
6、返回ICC界面,可以看到右边出现这个界面
7、将实验例程\1点亮1个LED\ICC代码文件夹中led.c文件复制到exp1文件夹中。
8、右击ICC界面右边EXP1下面的files文件,出现下面的界面,双击led.c文件就可以添加文件到工程exp1中。
9、由菜单上点击Project->Options->Target,在Device Configuration里选芯片型号为ATMega16;在Advanced(高级)Return Stack Size(堆栈大小)里填30。
10、完成上面的操作,现在就可以编译了,通过菜单Project->Rebuild All对项目进行编译。
如果上面操作没有出错的话,会在项目相同路径下出现烧录文件exp1.hex。
11、到此ICC AVR软件的工作已经完成,将编译输出的led.hex文件烧录到芯片中,连接好硬件电路既可看到实验结果了。
本店是宛峰电子山东济南分店,宛峰电子致力于单片机的开发和学习,秉承物美价廉的宗旨,相互学习才会走的更高,看的更远的理念,锐意创新,多年来形成了自己的知识产权的系列
产品,并且公司常年从事单片机的开发,积累了不少相关的经验,相信我们产品会给你学习开发带来很大的方便
主要经营各种学习板,有:
1.全功能51学习板;AVR学习板;cpld学习板;430学习板;dsp2812学习;ARM7,9学习板,品类齐全,性价比高,全部是精英电子独立自主产权.
2.各类开发工具,包括51/AVR并口下载器,51/AVR USB下载器,AVR串口,USB仿真器,430下载器,alteraCPLD并口下载器,xilinux CPLD并口下载器等
3.各种学习视频,包括51,AVR,cpld,430,cpld,DXP2004,arm.linux系列手把手教你嵌入式视频教程,利于新手起步.
欢迎新老顾客的光顾!
如果您需要以上宝贝,可以到我的淘宝店铺里查找:
我的淘宝店铺:
/shop/view_shop-d7fe57076dae45431c6e45b9b3dd0362.htm?nekot=g%2Cmjwh kzlxmf2gk4rsgaydomjsgm2dc1229431133518。