E&CCollegeAVRTraining2005Slide1简单跑马灯的设计E&CCollegeAVRTraining2005Slide2AVR单片机的C语言编程EmbeddedCProgramming1.C语言体系结构2.变量和常量3.AVR单片机I/O端口特性E&CCollegeAVRTraining2005Slide3简单跑马灯的设计FlashLEDDesign设计内容:共有8个LED需要每隔500MS同时点亮或熄灭,LED接在PORTA口,输出高电平灯亮,输出低电平时灯灭。要求1:自行编程。要求2:采用自动引导程序进行配置生成软件初始化代码框架,然后填入自己的程序代码。通过CodeVision编译,注意时钟频率。E&CCollegeAVRTraining2005Slide4分组轮流闪烁的跑马灯实训1:要求按照如下所示的方式1点亮,间隔500ms后,再换成方式2点亮,依此类推,周而复始。方式1:方式2:要求:采用自动引导程序进行配置生成软件初始化代码框架,然后填入自己的程序代码。要求设置时钟频率为2M。下载程序时要求采用内部RC振荡器的熔丝配置。E&CCollegeAVRTraining2005Slide5AVR的IO端口特性Input&OutputPort设置数据方向部分电路数据并行输出部分电路数据并行输入部分电路E&CCollegeAVRTraining2005Slide68位的并行输入、输出接口。并行输入:通过一条输入指令可以一次读出8个引脚的状态,组成一个字节的数据。一般用来采集外部数据。并行输出:通过一条输出指令可以将一个字节的数据送到8个引脚上。一般用来输出控制信息。AVR的I/O口是真正的I/O口,能正确反映I/O口的真实情况。I/O口有输入/输出,三态高阻输入,也可设定内部拉高电阻作输入端的功能,便于作各种应用特性所需(多功能I/O口)。但是使用时,必须进行方向设置,是作为输入,还是作为输出接口使用。I/O接口及其应用E&CCollegeAVRTraining2005Slide7AVR的IO端口特性Input&OutputPort每个端口为具有可选上拉电阻的双向I/O端口。每个并行端口有三个相关的I/O寄存器:1.数据方向寄存器DDRx2.数据寄存器PORTx3.端口输入引脚寄存器PINx(其中x对应A、B、C、D四个端口)当端口的某位DDRxn=1时,则此位定义为输出模式。且输出值等于PORTxn。(其中n代表位的序号)当端口的某位DDRxn=0时,则此位定义为输入模式。不论如何配置DDRxn,都可以通过读取PINxn寄存器来获得引脚电平。为可读/写的寄存器为只读寄存器E&CCollegeAVRTraining2005Slide8AVR的IO端口特性Input&OutputPort所有AVRI/O端口都具有真正的读-修改-写的功能:可以通过软件任意设置任何一位的输入、输出模式。并且输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管与VCC和地相连。如果有引脚未被使用,建议这些引脚赋予一个确定电平,使能内部上拉电阻。E&CCollegeAVRTraining2005Slide9复位后即缺省配置方向:输入PIN为物理引脚上拉:关闭此时引脚的状态不确定E&CCollegeAVRTraining2005Slide10上拉转换DDxPORTxPINx物理引脚上拉方向:输入PIN可输出电流上拉:ON此时引脚的状态可正确读入??0111E&CCollegeAVRTraining2005Slide11口线输出DDxPORTxPINx物理引脚上拉方向:输出PIN反映输出真实情况上拉:OFF11111111E&CCollegeAVRTraining2005Slide12AVR单片机I/O口是真正的I/口E&CCollegeAVRTraining2005Slide13仿真器编程下载与熔丝配置的使用ProgramDownload&FuseConfigJTAGICE可以对支持的器件的FLASH、EEPROM、熔丝位和加密位编程,可以执行芯片擦除、编程、校验、加密的操作AVRStudio中点击命令:TOOLS-ProgramAVR/CONNECT或TOOLS-ProgramAVR/AUTOCONNECT注意:如果正在调试,那么也必须点击DEBUG-StopDebugging来退出仿真调试程序对JTAGICE的占用。E&CCollegeAVRTraining2005Slide14仿真器编程下载与熔丝配置的使用ProgramDownload&FuseConfigProgram选项卡注意,只有带JTAG口功能的AVR才支持JTAGICE编程FLASH缓冲区和EEPROM缓冲区可以支持的文件格式:1.Atmel.rom和.eep2.IntelHEX3.二进制.binE&CCollegeAVRTraining2005Slide15仿真器编程下载与熔丝配置的使用ProgramDownload&FuseConfigFuse选项卡:1.功能熔丝位的配置:2.BOOT区熔丝位的配置:支持引导加载程序的芯片有更多的安全位,可以锁定存储器中的引导加载区。3.FLASH锁定位:选择芯片编程使用的安全级别。注意,请保证“JTAGInterfaceEnable”一项始终有效,否则目标芯片就将失去与JTAGICE的通信能力,只有通过并行编程的办法才能重新激活该熔丝位4.Lock&Bits选项卡——加密锁定位的设置注意,如果想要将加密位删除,那么只能对芯片做擦除操作。E&CCollegeAVRTraining2005Slide16仿真器编程下载与熔丝配置的使用ProgramDownload&FuseConfigE&CCollegeAVRTraining2005Slide17实战演练实训2:如图所示电路,要求按照如下所示的方式1点亮,间隔0.2s后,再换成方式2点亮,依此类推,周而复始。方式1:方式2:设计要求:采用自动引导程序进行配置生成软件初始化代码框架,然后填入自己的程序代码。通过CodeVision编译,要求下载程序时要求采用外部时钟的熔丝配置。(led2.c)E&CCollegeAVRTraining2005Slide18应用延时函数的详细介绍DelayFunction1.使用延时函数前要用#includedelay.h预处理命令。2.下面延时函数使用程序循环产生延时,调用它们之前要关闭中断,否则会比预期的延时要长。3.要在CodeVisionAVR软件的Project→Configure→CCompiler菜单中设定准确的时钟频率。并同程序下载时设置的熔丝位一致。本目标板的时钟只能设置成内部RC和外部晶振两种模式。4.主要的延时函数:1)voiddelay_us(unsignedintn)实现n个微秒的延时,其中n必须是常数表达式。2)voiddelay_ms(unsignedintn)实现n个毫秒的延时,其中n必须是常数表达式。此函数会每毫秒清一次看门狗。E&CCollegeAVRTraining2005Slide19实战演练实训3:如图所示电路,要求按照如下所示的方式1点亮,每次点亮两只灯,间隔0.2s后,再换成方式2点亮相邻的两只,依此类推,四次后,再回到第一次,周而复始循环50次。(要求分别用while,do-while,语句完成)方式1:方式2:方式3:方式4:E&CCollegeAVRTraining2005Slide20C语言体系结构是函数结构EmbeddedCStructure/*****************************************************ThisprogramwasproducedbytheCodeWizardAVRV1.24.7eStandardChiptype:ATmega16Programtype:ApplicationClockfrequency:8.000000MHzMemorymodel:SmallExternalSRAMsize:0DataStacksize:256*****************************************************///LEDcontrollerprogram注释部分:由“/**/”配对括起来的部分内容,可以包括多行。注释部分:由“//”引导的一行内容。E&CCollegeAVRTraining2005Slide21C语言体系结构是函数结构EmbeddedCStructure#includemega16.h#includedelay.h//Declareyourglobalvariablesherevoidmain(void){…….}voidfunction(void){…….}预编译命令:文件包含指令函数头函数体主函数main():C程序总是从main()函数开始执行。而不论其在程序中的位置如何。当主函数执行完毕时,亦即程序执行完毕。定义了一些与I/0接口有关的特定变量,他们对应单片机呢部的特殊功能寄存器,用大写字母书写。E&CCollegeAVRTraining2005Slide22C语言结构风格特点EmbeddedCStructureCharacter1.习惯用小写字母,大小写敏感2.一行上可以写几条语句,一条语句也可以写在几行上。可使用空行和空格3.C程序由语句组成,用“;”作为语句终止符4.书写上注意使用缩进格式。5.程序由一个或多个函数组成,必须有且只能有一个主函数main()6.程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。7.允许使用注释。C语言的注释格式为:/*……*/技巧:为避免遗漏必须配对使用的符号,例如注释符号/*……*/、函数体的起止标识符(花括号{})、圆括号()等等。voidmain(void){//PortAinitialization…….DDRA=0xFF;PORTA=0xFF;…….while(1){//PlaceyourcodeherePORTA^=0xFF;delay_ms(500);};}E&CCollegeAVRTraining2005Slide23变量与变量名VariableConceptandVariableIdentifier变量:程序运行过程中其值可以改变的量,系统为程序中的每一个变量开辟一个存储单元。变量的两个要素:变量名和变量值变量命名遵循标识符命名规则,在程序中,通过变量名来引用变量的值。标识符:用来标识变量名、符号常量名、数组名、函数名、文件名的有效字符序列。标识符定义的注意事项:1.字母(或下划线)开头,后跟字母、数字和下划线组成。2.不能和系统使用的名字(关键字)冲突。3.长度无统一规定,许多系统取8个字符。但目前并不如此。编程技巧:使用见名知意的字符串命名变量标识符。E&CCollegeAVRTraining2005Slide24C语言的基本数据类型以及变量的定义VariableDefine基本数据类型:整型、实型、字符型C程序中用到的每一个变量都要指定它们所属的数据类型。其原因在于:不同类型的数据在内存中占据不同长度的存储区,而且采用不同的表示方式。一个数据类型对应着一个值的范围并且对应一组允许的操作。所有的变量一定要“先定义、后使用”:Inta,b,c;/*指定a,b,c为整型变量*/floatx,y;/*指定x,y为单精度实型变量*/doublez;/*指定z为双精度实型变量*/charc1,c2;/*指定c1,c2为字符型变量*/E&CCollegeAVRTraining2005Slide25变量的内存存储情况VariableRangeE&CCollegeAVRTraining2005Slide26常量Constant常量:1.整型常量2.实型常量3.字符型常量4.字符串常量5.符号常量6.f