凌阳单片机c语言延时函数,凌阳单片机C语言(网站整理).doc

凌阳单片机C语言(网站整理)

凌阳单片机C语言

注意点一:求实参顺序

unsigned int i;?????? i=0;?????? test(i,i++);函数test的定义如下:void test(unsigned int f,unsigned int m){return;}

这里我们不去追究这个函数有无意义,这里并不作讨论。实际上,跟前面的讲解标准C的求参顺序的例子差不多,只不过把printf函数换成了一个具体的可见的函数而已。在unSP C编写以上的代码,并在IDE中进行仿真时,所得到的结果是与标准C中的是一样的,与前面的分析一样,传递参数给test函数时,test函数的两个参数将得到如下的值:f为2,m为1。感兴趣的读者可以试试。unSP C是与标准C没什么差别太多的,尽管去按照C语言的标准去写程序好了。

这里所说的数据类型,指的是我们在编程时定义变量、常量时指定的数据类型,如“char”、“unsigned int”、“int”等。C语言,具体的数据类型的定义是可以与具体的机器相关的,也就是说这些数据类型的具体定义(如占多少个字节长度、定义的规则等)是可以容许与最终代码所要运行的CPU(或叫机器)相关的。所以在此提出,是有必要的,因为我们本书的重要目的就是单片机的C语言编程,而且是凌阳的unSP系列单片机的C编程,即有关于使用unSP C的;我们所编写的C代码最终运行的平台是凌阳unSP系列单片机。unSP C所定义的数据类型,下表中有述,如下: 值域 char?????????????????????????????????? 16?????????? -32768~32767

short、int???????????????????????????? 16?????????? -32768~32767long?????????????????????????????????? 32?????????? -2147483648~2147483647

unsigned char???????????????????????? 16??????????0~65535

unsigned short、unsigned int???????? 16???????? 0~65535

unsigned long???????????????????????? 32???????? 0~4294967295 float、double??????????????????????????32???????? 以IEEE格式表示的32位浮点数

char:在unSP C里面,由于没有byte的操作,将此数据类型定义为16位的长度,与一般的8位单片机的C编译器是有区别的,读者需要注意一下。

unsigned char:与前者一样,定义为了16位的长度。

double:这是需要注意的地方,目前unSP C里定义为32位的长度,是与一般的C编译器支持的64位长度有区别的。 这里所说的就与单片机的C编程有关了,桌面程序的程序员,一般都不注意编译后生成的最终代码的大小,但对于单片机(或者是底层嵌入式的编程载体)而言,对最终程序的大小(即对程序存储器、数据存储器的占用大小)是斤斤计较的。unsigned与signed型的数据,则C编译器会调用不同的支持库来完成这两者不同类型的数据的操作,也就是说会增加一些程序的大小以及对RAM的占用,所以建议读者在编程时,合理地定义自己所需的数据类型。unsigned 的数据定义,这样在运算时,只需要进行无符整型数的运算,而不需要对负数进行判断及处理,在速度上会快些。

注意点四:谨慎使用浮点数绝大多数的单片机是没有浮点运算单元的,即CPU不支持浮点运算,而非要进行浮点运算时只能通过软件的方式完成。unSP C是凌阳16位单片机的C编程平台,与其它的单片机一样,也没有浮点的运算单元在CPU当中,所以在unSP C当中使用的浮点运算时,也是调用库(这个“库”将在后面的内容中介绍,大家可以留意一下后面的内容)里面的浮点运算库完成,然而浮点库在执行时,需要消耗大量的时间以及资源(相对于整型数的运算)。1~0.01之间,而且精度要求为小数点后两位,那为何不将数据按比例扩大,处理时以100~1之间处理呢?

C语言编程当中使用了浮点数,以及使用其进行了运算,结果发现程序的执行相当的慢,也就不足为奇了。

unSP IDE在SPCE061A或者是其它的凌阳16位单片机的汇编编程当中,unSP IDE的汇编编译器把那个从复位向量跳转到指定的主程序入口的操作过程给封锁了起来,也就是说,在复位向量里面写一个跳转的指令这样的工作,无需用户去做了,只需要按照统一的主程序入口开始你的编程之旅即可。unSP 的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
凌阳61单片机的语音识别程序。 //************硬件连接*******************************************// //单片机:SPCE061A //修改间:2010.03.21 //BY xueqian //***************************************************************// #include "bsrSD.h" #include "SPCE061A.h" #include "voice.h" //*******全局变量*************// int gActivated=0; //*************主函数main*********************// int main() { int res,timeCnt=0; //变量timeCnt用来计 *P_IOB_Dir=0xffff; *P_IOB_Attrib=0xffff; *P_IOB_Data=0x0; BSR_DeleteSDGroup(0); //初始化存储器RAM PlayRespond(RSP_INTRO); //播放开始训练的提示音 while (TrainWord(NAME_ID,1)!=0); //训练名称 while (TrainWord(COMMAND_ONE_ID,2)!=0); //训练第一条命令 while (TrainWord(COMMAND_TWO_ID,3)!=0); //训练第二条命令 //开始识别命令 BSR_InitRecognizer(BSR_MIC); //辨识器初始化 // BSR_EnableCPUIndicator(); //启动监控 PlayRespond(RSP_STANDBY); //播放开始辨识提示音 while(1) { res=BSR_GetResult(); if (res>0) //识别出命令 { if (gActivated) { timeCnt=0; //计数归零 switch(res) { case NAME_ID: PlayRespond(RSP_HERE); //第一条语音应答 break; case COMMAND_ONE_ID: //PlayRespond(RSP_GUNSHOT); //第一条命令应答 *P_IOB_Data=0x5; gActivated=0; break; case COMMAND_TWO_ID: //PlayRespond(RSP_READY); //第二条命令应答 *P_IOB_Data=0xa; gActivated=0; } } else { if(res==NAME_ID) { PlayRespond(RSP_HERE); //回答触发指令 gActivated=1; timeCnt=0; } } } else if(gActivated) //已经触发,但在规定间里没有识别出来 { if(++timeCnt>450) //超出定 { PlayRespond(RSP_NOVOICE); //在规定间内没有检测声音的回答 gActivated=0; timeCnt=0; } } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值