电子竞赛之c语言应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

凌阳大学计划前言这个ppt的重点在于讲述如何使用C语言来对SPCE061A单片机进行编程。希望这个ppt对同学们有所帮助。凌阳大学计划目录凌阳C语言简介凌阳C语言基础C和汇编混合编程用C来直接控制硬件凌阳大学计划语言编程的优点寄存器分配、数据类型等由编译器管理。编程及调试的时间减少,大大缩短开发周期。明显增加软件可读性,便于改进和扩充。凌阳大学计划进行编程IDE直接提供了C语言的开发环境,C函数和汇编函数可以方便地进行相互调用。SoftwareLibrariesStandardClibraryHardwarelibrarySACM(Sunplusaudiocodingmethod)凌阳大学计划认可的基本数据类型及其值域数据类型数据长度(bit)值域char16-32768~32767short,int16-32768~32767long32-2147483648~2147483647unsignedchar160~65535unsignedshortunsignedint160~65535unsignedlong320~4294967295float,double32以IEEE格式表示的32位浮点数凌阳大学计划数据类型应该注意的地方char和unsignedchar为16位这与一般机器使用的GCC数据类型之间有一些差别。float与double均存储为32位浮点数unSP汇编的float与double分别是32位与64位浮点数。凌阳大学计划如果使用signed和unsigned两种数据类型,将使存储空间成倍增长。因为使用signed和unsigned两种数据类型的库函数是不同的,使用signed和unsigned,就得同时使用这两种格式类型的库函数,最好采用unsigned格式。在编程时,如果只强调程序的运算速度而又不进行负数运算时,最好采用unsigned格式。凌阳大学计划关于实参求值顺序unSPIDE和TurboC一样,实参的求值顺序是从右到左的,如下例:i=3;printf(%d,%d,i,i++);输出4,3凌阳大学计划混合编程的三个方面C调用汇编函数汇编调用C函数C中嵌入在线汇编凌阳大学计划调用汇编函数要求汇编函数名也以下划线“_”为前缀因为C编译器产生的所有标号都以下划线“_”为前缀。在进行参数传递时,参数以相反的顺序(从右到左)被压入栈中。汇编函数的16位返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。凌阳大学计划();intmain(void){inti,j,SUM;i=2;j=3;SUM=ADD(i,j);return0;}.CODE.PUBLIC_ADD_ADD:.PROCPUSHBPTO[SP];BP=SP+1;R1=[BP+3];//取得第一个参数R2=[BP+4];//取得第二个参数R1+=R2;POPBPFROM[SP];RETF;.ENDP凌阳大学计划:R1=3;PUSHR1TO[SP];//第2个参数//入栈R1=2;PUSHR1TO[SP];//第1个参数//入栈CALL_ADD;[SUM]=R1;SP+=2;//恢复SP指针.ENDC函数:intADD(inti,intj){i=i+j;returni;}凌阳大学计划中嵌入在线汇编在线汇编指令格式:asm(“汇编指令模板”:输出参数:输入参数)凌阳大学计划利用嵌入式汇编写端口寄存器在C对P_IOA_Dir赋值0x1234,则嵌入汇编的实现方式如下:asm(“.defineP_IOA_Dir0x7002”);intmain(void){asm([P_IOA_Dir]=%0::r(0x1234));}凌阳大学计划利用嵌入式汇编读端口寄存器把P_IOA_Dir的值读出并保存在C中的一个int变量j里,则嵌入汇编的方式如下:asm(“.defineP_IOA_Dir0x7002”);intmain(void){intj;asm(%0=[P_IOA_Dir]:=r(j));}凌阳大学计划对寄存器进行操作#defineP_IOA_Dir(volatileunsignedint*)0x7002intmain(void){intj;*P_IOA_Dir=0x1234;j=*P_IOA_Dir;}凌阳大学计划设置//设置A口为带下拉电阻的输入*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;//设置B口为同相低电平输出*P_IOA_Dir=0xffff;*P_IOB_Attrib=0xffff;*P_IOB_Data=0;凌阳大学计划进行系统时钟设置#defineP_SystemClock(volatileunsignedint*)0x7013*P_SystemClock=System_InformationSystemInformation=CPUClock+32KMode+32KStatus+FoscPLL频率睡眠状态32K方式CPUclk选择b15~b8b7~b5b4b3b2~b0凌阳大学计划进行系统时钟设置CPUClock的取值可以是以下几种:C_FoscFoscC_Fosc_Div_2Fosc/2C_Fosc_Div_4Fosc/4C_Fosc_Div_8Fosc/8(默认值)C_Fosc_Div_16Fosc/16C_Fosc_Div_32Fosc/32C_Fosc_Div_64Fosc/64C_SleepStop(睡眠)凌阳大学计划进行系统时钟设置32KHzMode的取值可以是以下几种:C_StrongMode强振模式C_AutoMode弱振模式(默认值)32KHzSleepStatus的取值可以是以下几种:C_32K_Work睡眠时,32K时钟仍工作(默认)C_32K_Off睡眠时,32K时钟停止工作凌阳大学计划进行系统时钟设置Fosc的取值可以是以下几种:C_Fosc_24M24.576M(默认值)C_Fosc_20M20.480MC_Fosc_32M32.768MC_Fosc_40M40.960MC_Fosc_49M49.152M凌阳大学计划进行系统时钟设置这个例子是进行系统时钟设置。读者可以选择不同的Fosc_CLK和CPU_CLK,观察发光二极管亮灭快慢。硬件连接:A口低八位接八个共阳的发光二极管现象:根据Fosc_CLK和CPU_CLK的不同,观察发光二极管亮灭速度也不同凌阳大学计划进行系统时钟设置程序代码#includeSPCE061V004.HvoidDelay();#defineFosc_CLK_RATEC_Fosc_49M;//Fosc#defineCPU_CLK_RATEC_Fosc_Div_2;//CPUClk凌阳大学计划(){un

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功