单片机C语言(C51)的常用库函数

上传人:小** 文档编号:145338159 上传时间:2022-08-29 格式:DOC 页数:23 大小:347KB
收藏 版权申诉 举报 下载
单片机C语言(C51)的常用库函数_第1页
第1页 / 共23页
单片机C语言(C51)的常用库函数_第2页
第2页 / 共23页
单片机C语言(C51)的常用库函数_第3页
第3页 / 共23页
资源描述:

《单片机C语言(C51)的常用库函数》由会员分享,可在线阅读,更多相关《单片机C语言(C51)的常用库函数(23页珍藏版)》请在装配图网上搜索。

1、C51的常用库函数详解C51语言的编译器中包含有丰富的库函数,使用库函数可以大大简化用户程序设计的工作量,提高编程效率。每个库函数都在相应的头文件中给出了函数原型声明,在使用时,必须在源程序的开始处使用预处理命令#include将有关的头文件包含进来。C51库函数中类型的选择考虑到了8051单片机的结构特性,用户在自己的应用程序中应尽可能地使用最小的数据类型,以最大限度地发挥8051单片机的性能,同时可减少应用程序的代码长度。下面将C51的库函数分类列出并详细介绍其用法。1字符函数字符函数的原型声明包含在头文件CTYPE.H中。常用的一些字符函数介绍如下。1.1检查英文字母函数检查英文字母函数

2、用于检查形参字符是否为英文字母,其函数原型如下:bitisalpha(charc);其中,c为待判断的字符,如果是英文字母则返回1,否则返回0。程序示例如下:include#indudeinclude头文件4-1voidmain(void)M主函数unsignedchari:charASCON=Ox50;串口模式仁尤许接收亠TMOD|=0x20;御始化T1为定时功能,模式2PCON|=0x80;瘢直SMOD=1TL1=0xF4;讎特率40OObit/sr初值TH1=0xF4;IE|=0x9O;中断TR1=1;“启动定时器,for(i=Q;i128;i+)臃环输出Vp=(isalpha(i)7,

3、YES:,lNOir);f閘用isedpha函数printfCisalpha(%c)=%sn:ip);临出结果*1.2检查字母数字函数检查字母数字函数用于检查形参字符是否为英文字母或数字字符,其函数原型如下:bitisalnum(charc);21.3检查控制字符函数检查控制字符函数用于检查形参字符是否为控制字符,其函数原型:bitiscntrl(charc);其中,c为待判断的字符。控制字符其取值范围为0x00OxlF之间或等于0x7F,如果是,则返回1,否则返回0。#inclijdB卅头文件*includeAvoidrriain(vDid)h川主西数unsignedchari;卅变量声明-

4、char中尹*SCON=0x50;卅串口模式1,允许接收日TMOD|=0x20;卅初始化T1为走时功能,模式2PCON|=0m80;瞬直SIVIOD=1TL1=0xF4;驱特率4SOObit/s.初值TH1=0xF4;IE|=0x90;卅中斷TR1=1;#启动定时器1.4十进制数字检查函数十进制数字检查函数用于检查形参字符是否为十进制数字,其函数原型如下:bitisdigit(charc);其中,c为待判断的字符,如果是十进制数字则返回1,否则返回0。#indude-:ctype.lh?-头文件include-ctdio.h*rnrrrrr#includereg51.h4-1voidmain(

5、void)r主朗数Vunsignedchari:变量声明”.char*p;j+JSCON=0x50;串口模式仁允许接收TMOD|=Dk20;卅初始化巧为定时功能,模或2PCON|=OxBO;/iESMOD=1TL1=0xF4;輝特率4800bitfe,初值,TH1=0xF4;IE|=0x90;”中断TR1=1;启动定时番+JMi=0;i128;i+)唏坏辎出”&p=(isdigit(i)?YES:BNO);卅调用iMgit函麺prirrtfCisdigit(%c)=%srI-Ji,p);娴出结果*卄1.5可打印字符检查函数可打印字符检查函数用于检查形参字符是否为可打印字符,其函数原型如下:bi

6、tisgraph(charc);其中,c为待判断的字符。可打印字符的取值范围为0x210x7C,不包含空格,如果是可打印字符则返回1,否则返回0。51.6包含空格的可打印字符检查函数包含空格的可打印字符检查函数用于检查形参字符是否为可打印字符以及空格,其函数原型如下:bitisprint(charc);其中,c为待判断字符。如果是则返回1,否则返回0。该函数与isgraph的区别在于包含了空格符,空格符为0x20。#inelude沖头文件摘皿山咖匸涮中阡ffinqJud.B.hnvoidmain(void)H主諏unsignedchari;卅変量声明char*p;ASCON=Ox5Q;#串口模

7、式允许接收。TMOD|=aw2a;初蜡化T1肯定时功能,模盍2PCON|=OxSO;應旨SMOD=1TL仁CkF4;渡特4800,初值TH1=0xF4?IE|=0x90;卅中斷,TR1=1;卅启动定时器1.7格式字符检查函数格式字符检查函数用于检查形参字符是否为标点、空格或格式字符,其函数原型如下:bitispunct(charc);其中,c为待判断字符,如果是则返回1,否则返回0。#inclucleinclude#indudevwwwwwww头文件voidmain(void)廿主函数,unsignedchari:M变量声明charSCON=0x50;串口模式1,允许接收日TMOD|=0x20

8、;初姑址门齒罡时功龍,模式2PCON|=0k80;廿设逵SMOD=1TL1=0xF4;滋特率4800bit7s,初值TH仁0kF4;IE|=Dk90;中断TR1=1;廿启动定时器卡fbr(i=0;iinclude才头文件voidmain(vcid)主审敵ninignNBdchari;嗖量声明”char.4-SCOM=Ox5D;才串口模式匕允许接收TMOD|=Dx20;#初姑代T1为定时功能,挨式2PCON|=OxBO;輝置SMOD=1TL1=OxF4;您特军轴0饰眺,初佰TH1=axF4;.IE|=0x90;F冲断,TR1=1;#启动定时器foi=a;is2,则返回一个正数。2.10 包含结束

9、符的字符串比较函数包含结束符的字符串比较函数用于比较两个字符串的大小,其函数原型如下:char*strncmp(char*s1,char*s2,intn);其中,s1和s2为待比较的字符串,n为比较的长度。该函数的功能是比较字符串s1和s2的前n个字符,如果两者相等则返回0;如果s1vs2,则返回一个负数;如果s1s2,则返回一个正数。这里需要和memcmp函数相区别,如果字符串的长度小于n,则strncmp函数比较到字符串结束符后便停止,这和memcmp函数是不一样的。2.11 字符串覆盖函数字符串覆盖函数用于将一个字符串覆盖另一个字符串,其函数原型如下:char*strcpy(char*s

10、1,char*s2);其中,si为目标字符串,s2为源字符串。该函数的功能是将字符串s2(包括结束符)复制到字符串si中的第1个字符指针处。这里需要注意和strcat函数相区别,strcat函数将字符串s2复制到字符串s1的末尾。2.12 指定长度的字符串覆盖函数指定长度的字符串覆盖函数用于将一个指定长度的字符串覆盖另一个字符串,其函数原型如下:char*strncpy(char*s1,char*s2,intn);其中,s1为目标字符串,s2为源字符串,n为长度。该函数实现的操作是从字符串s2(包括结束符)中复制n个字符到字符串s1中的第1个字符指针处。如果字符串s2的长度小于n,则s1串以0

11、补齐到长度n。2.13 获取字符串个数函数获取字符串个数函数用于返回字符串中字符总数,其函数原型如下:char*strlen(char*s1);其中,s1为输入字符串。该函数的功能是获取字符串s1中的字符个数,返回值的大小不包括结尾的字符串结束符。2.14 搜索字符串函数搜索字符串函数用于搜索字符串出现的位置,其函数原型如下:char*strstr(constchar*s1,char*s2);其中,s1为目标字符串,s2为搜索的字符串。该函数实现的操作是在字符串s1中搜索第一次出现字符串s2的位置,并返回该处的指针。如果字符串s1中不包括字符串s2,则该函数返回一个空指针。2.15 搜索字符函

12、数搜索字符函数用于搜索字符出现的位置,其函数原型如下:char*strchr(char*s1,charc);11其中,S1为目标字符串,c为待搜索的字符。该函数的功能是搜索字符串S1中是否包含字符c,如果包含则返回第一次指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针。2.16 返回位置值的字符搜索函数返回位置值的字符搜索函数用于搜索并返回字符出现的位置,其函数原型如下:intstrpos(char*s1,charc);其中,S1为目标字符串,c为搜索的字符。该函数的功能是查找并返回字符c在字符串S1中第一次出现的位置值,没有找到该字符则返回-1,

13、S1串首字符的位置值是0。StrpoS函数的功能与strchr类似,只不过返回值不同。2.17 字符包含函数字符包含函数用于检查字符串中是否包含某字符,其函数原型如下:char*strrchr(char*s1,charc);其中,S1为目标字符串,c为查找的字符。该函数的功能是搜索字符串S1中是否包含字符c,如果包含则返回最后一次指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针。2.18 返回位置值的字符包含函数返回位置值的字符包含函数同样用于检查字符串中是否包含某字符,其函数原型如下:intstrrpos(char*s1,charc);其中,S1

14、为目标字符串,c为查找的字符。该函数的功能是查找并返回字符c在字符串S1中最后一次出现的位置值,没有找到该字符则返回-1,S1串首字符的位置值是0。strrpos函数的功能与strrchr类似,只不过返回值不同。2.19 在指定字符集中查找不包含字符函数在指定字符集中查找不包含字符函数用于查找不包含在指定字符集中的字符,其函数原型如下:intstrspn(char*s1,char*set);其中,si为目标字符串,set为字符集。该函数的功能是搜索字符串si中第一个不包含在set串中的字符,返回值是字符串s1中包括在set中的字符的个数。如果s1中所有的字符都包含在set中,则返回s1的长度(

15、不包括结束符)。如果set是空字符串则返回0。2.20 在指定字符集中查找包含字符函数在指定字符集中查找包含字符函数用于查找包含在指定字符集中的字符,其函数原型如下:intstrcspn(char*s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索的是第一个包含在set串中字符,返回值是字符串si中包括在set中的字符的个数。如果si中所有的字符都包含在set中,则返回si的长度(不包括结束符)。如果set是空字符串则返回0。2.21 查找第一个包含字符函数查找第一个包含字符函数用于查找第一个包含在指定字符集中的字符,其函数原型如char*strpbrk(ch

16、ar*s1,char*set);其中,si为目标字符串,set为字符集。该函数的功能是搜索字符串si中第一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。2.22查找最后一个包含字符函数查找最后一个包含字符函数用于查找最后一个包含在指定字符集中的字符,其函数原型如下:char*strrpbrk(char*s1,char*set);其中,si为目标字符串,set为字符集。该函数的功能是搜索字符串si中最后一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。3I/O函数I/O函数主要用于数据的输入输出等操作,C51的I/O库函数

17、的原型声明包含在头文件STDIO.H中。这些I/O函数使用8051单片机的串行接口进行通信,因此,在使用之前需要先进行串口的初始化。例如:SCON=0x50;串口模式1,允许接收TMODI=0x20;初始化T1为定时功能,模式2PCON|=0x80;设置SMOD=1TL1=0xF4;波特率4800bit/s,初值TH1=0xF4;IEI=0x90;中断TR1=1;启动定时器3.1字符读入函数字符读入函数用于从串口读入一个字符,其函数原型如下:char_getkey(void);该函数执行的操作是等待从8051的串口读入一个字符,并返回读入的原字符。程序示例如下:#includefugggum头

18、文件#includevoidmain(void)M主隔數仪charch:*SCON=Dx50;串口樓式T允许接收TMOD|=0x20;初始化T1为淀时功能,模式2PCON|=0x80;坍殳置SIV1OD=1pTL1=0xF4;波特率4B00bit,初值TH仁gF4+IE|=Ox90;中断,TR1=1;*川启动定时爲3.2字符读入输出函数字符读入输出函数用于从串口读入一个字符并输出该字符,其函数原型如下:chargetchar(void);该函数与_getkey函数有细微的不同,其执行的操作是使用_getkey从串口读入的一个字符,然后使用putchar函数将读入的字符输出。3.3字符串读入函数

19、字符串读入函数用于从串口读入一个字符串,其函数原型如下:char*gets(char*s,intn);其中,s保存读入的字符串,n为字符串的长度。该函数执行的操作是使用getchar函数从串口读入一个长度为n的字符串,并存入字符数组s中。如果遇到换行符,则结束字符的输入。输入成功时将返回传入的参数指针,失败时返回空指针NULL。3.4字符回送函数字符回送函数用于将输入的字符回送到输入缓冲区,其函数原型如下:charungetchar(charc);其中,c为输入字符。该函数执行的操作是将输入的字符回送到输入缓冲区,如果函数调用成功则返回char型值c,失败时则返回EOF。3.5字符输出函数字符

20、输出函数用于通过8051串行口输出字符,其函数原型如下:charputchar(charc);其中,c为通过8051串行口输出的字符。#include葫感以加引旳引厅头文件voidmainfvoid)chark;*-SCON=Cx50;卩串口模式允许接收TMOD|=0x20;初始为定时功能,模式2PCON|=0x80;/igSMOD=1pTL1=0xF4;滋特率48001/5,初值TH1=0kF4?IE|=0x90;中断TR1=1;启动金时器中3.6格式化输出函数格式化输出函数用于按照一定的格式输出数据或字符串,其函数原型如下:intprintf(constchar*fmstr,argumen

21、t);该函数的功能是以一定的格式通过8051单片机的串行口输出数值和字符串。其中第一个参数fmstr是格式控制字符串,参数argument可以是字符串指针、字符或数值,该函数的返回值为实际输出的字符个数。3.7格式化内存缓冲区输出函数格式化内存缓冲区输出函数用于按照一定的格式将数据或字符串输出到内存缓冲区中,其函数原型如下:intsprintf(char*s,constchar*fmstr,argument.);该函数执行的操作是通过指针s,将字符串送入内存数据缓冲区,并以ASCII码的形式储存。3.8字符串输出函数字符串输出函数用于将字符串和换行符写入串行口,其函数原型如下:intputs(

22、constchar*s);其中,s为输出的字符串或换行符。如果执行成功则返回0,错误时返回EOF。程序示例如下:#includeinclude头文件voidmain(void)SCON=0x50;串口模式仁允许接收亠TMOD|=0x20;初始化T1为定时功能,模式2PCON|=0x80;设置SMOD=1TL1=0xF4;波特率4800bit/sJ初值卫TH仁XF4jIE|=0x90;用中断TR1=1;启动定时器putsfThisisatestline1);州愉出字符串puts(Thisisanothertestline);*3.9格式化输入函数格式化输入函数用于将字符串和数据按照一定的格式从串

23、口读入,其函数原型如下:intscanf(constchar*fmstr,argument.);该函数的功能是在格式字符的控制下从串行口读入数据。其中每个参数都必须是指针。scanf返回值是所发现并转换的输入项数,如遇到错误则返回EOF。该函数的格式控制字符串形式如下,方括号内是可选项。%*widthBhltype3.10 格式化内存缓冲区输入函数格式化内存缓冲区输入函数用于将格式化的字符串和数据送入数据缓冲区,其函数原型如下:intsscanf(char*s,constchar*fmstr,argument.);该函数的功能是将输入的字符串通过指针s指向的数据缓冲区。输入数据根据格式控制字符

24、串fmstr被存放到由argument指定的地址。其它方面,sscanf函数与scanf函数类似。3.11 字符串内存输出函数字符串内存输出函数用于将格式化字符串输出到内存数据缓冲区,其函数原型如下:intvprintf(constchar*fmstr,char*argptr);其中,fmstr为格式化字符串,argptr指向变量表的指针而不是变量表,函数返回值为实际写入到输出字符串中的字符数。其它方面,vprintf函数与printf函数类似。3.12 指向缓冲区的输出函数指向缓冲区的输出函数用于将格式化字符串和数字输出到由指针所指向的内存数据缓冲区,其函数原型如下:intvsprintf(

25、char*s,constchar*fmstr,char*argptr);该函数执行的操作是将格式化字符串和数字输出到由指针所指向的内存数据缓冲区。其中,该函数接受的是一个指向变量表的指针而不是变量表,其返回值为实际写入到输出字符串中的字符数。其他方面vsprintf函数与sprintf函数类似。4数学函数数学函数主要用于进行数学运算,其原型声明包含在头文件MATH.H中。下面介绍一些常用的数学函数。4.1 绝对值函数绝对值函数用于计算并返回输出数据的绝对值。按照其操作数的数据类型的不同,有如下几种形式:intabs(intval);charcabs(charval);floatfabs(flo

26、atval);longlabs(longval)这些函数分别用于计算整型、字符型、浮点型以及长整型数据的绝对值。4.2 指数以及对数函数指数函数用于计算并返回输出数据的指数。对数函数用于计算并返回输出数据的对数。其函数原型示例如下:floatexp(floatx);floatlog(floatx);floatlog10(floatx);floatsqrt(floatx);其中exp函数用于计算并返回浮点数x的指数,log函数用于计算并返回浮点数x的自然对数(自然对数以e为底,e=2.718282),log10函数用于计算并返回浮点数x的以10为底的对数值,sqrt函数用于计算并返回浮点数x的平

27、方根。4.3三角函数三角函数用于计算数学中三角函数的值。在C51语言中包含如下几种三角函数:floatcos(floatx);floatsin(floatx);floattan(floatx);floatacos(floatx);floatasin(floatx);floatatan(floatx);floatatan2(floaty,floatx);floatcosh(floatx);floatsinh(floatx);floattanh(floatx);4.4取整函数取整函数用于取输入数据的整数。在C51语言中,包含两类取整函数,示例如下:floatceil(floatx);floatfl

28、oor(floatx);其中ceil函数用于计算并返回一个不小于x的最小正整数(作为浮点数),floor函数用于计算并返回一个不大于x的最小正整数(作为浮点数)。4.5浮点型分离函数浮点型分离函数用于将浮点型数据的整数和小数部分分开,其函数原型如下:floatmodf(floatx,float*ip);头文件主西散猾明变量函数modf将浮点数x分成整数和小数两部分,整数部分放入*ip,返回值为小数部分。两者都含有与x相同的符号。#include#inclLide#ineludevoidmain(void)SCON=Dx5a;TMOD|=Ox2D;PCDN|=0x80;TL1=0xF4;floa

29、txl.S.yjZ;M串口樓式仁克许接收初始化巧为定时功能,模式口设直SIVIOD=1M波特率4SC0bit/s,初值4.6幕函数幕函数用于进行幕指数运算。其函数原型如下:floatpow(floatx,floaty);该函数用于计算并返回xy的值。如果x不等于0而y=0,则返回1。当x=0且y=0或x0且y不是整数时,返回NaNo#indude沖具文件#incliude-#加岷voidmain(voidAfloatx=2.0;floaty4.0;SCON=Ox5Q;TMOD|=Ox2D;PCON|=0x80;TL1=QxF4;TH1=0xF4;.IE|=M0;TR1=1;printfT%fV

30、i,3x,y,powCx/庐明并初始代变量川串口模式1,比许撞收卅初始化T1为定时功能,模式2/1SESMOD=1幟特率48001/$.视值川中断沖启动走时帶卿用pow函数5标准函数标准函数主要用于完成数据类型转换以及存储器分配等操作。标准函数的原型声明包含在头文件STDLIB.H中。下面介绍常用的一些函数。5.1字符串转换函数字符串转换函数用于将字符串转换成数值类型并输出。根据输出数值类型的不同,可以有如下几种形式:floatatoi(char*sl);floatatol(char*sl);floatatof(char*sl);其中,atoi函数用于将字符串sl转换成整型数值并返回该值。输入

31、字符串的格式为:whitespace+/-数字。其中,whitespace可由空格、/、制表符组成。这里的数字可以是一个或多个十进制数。5.2 带返回指针的字符串转换函带返回指针的字符串转换函数将字符串转换成数值类型并输出,同时返回未转换部分的指针。根据输出数值类型的不同,可以有如下几种形式:floatstrtod(constchar*s,char*ptr);longstrtol(constchar*s,char*ptr,unsignedcharbase);unsignerlongstrtoul(constchar*s,char*ptr,unsignedcharbase);5.3 随机函数随机

32、函数用于产生伪随机数。在C51语言中,包含两种随机函数,其函数声明如下:intrand();voidsrand(intn);其中,函数rand用于返回一个0到32767之间的伪随机数,而函数srand用来初始化随机数发生器的随机种子。如果不使用srand函数,则对rand函数的相继调用将产生相同的随机序列。5.4 数组内存分配函数数组内存分配函数用于为n个元素的数组分配内存空间,其函数原型如下:void*calloc(unsighedintn,unsighedintsize);其中n数组元素的个数,size为数组中每个元素的大小。该函数所分配的内存区域用0进行初始化。返回值为已分配的内存单元起

33、始地址,如果不成功则返回0。5.5 释放内存函数释放内存函数用于释放前面已分配的内存空间,其函数原型如下:voidfree(voidxdata*p);其中,指针p指向待释放的存储区域。p必须是以前用calloc、malloc或realloc函数分配的存储区域,如果p为NULL,则该函数无效。经free函数所被释放的存储区域可以参与以后的分配。5.6 初始化内存函数初始化内存函数用于对前面申请的内存进行初始化,其函数原型如下:voidinit_mempool(voidxdata*p,unsighedintsize);其中,指针p表示存储区首地址,size表示存储区大小。该函数可对被函数callo

34、c、malloc、free或realloc管理的存储区域进行初始化。5.7 内存分配函数内存分配函数用于在内存中分配指定大小的存储空间,其函数原型如下:void*malloc(unsighedintsize);其中,size为分配的空间大小,返回值为指向所分配内存的指针。如果返回NULL,则表示没有足够的内存空间可用。5.8 调整内存大小函数调整内存大小函数用于调整先前分配的存储器区域大小,其函数原型如下:void*realloc(voidxdata*p,unsighedintsize);其中,参数p表示该存储区域的起始地址,参数size表示新分配的存储区域大小。该函数的返回值为新区域所指向的

35、指针。如果返回NULL,贝9表示没有足够的内存空间可用。原存储器区域的内容被复制到新存储器区域中,如果新存储器区域较大,多出的区域不作初始化。6内部函数内部函数的原型声明包含在头文件INTRINS.H中。下面介绍常用的一些函数。6.1循环左移函数循环左移函数主要用于将数据按照二进制循环左移n位。按照操作数据类型的不同,其函数原型如下几种形式:unsighedchar_crol_(unsighedcharval,unsighedcharn);unsighedint_irol_(unsighedintval,unsighedcharn);unsighedlong_lrol_(unsighedlon

36、gval,unsighedcharn);其中,val为待移位的变量,n为循环移位的次数。函数_crol_、_irol_和rol_分别用于字符型、整型和长整形变量的循环左移,其返回值分别为移位后的字符型、整型和长整形。该函数与8051单片机的RLA指令相关。6.2 循环右移函数循环右移函数主要用于将数据按照二进制循环右移n位。按照操作数据类型的不同,其函数原型如下几种形式:unsighedchar_cror_(unsighedcharval,unsighedcharn);unsighedint_iror_(unsighedintval,unsighedcharn);unsighedlong_lr

37、or_(unsighedlongval,unsighedcharn);其中,val为待移位的变量,n为循环移位的次数。函数cror_、_iror_和ror_分别用于字符型、整型和长整形变量的循环右移,其返回值分别为移位后的字符型、整型和长整形。该函数与8051单片机的RRA指令相关。6.3 延时函数延时函数用于使单片机程序产生延时,其函数原型如下:void_nop_(void);该函数类似于8051单片机的NOP指令。程序示例如下:#include/头文件/主函数/P1端口输出0xFF/延时/P1端口输出0x00#includevoidmain(void)P1=0xFF;_nop_();_no

38、p_();P1=0x00;6.4位测试函数位测试函数用于对字节中的一位进行测试,其函数原型如下:void_testbit_(bitx);其中,x为待测位变量。如果该位变量置位则函数返回1,同时将该位复位为0,否则返回0。该函数产生一个8051单片机的JBC指令,其只能用于可直接寻址的位,不允许在表达式中使用。includeffinc.ude#incudereg51M头立件voidmain(void)主陌救bitflag;4-SCON=0k50;FF串口模式X北许挂收TMOD|=0x20;站初皓化T1为定时功能,栓式2PCON|=Ok0O;设置SMOD=1TL1=QmF4;迪特率400仙屿,初值

39、0TH1=0xF4;.1日=0临0;M中斷TR1=1:启动定时誥,flag=1;Ve.聊it.硼FF谓用函数printfCBiltwaselsewasd&ertn);7绝对地址访问函数绝对地址访问的函数包含在头文件ABSACC.H中,是一些宏定义的函数。下面分别介绍常用的一些函数。7.1 BYTE型存储空间访问函数BYTE型存储空间访问函数用于对8051单片机的存储空间进行绝对地址访问,可以做字节寻址。其宏定义原型如下:#defineCBYTE(unsighedcharvolatilecode*)0)#defineDBYTE(unsighedcharvolatileidata*)0)#defi

40、nePBYTE(unsighedcharvolatilepdata*)0)#defineXBYTE(unsighedcharvolatilexdata*)0)7.2 WORD型存储空间访问WORD型存储空间访问函数可以访问8051的所有存储器空间。其宏定义原型如下:#defineCWORD(unsighedintvolatilecode*)0)#defineDWORD(unsighedintvolatileidata*)0)#definePWORD(unsighedintvolatilepdata*)0)#defineXWORD(unsighedintvolatilexdata*)0)7.3

41、far存储区访问函数far存储区访问函数用于访问far存储器区域。其宏定义原型如下:# defineFVAR(object,addr)(*(objectvolatilefar*)(addr)+0x10000L)# defineFCVAR(object,addr)(*(objectconstfar*)(addr)+0x810000L)其中,FVAR用于访问far空间(存储类为HDATA),FCVAR用于访问constfar空间(存储类为HCONST)。7.4 far存储区数组访问函数far存储区数组访问函数用于访问far存储器区域的数组类型目标。其宏定义原型如下:#defineFARRAY(ob

42、ject,base)(*(objectvolatilefar*)(base)+0x10000L)#defineFCARRAY(object,base)(*(objectconstfar*)(base)+0x810000L)其中,FARRAY用于访问far空间(存储类为HDATA),FCARRAY用于访问constfar空间(存储类为HCONST)。8 变量参数表函数变量参数表函数用于函数参数的个数和类型可变的场合。C51编译器允许函数的参数个数和类型是可变的,可使用简略形式(记号为“.”),这时参数表的长度和参数的数据类型在定义时是未知的。C51的变量参数表函数包含在头文件STDARG.H中,

43、主要包括如下几个。函数原型typedefchar*va_Iist:其功能为将va_list定义成指向参数表的指针。函数原型voidva_start(ap,v)。其功能为初始化ap参数,其一般在一个可变长度参数表的函数中使用。在使用宏va_arg进行存取前,必须调用函数来初始化可变参数表。函数原型typedefva_arg(ap,type):其功能为从ap指向的可变长度参数表中检索type类型的值。对va_arg的第一次调用将返回在va_start宏中指定的v参数后的第一个参数。继续调用va_arg将返回剩下的后续参数。对于每一个参数可以只调用一次,而且必须按照参数表中的参数的次序进行。函数原型

44、voidva_end(ap)。其功能为终止在va_start宏中已被初始化的可变长度参数表的指针ap,并且关闭参数表,结束对可变参数表的访问。9 全程跳转函数全程跳转函数用于正常系列函数的调用和函数结束,还允许从深层函数调用中直接返回。其原型声明包含在头文件SETJMP.H中。这里介绍一些常用的全程跳转函数。函数原型typedefcharjmp_buf_jblen:其功能为定义用于保存和恢复程序环境的缓冲区,供setjmp和longjmp所使用,其必须定义为全局变量。函数原型intsetjmp(jmp_bufenv):其功能为将程序执行的当前环境状态信息存入变量env中。当直接调用setjmp

45、时,返回值为0,当从longjmp调用时,返回值为非0。函数原型voidlongjmp(jmp_bufenv,intretal):其功能为恢复先前调用setjmp时存在env中的环境状态信息,并从setjmp语句的下一条语句执行。参数val为调用setjmp的返回值。10 计算结构体成员的偏移量函数计算结构体成员的偏移量函数包含在头文件STDDEF.H中。其函数声明如下:intoffsetof(structure,member);其中,structure为结构体,member为结构体成员。该函数计算member从开始位置的偏移量,并返回字节形式的偏移量值。11 小结本章详细讲解了C51语言中常用的库函数,主要包括字符函数、字符串函数、I/O函数、数学函数、标准函数、内部函数、绝对地址访问函数、变量参数表函数、全程跳转函数以及偏移量函数。这些库函数涵盖了常见的字符、字符串、数学计算、I/O控制等功能,读者在进行程序设计时可以直接调用使用。因此,熟练掌握和运用本章内容,可以大大减轻程序设计的负担,方便单片机的程序设计。23

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!