版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八讲SPCE061A之C语言应用前言这个ppt的重点在于讲述如何使用C语言来对SPCE061A单片机进行编程。希望这个ppt对同学们有所帮助。
目录凌阳C语言简介凌阳C语言基础C和汇编混合编程用C来直接控制硬件
凌阳C语言简介
用C语言编程的优点寄存器分配、数据类型等由编译器管理。编程及调试的时间减少,大大缩短开发周期。明显增加软件可读性,便于改进和扩充。
用C语言可以很方便地对SPCE061A进行编程IDE直接提供了C语言的开发环境,C函数和汇编函数可以方便地进行相互调用。SoftwareLibraries
StandardClibrary
Hardwarelibrary SACM(Sunplusaudiocodingmethod)
凌阳C语言基础
unSPGCC认可的基本数据类型及其值域数据类型数据长度(bit)值域char16-32768~32767short,int16-32768~32767long32-2147483648~2147483647
unsignedchar160~65535unsignedshortunsignedint160~65535
unsignedlong320~4294967295
float,double32以IEEE格式表示的32位浮点数
数据类型应该注意的地方char和unsignedchar为16位 这与一般机器使用的GCC数据类型之间有一些差别。float与double均存储为32位浮点数
unSP汇编的float与double分别是32位与64位浮点数。
关于变量的signed和unsigned如果使用signed和unsigned两种数据类型,将使存储空间成倍增长。 因为使用signed和unsigned两种数据类型的库函数是不同的,使用signed和unsigned,就得同时使用这两种格式类型的库函数,最好采用unsigned格式。 在编程时,如果只强调程序的运算速度而又不进行负数运算时,最好采用unsigned格式。关于实参求值顺序unSPIDE和TurboC一样,实参的求值顺序是从右到左的,如下例:
i=3;printf("%d,%d",i,i++);
输出4,3
C和汇编混合编程
混合编程的三个方面C调用汇编函数汇编调用C函数
C中嵌入在线汇编
C调用汇编函数要求汇编函数名也以下划线“_”为前缀 因为C编译器产生的所有标号都以下划线“_”为前缀。在进行参数传递时,参数以相反的顺序(从右到左)被压入栈中。
汇编函数的16位返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。C调用汇编的小例子
externintADD();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
汇编调用C小例子EXTERNAL_ADD;.RAM.VARSUM.CODE.PUBLIC_main;_main:R1=3;PUSHR1TO[SP];//第2个参数//入栈R1=2;PUSHR1TO[SP];//第1个参数//入栈CALL_ADD;[SUM]=R1;SP+=2;//恢复SP指针.ENDC函数:int
ADD(int
i,intj){i=i+j;returni;}
C中嵌入在线汇编在线汇编指令格式: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));}
用C来直接控制硬件
使用纯C对寄存器进行操作#defineP_IOA_Dir (volatileunsignedint*)0x7002intmain(void){
intj; *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进行系统时钟设置
#defineP_SystemClock(volatileunsignedint*)0x7013
*P_SystemClock=System_InformationSystemInformation=CPUClock+32KMode+32KStatus+Fosc
PLL频率睡眠状态32K方式CPUclk选择b15~b8b7~b5b4b3b2~b0用C进行系统时钟设置
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(睡眠)用C进行系统时钟设置
32KHzMode的取值可以是以下几种:C_StrongMode
强振模式C_AutoMode
弱振模式(默认值)32KHzSleepStatus的取值可以是以下几种:C_32K_Work
睡眠时,32K时钟仍工作(默认)C_32K_Off
睡眠时,32K时钟停止工作用C进行系统时钟设置
Fosc的取值可以是以下几种:C_Fosc_24M 24.576M(默认值)C_Fosc_20M 20.480MC_Fosc_32M 32.768MC_Fosc_40M 40.960MC_Fosc_49M 49.152M用C进行系统时钟设置
这个例子是进行系统时钟设置。读者可以选择不同的Fosc_CLK和CPU_CLK,观察发光二极管亮灭快慢。
硬件连接:A口低八位接八个共阳的发光二极管现象:根据Fosc_CLK和CPU_CLK的不同,观察发光二极管亮灭速度也不同用C进行系统时钟设置
程序代码#include"SPCE061A.h"void Delay();#defineFosc_CLK_RATEC_Fosc_49M;//Fosc#defineCPU_CLK_RATEC_Fosc_Div_2;//CPUClk用C进行系统时钟设置
main(){ unsignedint
Fosc_CLK,CPU_CLK; *P_IOA_Dir=0x00FF;//IOA:[7..0]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;//LEDoffDelay();*P_IOA_Data=0;//LEDonDelay();}}用C写中断程序在IDE162下,中断服务程序只能用汇编(包括嵌入式汇编)来写。在IDE180下,用户多了一种选择,那就是可以用C来写中断。……用C写中断程序CASM功能INT_OFF()intoff禁止所有中断INT_IRQ()int
irq仅允许irq中断INT_FIQ()int
fiq仅允许fiq中断INT_FIQ_IRQ()int
fiq,irq允许fiq和irq中断IRQ_OFF()irqoff禁止irq中断IRQ_ON()irqon允许irq中断FIQ_OFF()fiqoff禁止fiq中断FIQ_ON()fiqon允许fiq中断用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 “SPCE061A.h”main(){ INT_OFF(); *P_IOA_Dir=0x00FF; *P_IOA_Attrib=0x00FF; *P_IOA_Data=0x0000; *P_INT_Ctrl=C_IRQ5_2Hz;//Setupinterrupt
INT_IRQ();
while(1)
*P_Watchdog_Clear=C_WDTCLR;}用C写中断程序#include "SPCE061A.h"unsignedint
g_uiOutput=0x0000;voidIRQ5(void)__attribute__((ISR));voidIRQ5(void){ if(*P_INT_Ctrl&C_IRQ5_2Hz) { //I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食用油购销合同模板版
- 电池批发购销合同
- 绿植维护安装合同
- 垫资还款协议范本
- 2024解除、终止劳动合同协议书
- 冲突管理与处理技巧培训考核试卷
- 信息系统的数字金融与金融科技考核试卷
- 光学仪器的激光晶体技术原理与应用考核试卷
- 橡胶制品行业生态循环经济考核试卷
- 消防挂靠协议合同模板
- 教师资格考试高级中学音乐面试试题及解答参考
- DB36T+2036-2024地下病害体三维地质雷达探测技术规程
- 《中国税制讲座》课件
- 临床成人失禁相关性皮炎的预防与护理团体标准解读
- 《电气控制系统设计与装调》教案 项目五 任务二小车自动往返控制线路设计与安装
- 意识形态知识培训课
- 网络安全行业防火墙解决方案
- 2024固态电池需求趋势产业链发展现状及龙头企业布局分析报告
- JGJT46-2024《建筑与市政工程施工现场临时用电安全技术标准》知识培训
- 四川公务员考试(公共基础知识)真题试卷汇编1
- 中国历史人文地理(上)学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论