AVR 单片机实验指导书.doc_第1页
AVR 单片机实验指导书.doc_第2页
AVR 单片机实验指导书.doc_第3页
AVR 单片机实验指导书.doc_第4页
AVR 单片机实验指导书.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR 单片机实验指导书 本书以ATmega8单片机为主,介绍AVR单片机的硬件结构、指令系统和开发环境,并给出ATmega8的应用实例。 1.1ATmega8单片机特点ATmega8是AVR高档单片机中内部接口丰富、功能齐全、性能价格比最好的品种。 其主要特点如下* (1)高性能、低功耗的8位AVR微控制器,先进的RISC精简指令集结构130条功能强大的指令,大多数为单时钟周期指令32个8位通用工作寄存器工作在16MHz时,具有16MIPS的性能片内集成硬件乘法器(执行速度为2个时钟周期)* (2)片内集成了较大容量的非易失性程序和数据存储器以及工作存储器8K字节的Flash程序存储器,擦写次数10000次支持可在线编程(ISP)、可在应用自编程(IAP)带有独立加密位的可选BOOT区,可通过BOOT区内的引导程序区(用户自己写入)来实现IAP编程。 512个字节的E2PROM,擦写次数100000次1K字节内部SRAM可编程的程序加密位* (3)丰富强大的外部接口(Peripheral)性能2个具有比较模式的带预分频器(Separate Prescale)的8位定时/计数器1个带预分频器(SeParat Prescale),具有比较和捕获模式的16位定时计数器1个具有独立振荡器的异步实时时钟(RTC)3个PWM通道,可实现任意16位、相位和频率可调的PWM脉宽调制输出8通道A/D转换(TQFP、MLF封装),6路10位A/D+2路8位A/D6通道A/D转换(PDIP封装),4路10位A/D+2路8位A/D1个I2C的串行接口,支持主/从、收/发四种工作方式,支持自动总线仲裁1个可编程的串行USART接口,支持同步、异步以及多机通信自动地址识别1个支持主/从(Master/Slave)、收/发的SPI同步串行接口带片内RC振荡器的可编程看门狗定时器片内模拟比较器* (4)特殊的微控制器性能可控制的上电复位延时电路和可编程的欠电压检测电路内部集成了可选择频率(l/2/4/8MHZ)、可校准的RC振荡器外部和内部的中断源18个五种睡眠模式空闲模式(Idle)、ADC噪声抑制模式(ADC NoiseReduction)。 省电模式(Powersave)、掉电模式(Powerdown)、待命模式(Standby)* (5)I/O口和封装最多23个可编程I/O口,可任意定义I/O的输入/输出方向;输出时为推挽输出,驱动能力强,可直接驱动LED等大电流负载输入口可定义为三态输入,可以设定带内部上拉电阻,省去外接上拉电阻28脚PDIP封装,32脚TQFP封装和32脚MLF封装* (6)宽工作电压2.7V-5.5V(ATmega8L)4.5V-5.5V(ATmega8)* (7)高运行速度O-8MHz(ATmega8L)0-16MHz(ATmega8)* (8)低功耗正常模式(Active)3.6mA空闲模式(Idle Mode)1.0mA掉电模式(Powerdown Mode)0.5uA1.2ATmega8单片机描述1.3ATmega8单片机封装与引脚第二章Progisp的使用说明2.1Progisp的特点最新特性* (1)支持所有的AVR芯片的编程,支持AT89S51,AT89S52* (2)支持自定义并口下载编程器* (3)支持自定义串口的下载编程器* (4)支持STK500编程器* (5)支持USBASP编程器* (6)支持并口的并行编程器* (7)支持USBProg编程器* (8)支持自定义编程芯片* (9)支持自定义编程熔丝信息提示信息* (10)支持USBProg的在线升级(通过USB口)* (11)支持USBProg-C实现脱机下载* (12)支持命令行方式,可以直接嵌入其他IDE中使用* (13)绿色软件,无需安装,占用资源少* (14)支持自定义汉化信息提示* (15)支持工程管理-可以将所有的配置数据与编程数据打包为单一文件。 2.2Progisp的主界面(基本配置,使用该界面烧录时如图,SPIEN要始终保持红色否则容易造成芯片死锁)progisp的主界面(熔丝导航,该界面为傻瓜式配置,按照熔丝功能自动配置熔丝位)程序启动后默认为非脱机数据模式,如果“脱机数据“选择后,“自动”等按钮将会变为”写入映像”如下图的按钮,用来对脱机编程下载器的脱机数据的读写操作。 脱机数据的编程内容及选项与正常操作时选项相同。 (关于脱机编程的详细情况见脱机下载器的说明书) (1)正常编程的步骤。 连接好目标板,加电,先调入编程数据,选择熔丝位,选择自动完成的设置。 按下“自动“完成编程。 (“脱机数据“一定不能选择) (2)下载脱机数据。 插入脱机下载器,调入需要脱机编程的数据,选择熔丝位,选择“脱机数据“,选择脱机操作的自动完成的设置的参数。 按下“写入映像”完成数据下载(“下载脱机数据“一定要选择) (3)升级下载器的程序。 选择住界面的“配置“栏,点击“升级固件“这是会弹出加载需要升级固件的程序,选择升级固件的程序后,如果,固件符合升级文件的格式“升级固件“变灰,否则,出错。 这时压下下载器的按钮不放将下载器插入电脑的USB口这时所有的指示灯都不亮,松开下载器的按钮,下面的进程条会提示升级的进程,升级完成后拔下下载器,再重新插入就完成了固件的升级。 2.3工程管理工程管理可以将当前编程的数据,配置(包括熔丝位,加密位,编程设置选项)保存为单一的工程文件,已供下次编程调入使用。 (对于编程不同的芯片,不同的配置,不同的版本特别有利)2.4Flash,Eeprom的数据修改Proisp可以打开,二进制,十六进制等格式的编程数据。 数据调入后可以修改清除,也可将调入的数据转存为其他格式的数据2.5配置部分重点介绍一下,FuseMask的作用。 设置此参数可以是某位的熔丝位直接编程,无论在界面上是否选择。 2.6快捷键Ctrl+F12,程序最小化与恢复。 具体的编程操作见下图在图形界面下只需按下快捷键就可操作无需将progisp的主界面调入桌面,这样操作应比命令行更简洁方便,建议用此种方法嵌入你的ide,选择“数据自动重载”每次编译产生新的文件,progisp都会自动重新调入,烧写新的程序2.7命令行的使用方法progisp-pprogrammer-ddevice-e-wf,e,u,l-fffilename,efilename-vf,e-rf,e,u,l,c-pprogrammerprogrammer下载线类型,usbprog,usbasp,paraisp(并口isp,标准支持stk200/300,其他的并口线支持,请在图形界面下设置,或直接修改proisp.ini)-e擦除芯片-wf,e,u,l写入flash,eeprom,fuse,lock数据(fuse,lock的值未做输入,建议使用图形界面修改)-fffilename,efilename打开的flash与eeprom文件-vf,e校验flash,eeprom-rf,e,u,l,c读出flash,eeprom,fuse,lock数据(由于未做显示执行后无结果显示)-ddevicedevice单片机类型举例使用usbprog下载线编写atmega8芯片,flash文件为prog51.hex,eeprom文件为prog51.eep,擦除芯片progisp-pusbprog-datmega8-ffprog51.hex-feprog51.eep-e附device单片机类型AT86RF401AT89S51AT89S52AT90CAN32AT90CAN64AT90C AN128AT90PWM2AT90PWM3AT90S1200AT90S2313AT90S2323AT90S2343AT90S4414AT90S4433AT90S4434AT90S8515AT90S8535AT90USB1286AT90USB1287ATmega8ATmega16ATmega32ATmega48ATmega88ATmega103ATmega128ATmega161ATmega162ATmega163ATmega164ATmega165ATmega168ATmega169ATmega323ATmega324ATmega325ATmega329ATmega406ATmega640ATmega644ATmega645ATmega649ATmega1280ATmega1281ATmega2560ATmega2561ATmega3250ATmega3290ATmega6450ATmega6490ATmega8515ATmega8535ATtiny11ATtiny12ATtiny13ATtiny15ATtiny22ATtiny24ATtiny25ATtiny26ATtiny28ATtiny44ATtiny45ATtiny84ATtiny85ATtiny261ATtiny461ATtiny861ATtiny2313AT24C01AT24C02AT24C04AT24C08AT24C16AT24C32AT24C64AT24C128AT24C256AT24C512AT89S2051AT89S4051AT89LP2052AT89LP4052AT89LP213AT89LP214AT89LP216第三章ICC AVR集成开发环境3.1集成开发环境ICC AVR简介AVR单片机是Atmel公司推出的一款基于RISC指令架构的高性能、低功耗的8位单片机。 所谓精简指令集RISC(Reduced InstructionSet Computer)是20世纪90年代开发出来的,它是综合了半导体集成技术和软件技术性能的新型微处理器架构,是相对于复杂指令集CISC(Complex InstructionSet Computer)而言的。 RISC先使用频率通过最高的简单指令、避免复杂指令、采用固定指令长度、减少指令格式和寻址方式等方法来缩短指令周期,提高处理器的运算速度。 采用这种RISC结构,使得AVR系列的单片机具备1MIPSMHz的高速处理能力。 AVR单片机的快速存取寄存器文件由32个通用寄存器组成。 32个寄存器全部直接与运算逻辑单元(ALU)相连,每一个寄存器都可以代替累加器工作。 这使得微处理器可以在执行当前指令时取出要执行的下一条指令,从而避免了传统的累加器结构造成累加器和存储器之间的数据传输瓶颈效应,提高了系统性能。 在传统的CISC结构中,单片机外部振荡器的时钟被分频降低到内部执行周期。 AVR单片机没有对外部时钟分频,它用一个时钟周期来执行一条指令。 AVR单片机采用哈佛(Harvard)总线结构,程序存储器和数据存储器是分开的。 微处理器直接访问全部程序存储器和数据存储器。 Atmel公司将高密度、非易失性存储器技术运用在了AVR单片机上面,使得AVR单片机都具有ISP(In SystemProgramming)的功能。 即使在程序运行时,也可以对系统进行重新编程。 3.2ICC AVR编译器安装1.运行光盘上的SETUP.EXE程序进行安装方法一1)打开“我的电脑”2)打开光盘驱动器所对应的盘符3)双击光盘中文件SETUP.EXE的图标4)按照屏幕提示,选定一个安装路径后进行安装方法二1)在开始菜单中选择运行项目2)在运行对话框中填入drive:setup.exe(注意drive对应你的机器中的光盘驱动器盘符)3)按确定键开始安装4)其余同方法一注意1)按上述方法进行安装后,得到的是一个只可以使用30天的未注册版。 对正式版用户还要进行第二步的注册,才可得到一个无时间限制的正式版。 2)ICC AVR正式版分标准版和专业版,在标准版中有一些功能限制。 如代码的压缩、工程和文件的配置检查在标准版中不可以使用。 2.对安装完成的软件进行注册对首次安装并且使用期未超过30天的用户,可以这样注册1)启动ICC AVR编译器的集成环境(IDE)。 2)将正式版中附带的一张名称为“Unlock Disk”的软盘插入你机器的软盘驱动器中。 3)在IDE的“Help”菜单中寻找标题为“Importing aLicense froma FloppyDisk”的一项,并且进行单击。 4)ICCAVR软件自动进行注册,当注册完成后会提示你注册文件已从软盘移走。 当你确定并再次重新启动ICCAVR后,会发现软件已经完成注册。 对不是首次安装或使用时间已超过30天的用户,可这样注册1)对这类用户在程序启动时已不能进入IDE环境,而是出现一个提示你注册的对话框,你应该选择“YES”按钮。 2)这时会出现一个注册对话框,对话框上有一个标题为“Importing aLicense froma FloppyDisk”的按钮。 3)将正式版中附带的一张名称为“Unlock Disk”的软盘插入你机器的软盘驱动器中,单击上一步中提到的按钮。 4)ICC AVR软件自动进行注册,当注册完成后会提示你注册文件已从软盘移走。 当你确定并再次重新启动ICCAVR后,会发现软件已经完成注册。 注意1)“Unlock Disk”软盘在注册时应打开写保护,否则无法完成注册。 2)完成注册后,“Unlock Disk”软盘成为一张空盘,不可以在另一台机器上进行安装和注册。 当你需要在不同的电脑中使用ICCAVR或在同一台电脑中将ICCAVR重新安装在与原来不同的目录位置时,应该首先在“Help”菜单中选择“Transferring YourLicense toa FloppyDisk”一项,将你的注册文件传送到一张软盘上,然后再按上述方法进行安装注册。 3.3ICC AVR中的文件类型及其扩展名文件类型是由它们的扩展名决定的,IDE和编译器可以使用以下几种类型的文件。 ?输入文件?.c扩展名-表示是C语言源文件?.s扩展名-表示是汇编语言源文件?.h扩展名-表示是C语言的头文件?.prj扩展名-表示是工程文件,这个文件保存由IDE所创建和修改的一个工程的有关信息。 ?.a扩展名-库文件,它可以由几个库封装在一起。 libcavr.a是一个包含了标准C的库和AVR特殊程序调用的基本库。 如果库被引用,链接器会将其链接到您的模块或文件中。 您也可以创建或修改一个符合你需要的库。 ?输出文件?.s对应每个C语言源文件,由编译器在编译时产生的汇编输出文件。 ?.o由汇编文件汇编产生的目标文件,多个目标文件可以链接成一个可执行文件。 ?.hex INTELHEX格式文件,其中包含了程序的机器代码。 ?.eep INTELHEX格式文件,包含了EEPROM的初始化数据。 ?.cof COFF格式输出文件,用于在ATMEL的AvrStudio环境下进行程序调试。 ?.lst列表文件,在这个文件中列举出了目标代码对应的最终地址。 ?.mp内存映象文件,它包含了您程序中有关符号及其所占内存大小的信息。 ?.cmd NoICE2.xx调试命令文件。 ?.noi NoICE3.xx调试命令文件。 .dbg ImageCraft调试命令文件。 3.4ICC AVR的IDE环境ICC AVR是一个标准的32位程序,具有良好的Windows界面。 ICC AVR的IDE环境如图1所示。 图13.4.1菜单栏ICC AVR为用户提供了丰富的菜单,在一级菜单栏下又分别设置有一级或多级子菜单。 另外,在IDE环境中单击鼠标右键也会根据实际情况弹出相应的快捷菜单。 图21)File“文件”菜单?New新建一个文件。 ?Reopen重新打开历史文件。 ?Open打开一个已经存在的文件。 ?Save保存当前文件。 ?Save as将当前文件另存为。 ?Close关闭当前文件。 ?Compile Fileto Object编译当前文件成目标文件。 目标文件不可以直接用于对芯片编程或调试,其主要用于语法检查,为创建新的启动文件或库产生目标文件。 ?Compile Fileto Output编译当前文件成输出文件,产生的输出文件可用于编程和调试。 ?Save All保存所有打开的文件。 ?Closs All关闭当前打开的所有文件。 ?Print打印当前文件。 ?Exit退出ICC AVR的IDE环境。 2)Edit“”菜单?Undo撤销最后一次执行的动作。 ?Redo重新执行最后一次的动作。 ?Cut剪切选择的内容到剪贴板。 ?Copy复制选择的内容到剪贴板。 ?Paste将剪贴板的内容粘贴到当前光标所在的位置。 ?Delete删除全部内容。 ?Select All选择全部内容。 ?Block Indent将选择的整块内容左移。 ?Block Outdent将选择的整块内容右移。 3)Search“寻找”菜单?Find在窗口中寻找一个文本。 ?Whole Word全字匹配。 ?Up/Down往上或往下。 ?Find inFiles在当前打开的文件中或在当前工程的所有文件中或当前目录中的文件中寻找一段文本。 ?Case Sensitive大小写敏感。 ?Whole Word全字匹配。 ?Regular Expression寻找规则的表达式。 ?Replace在器中替换文本。 ?Find Again寻找下一个?Goto LineNumber转到指定等号。 ?Add Bookmark添加书签。 ?Delete Bookmark删除书签。 ?Next Bookmark跳转到下一个书签。 ?Goto Bookmark跳转到指定的书签。 4)View“视图”菜单?Project FileWindow如果选择此命令,则显示工程文件窗口。 ?Status Window如果选择此命令,则显示状态窗口。 ?Project Makefile以只读方式打开Makefile文件。 ?Output ListingFile以只读方式打开列表文件。 ?Map File打开映像文件。 5)Project“工程”菜单?New创建一个新的工程文件。 ?Open打开一个已经存在的工程文件。 ?Open AllFiles打开工程的全部源文件。 ?Close AllFiles关闭全部打开的文件。 ?Reopen重新打开最近打开过的工程文件。 ?Make Project编译工程项目并输出文件。 ?Rebuild All重新编译全部文件。 ?Add File(s)添加一个文件到工程中,这个文件可以是非源文件。 ?Remove SelectedFiles从工程中删除选择的文件。 ?Option打开工程编译选项对话框。 ?Close关闭工程项目。 ?Save As将工程项目另存。 6)Studio+“AVR Studio调试“菜单如果系统中安装了AVR Studio软件,那么在工程项目编译后可以直接在IDE环境下调用AVR Studio进行调试。 7)Tools“工具”菜单?Environment Options环境和终端仿真器设置。 ?Editor andPrint Options器和打印设置。 ?AVR Calc打开AVR计算器可以计算UART的波特率定时器的定时常数。 ?Application Builder利用应用向导生成硬件的初始化代码。 ?Configure Tools配置工具菜单。 ?Run以命令方式运行程序。 8)Terminal“仿真终端”菜单?Show TerminalWindow显示仿真终端窗口。 ?Clear Window清除窗口显示。 ?Capture窗口捕获。 9)Help“帮助”菜单?Help Topics帮助主题。 ?Register Software注册软件。 ?Import Licensefrom Floppy从软盘注册。 3.4.2工具栏ICC AVR的工具栏提供了许多常用的工具,用户单击这些工具按钮即可完成相关的任务,这比从菜单栏中选择更加直观和便捷。 图3从左到右每个图标表示新建文件、打开文件夹、保存文件、打印文件、剪切、复制、粘贴、查找、编译项目、停止编译、项目设置、到第1个错处、到第2个错处、应用向导、在系统中编译。 3.4.3区窗口是用户与IDE交流信息的主要区域,通过此窗口创建或修改相应的文件。 对于源文件中的关键字,ICC AVR将以高亮度显示,如图4中的3位置。 图43.4.4编译区编译窗口提供源文件的编译信息。 如果存在编译错误,则当用鼠标单击相关错误信息进,器会自动将光标定位在区中发生错误的位置。 对C源文件中缺少分号的错误,器定位于其下面一行,如图5中的4位置就是编译区。 图53.4.5工程区ICC AVR采用工程的组织形式,程序的所有文件以工程的元素保存在工程中。 工程区提供对工程文件的组织和管理,一般包括了Files、Headers和Documents3个文件夹,分别用于存放源文件、头文件和其他工程文件,如图6中的5位置。 图63.5创建一个工程项目1.运行ICC AVR,运行ProjectNew,新建一个工程,保存为main.prj,保存在新文件夹avr first下。 2.FileNew新建一个空白文件,输入程序。 3.FileSave as保存到你刚才第一步建立的工程的文件夹中。 注意保存的文件名必须输入后缀名,形式如main.c。 4.右键add toproject。 你将看到如图7效果工程建立完成图73.6ICC AVR的库函数3.6.1寄存器说明头文件io*.h(io2313.h、io8515.h、iom8.h等.)这些头文件由Atmel公司官方公开的定义I/O寄存器的源文件经过修改得到,对应于不同型号的AVR芯片的寄存器说明。 如iom8.h对ATmega8单片机的寄存器进行了说明。 3.6.2宏定义头文件macros.h这个头文件包含了许多有用的宏和定义。 常用的宏如BIT(x)将位x置1,NOP()空指令等。 3.6.3库函数头文件?Assert.hassert(),声明宏。 ctype.h字符类型函数。 float.h浮点数原形。 limits.h数据类型的大小和范围。 math.h浮点运算函数。 stdarg.h变量参数表.。 ?stddef.h标准定义。 ?stdio.h标准输入/输出I/O()函数。 ?stdlib.h包含内存分配函数的标准库。 ?string.h字符串处理函数。 下面介绍一些常用的库函数。 1.字符类型库下列函数按照输入的ACSII字符集字符分类,使用这些函数之前应当用#include包含。 ?int isalnum(int c)如果c是数字或字母返回非零数值,否则返回零。 ?int isalpha(int c)如果c是字母返回非零数值,否则返回零。 ?int istrl(int c)如果c是控制字符,如FF、BELL、LF等则返回非零数值,否则返回零。 ?int isdigit(int c)如果c是数字返回非零数值,否则返回零。 ?int isgraph(int c)如果c是一个可打印字符而非空格返回非零数值,否则返回零。 ?int islower(int c)如果c是小写字母返回非零数值,否则返回零。 ?int isprint(int c)如果c是一个可打印字符返回非零数值否则返回零?int ispunct(int c)如果c是一个可打印字符而不是空格、数字或字母返回非零数值,否则返回零。 ?int isspace(int c)如果c是一个空格字符返回非零数值(包括空格CR、FF、HT、NL和VT),否则返回零。 ?int isupper(int c)如果c是大写字母返回非零数值,否则返回零。 ?int isxdigit(int c)如果c是十六进制数字返回非零数值,否则返回零。 ?int tolower(int c)如果c是大写字母则返回c对应的小写字母其它类型仍然返回c。 ?int toupper(int c)如果c是小写字母则返回c对应的大写字母其它类型仍然返回c。 2.浮点运算库下列函数支持浮点数运算,使用这些函数之前必须用#include包含。 ?float asin(float x)以弧度形式返回x的反正弦值。 ?float acos(float x)以弧度形式返回x的反余弦值。 ?float atan(float x)以弧度形式返回x的反正切值。 ?float atan2(float x,float y)返回y/x的反正切位,其范围在-3.1423.142弧度之间。 ?float ceil(float x)返回对应x的一个整型数,小数部分四舍五入。 ?float cos(float x)返回以弧度形式表示的x的余弦值。 ?float cosh(float x)返回x的双曲余弦函数值。 ?float exp(float x)返回以e为底的x的幂。 ?float exp10(float x)返回以10为底的x的幂。 ?float 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两个部分。 y的范围为0.5y1,y值被函数返回,而n值存放到pexp指向的变量中。 ?float fround(float x)返回最接近x的整型数。 ?float ldexp(float x,int exp)返回x与2的e xp次幂的乘积。 ?float log(float x)返回x的自然对数。 ?float log10(float x)返回以10为底的x的对数。 ?float modf(float x,float*pint)把浮点数分解成整数部分和小数部分,整数部分存放到pint指向的变量,小数部分应当大于或等于0而小于1并且作为函数返回值返回。 ?float pow(float x,float y)返回x的y次幂值?float sqrt(float x)返回x的平方根。 ?float sin(float x)返回以弧度形式表示的x的正弦值。 ?float sinh(float x)返回x的双曲正弦函数值。 ?float tan(float x)返回以弧度形式表示的x的正切值。 ?float tanh(float x)返回x的双曲正切函数值。 3.标准输入输出库标准的文件输入/输出是不能真正植入微控制器MCU的。 标准stdio.h的许多内容不可以使,用不过有一些I/O函数是被支持的。 同样,使用之前应用#include预处理,并且需要初始化输出端口。 最低层的I/O程序是单字符的输入(getchar)和输出(putchar)程序。 如果你针对不同的装置使用高层的I/O函数,例如用printf输出LCD,则需要全部重新定义最底层的函数。 为在Atmel的AVR Studio软件仿真终端I/O窗口使用标准I/O函数,应当在编译选项中选中相应的单选钮。 在默认情况下,单字符输出函数putchar是输出到UART装置。 ?int getchar()使用查寻方式从UART返回一个字符。 ?int printf(char*fmt,.)按照格式说明符输出格式化文本frm字符串,格式说明符是标准格式的一个子集。 ?%d输出有符号十进制整数。 ?%o输出无符号八进制整数。 ?%x输出无符号十六进制整数。 ?%X除了大写字母使用“A”“F”外同%x。 ?%u输出无符号十进制整数。 ?%s输出一个以C中空字符NULL结束的字符串。 ?%c以ASCII字符形式只输出一个字符。 ?%f以小数形式输出浮点数。 ?%S输出在FLASH存贮器中的字符串常量。 printf支持三个版本,取决于你的特别需要和代码的大小。 越高的要求,代码越大。 ?基本形只有%c、%d、%x、%u和%s格式说明符是承认的。 ?长整形针对长整型数的修改%ld、%lu、%lx被支持,以适用于精度要求较高的领域。 ?浮点形全部格式包括%f被支持。 单字符输出函数输出到UART装置的还有以下几个。 ?int putchar(int c)输出单个字符。 这个库程序使用了UART以查寻方式输出单个字符,注意输出n字符至程序终端窗口。 ?int puts(char*s)输出以NL结尾的字符串。 ?int sprintf(char*buf,char*fmt)按照格式说明符输出格式化文本frm字符串到一个缓冲区,格式说明符同printf()。 ?const char*支持功能cprintf和csprintf是将FLASH中的格式字符串分别以prinf和sprinf形式输出。 4.字符串函数用#include预处理后编译器支持下列函数,定义了NULL类型size_t和下列字符串及字符阵列函数。 ?void*memchr(void*s,int c,size_t n)在字符串s中搜索n个字节长度寻找与c相同的字符。 如果成功返回匹配字符的地址指针,否则返回NULL。 ?int memcmp(void*s1,void*s2,size_t n)对字符串s1和s2的前n个字符进行比较。 如果相同则返回0;如果s1中字符大于s2中字符则返回1;如果s1中字符小于s2中字符则返回-1。 ?void*memcpy(void*s1,void*s2,size_t n)复制s2中n个字符至s1,但复制区不可以重叠。 ?void*memmove(void*s1,void*s2,size_t n)复制s2中n个字符至s1返回s1,其与memcpy基本相同,但复制区可以重叠。 ?void*memset(void*s,int c,size_t n)在s中填充n个字节的c,返回s。 ?char*strcat(char*s1,char*s2)复制s2到s1的结尾,返回s1。 ?char*strchr(char*s,int c)在s1中搜索第一个出现的c,包括结束NULL字符。 如果成功返回指向匹配字符的指针;如果没有找到匹配字符,则返回空指针。 ?int strcmp(char*s1,char*s2)比较两个字符串。 如果相同返回0;如果s1s2则返回1;如果s1 ?char*strcpy(char*s1,char*s2)复制字符串s2至字符串s1,返回s1。 ?size_t strcspn(char*s1,char*s2)在字符串s1中搜索与字符串s2匹配的第一个字符,包括结束NULL字符,返回s1中找到的匹配字符的索引。 ?size_t strlen(char*s)返回字符串s的长度,不包括结束NULL字符。 ?char*strncat(char*s1,char*s2,size_t n)复制字符串s2(不含结束NULL字符)中n个字符到s1。 如果s2长度比n小,则只复制s2,返回s1。 ?int strncmp(char*s1,char*s2,size_t n)基本和strcmp函数相同,但只比较前n个字符。 ?char*strncpy(char*s1,char*s2,size_t n)基本和strcpy函数相同,但只复制前n个字符。 ?char*strpbrk(char*s1,char*s2)基本和strcspn函数相同,但它返回的是在s1匹配字符的地址指针,否则返回NULL指针。 ?char*strrchr(char*s,int c)在字符串s中搜索最后出现的c并返回它的指针,否则返回NULL。 ?size_t strspn(char*s1,char*s2)在字符串s1搜索与字符串s2不匹配的第一个字符(包括结束NULL字符),返回s1中找到的第一个不匹配字符的索引。 ?char*strstr(char*s1,char*s2)在字符串s1中找到与s2匹配的子字符串。 如果成功,则返回s1中匹配子字符串的地址指针,否则返回NULL。 第四章实验部分实验一A/D转换实验 一、实验目的1.学习C语言的编程方法,ICC AVR的使用方法2.掌握AVRATmega8单片机实验开发系统的ISP在线编程方法3.掌握ADC的接线方法,ADC函数的使用方法4.学会利用ADC转换来调试程序的技巧 二、设计要求使用内部RC振荡,实现ADC转换 三、实验材料1.AVRATmega8单片机开发板一块2.+9V直流电源一个3.USBISP下载电缆一根 四、设计提示1.硬件电路如下图2.程序范例#include#include#define osal0x7d#define Vref500extern constunsigned charseg_table16;extern unsigned char led_buff4;extern voiddelay_ms(unsigned inttime);extern voiddisplay(void);unsigned intadc_rel;unsigned charadc_mux;void adc_init(void)DDRC=0x00;PORTC=0x00;ADCSRA=0x00;ADMUX=(1 (1)if(adc_old!=adc_rel)adc_old=adc_rel;ADCtoBCD(adc_old);display();i=PIND&0x0c;if(i!=0x0c)display();if(i=(PIND&0x0c)CLI();adc_rel=0;adc_old=0;if(i=0x08)if(adc_mux0)adc_mux-;else adc_mux=3;led_buff0=seg_tableadc_mux;led_buff1=0xbf;led_buff2=0b10001001;led_buff3=0b11000110;while(PIND&0x0c)!=0x0c)display();SEI(); 五、实验报告要求1.列出所有实验程序清单。 2.实验报告格式参照实验报告说明。 六、实验思考与总结1.A/D转换器的主要技术指标有哪些?2.逐次逼近式ADC的转换原理?3.总结本实验用到的知识点。 实验二D/A转换实验 一、实验目的1.学习C语言的编程方法,ICC AVR的使用方法2.掌握AVRATmega8单片机实验开发系统的ISP在线编程方法3.掌握DAC的接线方法,DAC函数的使用方法4.学会利用DAC转换来调试程序的技巧 二、设计要求使用内部RC振荡,实现DAC转换 三、实验材料1.AVRATmega8单片机开发板一块2.+9V直流电源一个3.USBISP下载电缆一根 四、设计提示1.硬件电路如下图2.程序范例#include#include#define Vref500#includeuart.h#includeadc.h/extern unsigned char read_flash(unsigned intadd);unsigned intadc_old;void timer1_init(void)TCCR1B=0;TT1H=0;OCR1A=0;TCCR1A=(1 (10);i=PIND&0x0c;if(i=0x0c)return;elseif(i=0x08)if(OCR1A0x10)OCR1A-=0x10;else OCR1A=0;while(PIND&0x0c)!=0x0c);void main(void)unsigned chari;unsigned inttemp;DDRB=(1 (1)i=getchar();switch(i)caseS:puts(DAC TESTver1.0);break;caseT:temp=getchar();temp=temp8;temp|=getchar();if(temp,接收的从机会显示-。 5.多主机通信时,要正确设置从机地址和主机匹配的从机地址。 6.注意地址的设置不要和SL-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论