电子竞赛之C语言应.ppt_第1页
电子竞赛之C语言应.ppt_第2页
电子竞赛之C语言应.ppt_第3页
电子竞赛之C语言应.ppt_第4页
电子竞赛之C语言应.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

电子竞赛 之 C语言应用,前言,这个ppt的重点在于讲述如何使用C语言来对SPCE061A单片机进行编程。 希望这个ppt对同学们有所帮助。,目录,凌阳C语言简介 凌阳C语言基础 C和汇编混合编程 用C来直接控制硬件,凌阳C语言简介,用C语言编程的优点,寄存器分配、数据类型等由编译器管理。 编程及调试的时间减少,大大缩短开发周期。 明显增加软件可读性,便于改进和扩充。,用C语言可以很方便地对SPCE061A进行编程,IDE直接提供了C语言的开发环境,C函数和汇编函数可以方便地进行相互调用。 Software Libraries Standard C library Hardware library SACM ( Sunplus audio coding method),凌阳C语言基础,unSP GCC认可的基本数据类型及其值域,数据类型应该注意的地方,char和unsigned char为16位 这与一般机器使用的GCC数据类型之间有一些差别。 float与double均存储为32位浮点数 unSP汇编的float与double分别是32位与64位浮点数。,关于变量的signed和unsigned,如果使用signed和unsigned两种数据类型,将使存储空间成倍增长。 因为使用signed和unsigned两种数据类型的库函数是不同的,使用signed和unsigned,就得同时使用这两种格式类型的库函数, 最好采用unsigned格式。 在编程时,如果只强调程序的运算速度而又不进行负数运算时,最好采用unsigned格式。,关于实参求值顺序,unSP IDE和Turbo C一样,实参的求值顺序是从右到左的,如下例: i=3;printf(“%d,%d“,i,i+);,输出 4,3,一个例子,C和汇编混合编程,混合编程的三个方面,C调用汇编函数 汇编调用C函数 C中嵌入在线汇编,C调用汇编函数,要求汇编函数名也以下划线“_”为前缀 因为C编译器产生的所有标号都以下划线“_”为前缀。 在进行参数传递时,参数以相反的顺序(从右到左)被压入栈中。 汇编函数的16位返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。,C调用汇编的小例子,汇编调用C小例子,C中嵌入在线汇编,在线汇编指令格式: asm (“汇编指令模板”:输出参数:输入参数),利用嵌入式汇编写端口寄存器,在C对P_IOA_Dir赋值0x1234,则嵌入汇编的实现方式如下: asm(“.define P_IOA_Dir 0x7002”); int main(void) asm(“P_IOA_Dir = %0“ : : “r“(0x1234); ,利用嵌入式汇编读端口寄存器,把P_IOA_Dir的值读出并保存在C中的一个int变量j里 ,则嵌入汇编的方式如下: asm(“.define P_IOA_Dir 0x7002”); int main(void) int j; asm(“%0 = P_IOA_Dir“ : “=r“(j); ,用C来直接控制硬件,使用纯C对寄存器进行操作,#define P_IOA_Dir (volatile unsigned int *)0x7002 int main(void) int j; * P_IOA_Dir=0x1234; j= * P_IOA_Dir; ,用C进行IO设置,/设置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;,用C进行系统时钟设置,#define P_SystemClock (volatile unsigned int *)0x7013 *P_SystemClock = System_Information System Information = CPU Clock + 32K Mode + 32K Status + Fosc,用C进行系统时钟设置,CPU Clock的取值可以是以下几种: C_Fosc Fosc C_Fosc_Div_2 Fosc/2 C_Fosc_Div_4 Fosc/4 C_Fosc_Div_8 Fosc/8 (默认值) C_Fosc_Div_16 Fosc/16 C_Fosc_Div_32 Fosc/32 C_Fosc_Div_64 Fosc/64 C_Sleep Stop (睡眠),用C进行系统时钟设置,32K Hz Mode 的取值可以是以下几种: C_StrongMode 强振模式 C_AutoMode 弱振模式 (默认值) 32K Hz Sleep Status的取值可以是以下几种: C_32K_Work 睡眠时,32K时钟仍工作 (默认) C_32K_Off 睡眠时,32K时钟停止工作,用C进行系统时钟设置,Fosc的取值可以是以下几种: C_Fosc_24M 24.576M (默认值) C_Fosc_20M 20.480M C_Fosc_32M 32.768M C_Fosc_40M 40.960M C_Fosc_49M 49.152M,用C进行系统时钟设置,这个例子是进行系统时钟设置。读者可以选择不同的Fosc_CLK和CPU_CLK,观察发光二极管亮灭快慢。 硬件连接:A口低八位接八个共阳的发光二极管 现象:根据Fosc_CLK和CPU_CLK的不同,观察发光二极管亮灭速度也不同,用C进行系统时钟设置,程序代码 #include “SPCE061V004.H“ void Delay(); #define Fosc_CLK_RATE C_Fosc_49M; /Fosc #define CPU_CLK_RATE C_Fosc_Div_2; /CPUClk,用C进行系统时钟设置,main() unsigned int Fosc_CLK,CPU_CLK; *P_IOA_Dir = 0x00FF; / IOA: 70 output *P_IOA_Attrib = 0x00FF; *P_IOA_Data = 0;,用C进行系统时钟设置,Fosc_CLK = Fosc_CLK_RATE; CPU_CLK = CPU_CLK_RATE; *P_SystemClock = Fosc_CLK|CPU_CLK;,用C进行系统时钟设置,while(1) *P_IOA_Data = 0x00FF; /LED off Delay(); *P_IOA_Data = 0; /LED on Delay(); ,用C写中断程序,在IDE162下,中断服务程序只能用汇编(包括嵌入式汇编)来写。 在IDE180下,用户多了一种选择,那就是可以用C来写中断。,用C写中断程序,用C写中断程序,要求:定时0.5s,使A口的8个二极管闪烁。 分析:定时0.5s采用哪个时基信号比较方便呢?SPCE061A单片机时基信号频率丰富,有2Hz、4Hz、8Hz、16Hz、32Hz、64Hz、128Hz、256Hz、512Hz、1024H、2048Hz、4096Hz等多种频率。我们可以很明显的看出2Hz时基信号中断是最方便的。只要触发2Hz的时基信号中断,就可以达到0.5s的定时目的。,用C写中断程序,#include “SPCE061V004.H” #include “unSPMACRO.h” main() INT_OFF(); *P_IOA_Dir=0x00FF; *P_IOA_Attrib=0x00FF; *P_IOA_Data=0x0000; *P_INT_Ctrl=C_IRQ5_2Hz;/Setup interrupt INT_IRQ(); while(1) *P_Watchdog_Clear = C_WDTCLR; ,用C写中断程序,#include “SPCE061V004.H“ unsigned int g_uiOutput=0x0000; void IRQ5(void) _attribute_ (ISR); void IRQ5(void) if(*P_INT_Ctrl ,

温馨提示

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

评论

0/150

提交评论