C51库函数详解

合集下载

c51flag用法

c51flag用法

c51flag用法C51flag是一个用于设置和查询C51微控制器上寄存器标志的函数库。

它提供了一组函数,可以方便地访问和处理寄存器标志,从而实现对C51微控制器的控制和调试。

一、C51flag函数库C51flag函数库提供了以下主要函数:1.C51flag_set():用于设置寄存器标志。

它接受一个标志值作为参数,并将该标志值写入相应的寄存器中。

2.C51flag_clear():用于清除寄存器标志。

它接受一个标志值作为参数,并将该标志值从相应的寄存器中清除。

3.C51flag_get():用于查询寄存器标志的状态。

它接受一个标志地址作为参数,并返回该标志的状态值。

二、使用方法要使用C51flag函数库,您需要包含相应的头文件并使用相应的函数。

下面是一个简单的示例代码,演示如何使用C51flag函数库:```c#include<stdio.h>#include"c51flag.h"intmain(){//设置寄存器标志C51flag_set(0x0000,FLAG_A);//清除寄存器标志C51flag_clear(0x0001,FLAG_B);//查询寄存器标志状态intflag_status=C51flag_get(0x0002);printf("FlagA:%s\n",(FLAG_A&flag_status)?"true":"false");printf("FlagB:%s\n",(FLAG_B&flag_status)?"true":"false");return0;}```在上面的示例中,我们首先使用C51flag_set()函数将寄存器地址为0x0000的FLAG_A标志设置为真。

然后,我们使用C51flag_clear()函数将寄存器地址为0x0001的FLAG_B标志清除为假。

常用Keil C51库函数

常用Keil C51库函数
void *memcpy(void *dest, void *src , int len)
从src所指向的内存中复制len个字符到dest中,返回指向dest中最后一个字符的指针。如果src与dest发生交迭,则结果是不可测的
void *memccpy(void *dest, void *src, char val, int len)
bit isdigit(char c)
检查参数字符是否为十进制数字0~9,是则返回1,否则返回0
bit isgraph(char c)
检查参数字符是否为可打印字符(不包括空格),值域0x21~0x7e,是则返回1,否则返回0
bit isprint(char c)
检查参数字符是否为可打印字符(包括空格),值域0x21~0x7e,是则返回1,否则返回0
int printf(const char *fmstr[,argument]...)
以第一个参数指向字符串制定的格式通过8051串行口输出数值和字符串,返回值为实际输出的字符数
int sprintf(char *s,const char *fmstr[,argument]...)
与printf功能相似,但数据是通过一个指针s送入内存缓冲区,并以ASCII码的形式存储
将串s2(包括结束符)复制到s1中,返回指向s1中第一个字符的指针
char *strncpy(char *s1, char *s2, int n)
与strcpy相似,但它只复制n个字符。如果s2的长度小于n,则s1串以0补齐到长度n
int strlen(char *s1)
返回串s1中的字符个数,不包括结尾的空字符
char strcmp(char *s1, char *s2)

第十四课 C51函数

第十四课 C51函数

第十四课 C51函数上一篇的最后一个例子中有用到函数,其实一直出现在例子中的main()也算是一个函数,只不过它比较特殊,编译时以它做为程序的开始段。

有了函数 C 语言就有了模块化的优点,一般功能较多的程序,会在编写程序时把每项单独的功能分成数个子程序模块,每个子程序就能用函数来实现。

函数还能被反复的调用,因此一些常用的函数能做成函数库以供在编写程序时直接调用,从而更好的实现模块化的设计,大大提高编程工作的效率。

一.函数定义通常 C 语言的编译器会自带标准的函数库,这些都是一些常用的函数,Keil uv 中也不例外。

标准函数已由编译器软件商编写定义,使用者直接调用就能了,而无需定义。

但是标准的函数不足以满足使用者的特殊要求,因此 C 语言允许使用者根据需要编写特定功能的函数,要调用它必须要先对其进行定义。

定义的模式如下:函数类型函数名称(形式参数表){函数体}函数类型是说明所定义函数返回值的类型。

返回值其实就是一个变量,只要按变量类型来定义函数类型就行了。

如函数不需要返回值函数类型能写作“void”表示该函数没有返回值。

注意的是函数体返回值的类型一定要和函数类型一致,不然会造成错误。

函数名称的定义在遵循 C 语言变量命名规则的同时,不能在同一程序中定义同名的函数这将会造成编译错误(同一程序中是允许有同名变量的,因为变量有全局和局部变量之分)。

形式参数是指调用函数时要传入到函数体内参与运算的变量,它能有一个、几个或没有,当不需要形式参数也就是无参函数,括号内能为空或写入“void”表示,但括号不能少。

函数体中能包含有局部变量的定义和程序语句,如函数要返回运算值则要使用 return 语句进行返回。

在函数的{}号中也能什么也不写,这就成了空函数,在一个程序项目中能写一些空函数,在以后的修改和升级中能方便的在这些空函数中进行功能扩充。

二.函数的调用函数定义好以后,要被其它函数调用了才能被执行。

C 语言的函数是能相互调用的,但在调用函数前,必须对函数的类型进行说明,就算是标准库函数也不例外。

C51_字符函数

C51_字符函数

1.1 函数名: STPCPY功 能: 拷贝一个字符串到另一个用 法: char *stpcpy(char *destin, char *source);程序例:#include <stdio.h>#include <string.h>int main(void){char string[10];char *str1 = "abcdefghi";stpcpy(string, str1);printf("%s\n", string);return 0;}1.2 函数名: STRCAT功 能: 字符串拼接函数用 法: char *strcat(char *destin, char *source);程序例:#include <string.h>#include <stdio.h>int main(void){char destination[25];char *blank = " ", *c = "C++", *Borland = "Borland"; strcpy(destination, Borland);strcat(destination, blank);strcat(destination, c);printf("%s\n", destination);return 0;}1.3 函数名: STRCHR功 能: 在一个串中查找给定字符的第一个匹配之处\用 法: char *strchr(char *str, char c);程序例:#include <string.h>#include <stdio.h>int main(void){char string[15];char *ptr, c = 'r';strcpy(string, "This is a string");ptr = strchr(string, c);if (ptr)printf("The character %c is at position: %d\n", c, ptr-string); elseprintf("The character was not found\n");return 0;}1.4函数名: STRCMP功 能: 串比较用 法: int strcmp(char *str1, char *str2);看Asic码,str1>str2,返回值 > 0;两串相等,返回0程序例:#include <string.h>#include <stdio.h>int main(void){char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";int ptr;ptr = strcmp(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");elseprintf("buffer 2 is less than buffer 1\n");ptr = strcmp(buf2, buf3);if (ptr > 0)printf("buffer 2 is greater than buffer 3\n");elseprintf("buffer 2 is less than buffer 3\n");return 0;}1.5 函数名: STRNCMPI功 能: 将一个串中的一部分与另一个串比较, 不管大小写用 法: int strncmpi(char *str1, char *str2, unsigned maxlen); 程序例:#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBB", *buf2 = "bbb";int ptr;ptr = strcmpi(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}1.6 函数名: STRCPY功 能: 串拷贝用 法: char *strcpy(char *str1, char *str2);程序例:#include <stdio.h>#include <string.h>int main(void){char string[10];char *str1 = "abcdefghi";strcpy(string, str1);printf("%s\n", string);return 0;}1.7 函数名: STRCSPN功 能: 在串中查找第一个给定字符集内容的段用 法: int strcspn(char *str1, char *str2);程序例:#include <stdio.h>#include <string.h>#include <alloc.h>int main(void){char *string1 = "1234567890";char *string2 = "747DC8";int length;length = strcspn(string1, string2);printf("Character where strings intersect is at position %d\n", length); return 0;}1.8 函数名: STRDUP功 能: 将串拷贝到新建的位置处用 法: char *strdup(char *str);程序例:#include <stdio.h>#include <string.h>#include <alloc.h>int main(void){char *dup_str, *string = "abcde";dup_str = strdup(string);printf("%s\n", dup_str);free(dup_str);return 0;}1.9 函数名: STRICMP功 能: 以大小写不敏感方式比较两个串用 法: int stricmp(char *str1, char *str2);程序例:#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBB", *buf2 = "bbb";int ptr;ptr = stricmp(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n"); if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}1.10 函数名: STRERROR功 能: 返回指向错误信息字符串的指针用 法: char *strerror(int errnum);程序例:#include <stdio.h>#include <errno.h>int main(void){char *buffer;buffer = strerror(errno);printf("Error: %s\n", buffer);return 0;}1.11 函数名: STRCMPI功 能: 将一个串与另一个比较, 不管大小写用 法: int strcmpi(char *str1, char *str2);程序例:#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBB", *buf2 = "bbb";int ptr;ptr = strcmpi(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}1.12 函数名: STRNCMP功 能: 串比较用 法: int strncmp(char *str1, char *str2, int maxlen); 程序例:#include <string.h>#include <stdio.h>int main(void){char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc"; int ptr;ptr = strncmp(buf2,buf1,3);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");elseprintf("buffer 2 is less than buffer 1\n");ptr = strncmp(buf2,buf3,3);if (ptr > 0)printf("buffer 2 is greater than buffer 3\n");elseprintf("buffer 2 is less than buffer 3\n");return(0);}1.13 函数名: STRNCMPI功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写 用 法: int strncmpi(char *str1, char *str2);程序例:#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBBccc", *buf2 = "bbbccc";int ptr;ptr = strncmpi(buf2,buf1,3);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}1.14 函数名: STRNCPY功 能: 串拷贝用 法: char *strncpy(char *destin, char *source, int maxlen); 程序例:#include <stdio.h>#include <string.h>int main(void){char string[10];char *str1 = "abcdefghi";strncpy(string, str1, 3);string[3] = '\0';printf("%s\n", string);return 0;}函数名: strnicmp功 能: 不注重大小写地比较两个串用 法: int strnicmp(char *str1, char *str2, unsigned maxlen); 程序例:#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBBccc", *buf2 = "bbbccc";int ptr;ptr = strnicmp(buf2, buf1, 3);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}函数名: strnset功 能: 将一个串中的所有字符都设为指定字符用 法: char *strnset(char *str, char ch, unsigned n);程序例:#include <stdio.h>#include <string.h>int main(void){char *string = "abcdefghijklmnopqrstuvwxyz";char letter = 'x';printf("string before strnset: %s\n", string);strnset(string, letter, 13);printf("string after strnset: %s\n", string);return 0;}函数名: strpbrk功 能: 在串中查找给定字符集中的字符用 法: char *strpbrk(char *str1, char *str2);程序例:#include <stdio.h>#include <string.h>int main(void){char *string1 = "abcdefghijklmnopqrstuvwxyz";char *string2 = "onm";char *ptr;ptr = strpbrk(string1, string2);if (ptr)printf("strpbrk found first character: %c\n", *ptr); elseprintf("strpbrk didn't find character in set\n");return 0;}函数名: strrchr功 能: 在串中查找指定字符的最后一个出现用 法: char *strrchr(char *str, char c);程序例:#include <string.h>#include <stdio.h>int main(void){char string[15];char *ptr, c = 'r';strcpy(string, "This is a string");ptr = strrchr(string, c);if (ptr)printf("The character %c is at position: %d\n", c, ptr-string); elseprintf("The character was not found\n");return 0;}函数名: strrev功 能: 串倒转用 法: char *strrev(char *str);程序例:#include <string.h>#include <stdio.h>int main(void){char *forward = "string";printf("Before strrev(): %s\n", forward);strrev(forward);printf("After strrev(): %s\n", forward);return 0;}函数名: strset功 能: 将一个串中的所有字符都设为指定字符用 法: char *strset(char *str, char c);程序例:#include <stdio.h>#include <string.h>int main(void){char string[10] = "123456789";char symbol = 'c';printf("Before strset(): %s\n", string);strset(string, symbol);printf("After strset(): %s\n", string);return 0;}函数名: strspn功 能: 在串中查找指定字符集的子集的第一次出现用 法: int strspn(char *str1, char *str2);程序例:#include <stdio.h>#include <string.h>#include <alloc.h>int main(void){char *string1 = "1234567890";char *string2 = "123DC8";int length;length = strspn(string1, string2);printf("Character where strings differ is at position %d\n", length); return 0;}1.15函数名: STRSTR功 能: 在串中查找指定字符串的第一次出现用 法: char *strstr(char *str1, char *str2);程序例:#include <stdio.h>#include <string.h>int main(void){char *str1 = "Borland International", *str2 = "nation", *ptr; ptr = strstr(str1, str2);printf("The substring is: %s\n", ptr);return 0;}函数名: strtod功 能: 将字符串转换为double型值用 法: double strtod(char *str, char **endptr);程序例:#include <stdio.h>#include <stdlib.h>int main(void){char input[80], *endptr;double value;printf("Enter a floating point number:");gets(input);value = strtod(input, &endptr);printf("The string is %s the number is %lf\n", input, value); return 0;}函数名: strtok功 能: 查找由在第二个串中指定的分界符分隔开的单词用 法: char *strtok(char *str1, char *str2);程序例:#include <string.h>#include <stdio.h>int main(void){char input[16] = "abc,d";char *p;/* strtok places a NULL terminatorin front of the token, if found */p = strtok(input, ",");if (p) printf("%s\n", p);/* A second call to strtok using a NULLas the first parameter returns a pointerto the character following the token */p = strtok(NULL, ",");if (p) printf("%s\n", p);return 0;}函数名: strtol功 能: 将串转换为长整数用 法: long strtol(char *str, char **endptr, int base); 程序例:#include <stdlib.h>#include <stdio.h>int main(void){char *string = "87654321", *endptr;long lnumber;/* strtol converts string to long integer */lnumber = strtol(string, &endptr, 10);printf("string = %s long = %ld\n", string, lnumber); return 0;}函数名: strupr功 能: 将串中的小写字母转换为大写字母用 法: char *strupr(char *str);程序例:#include <stdio.h>#include <string.h>int main(void){char *string = "abcdefghijklmnopqrstuvwxyz", *ptr; /* converts string to upper case characters */ptr = strupr(string);printf("%s\n", ptr);return 0;}函数名: swab功 能: 交换字节用 法: void swab (char *from, char *to, int nbytes); 程序例:#include <stdlib.h>#include <stdio.h>#include <string.h>char source[15] = "rFna koBlrna d";char target[15];int main(void){swab(source, target, strlen(source));printf("This is target: %s\n", target);return 0;}。

C语言中KeilC51库函数大全

C语言中KeilC51库函数大全

Keil C51库函‎数参考C51强大‎功能及其高‎效率的重要‎体现之一在‎于其丰富的‎可直接调用‎的库函数,多使用库函‎数使程序代‎码简单,结构清晰,易于调试和‎维护,下面介绍C‎51的库函‎数系统。

第一节本征库函数‎(intri‎nsic routi‎n e s)和非本征证‎库函数C51提供‎的本征函数‎是指编译时‎直接将固定‎的代码插入‎当前行,而不是用A‎C ALL和‎L CALL‎语句来实现‎,这样就大大‎提供了函数‎访问的效率‎,而非本征函‎数则必须由‎A CALL‎及LCAL‎L调用。

C51的本‎征库函数只‎有9个,数目虽少,但都非常有‎用,列如下:_crol‎_,_cror‎_:将char‎型变量循环‎向左(右)移动指定位‎数后返回_iror‎_,_irol‎_:将int型‎变量循环向‎左(右)移动指定位‎数后返回_lrol‎_,_lror‎_:将long‎型变量循环‎向左(右)移动指定位‎数后返回_nop_‎:相当于插入‎N OP_test‎b it_:相当于JB‎C bitva‎r测试该位‎变量并跳转‎同时清除。

_chkf‎l oat_‎:测试并返回‎源点数状态‎。

使用时,必须包含#inclu‎c le <intri‎n s.h>一行。

如不说明,下面谈到的‎库函数均指‎非本征库函‎数。

第二节几类重要库‎函数1. 专用寄存器‎i nclu‎d e文件例如803‎1、8051均‎为REG5‎1.h其中包括‎了所有80‎51的SF‎R及其位定‎义,一般系统都‎必须包括本‎文件。

2. 绝对地址i‎n clud‎e文件ab‎s acc.h该文件中实‎际只定义了‎几个宏,以确定各存‎储空间的绝‎对地址。

3. 动态内存分‎配函数,位于std‎l ib.h中4. 缓冲区处理‎函数位于“strin‎g.h”中其中包括拷‎贝比较移动‎等函数如:memcc‎p y memch‎r memcm‎p memcp‎y memmo‎v e memse‎t这样很方便‎地对缓冲区‎进行处理。

(完整版)Keilc51常用库函数汇总参考

(完整版)Keilc51常用库函数汇总参考

Keil c51函数参考一、数学函数〈math.h >(1)cabs原型:char cabs(char val);功能:cabs函数取val的绝对值。

参数:一字节数val.返回:cabs返回val的绝对值。

(2)abs原型:Int abs(int val);功能:求绝对值参数:val整型数返回:val的绝对值(3)labs原型:long labs(long val);功能:labs函数确定长整数val的绝对值.返回:val的绝对值。

(4)fabs原型:float fabs(float val);功能:fabs函数确定浮点数val的绝对值.参数:返回:fabs返回val的绝对值。

(5)sqrt原型:float sprt(float x);功能:sqrt函数计算x的平方根。

返回:sqrt函数返回x的正平方根。

(6)exp原型:float exp(float x);功能:exp函数计算自然对数中e的x次幂。

e≈2。

71828182845953581496,是无限循环小数。

返回:e x的值.(7)log原型:float log(float val);功能:log函数计算浮点数val的自然对数。

自然对数基数为e。

返回:val的浮点自然对数。

(8)log10原型:float log10(float val);功能:logl0函数计算浮点数val的常用对数.常用对数为基数10。

返回:val的浮点常用对数。

(9)sin参数:x必须在—65535~65535之间,或产生一个NaN错误。

返回:sin函数返回x的正弦.(10)cos原型:float cos(float x);功能:COS函数计算浮点数X的余弦.参数:X的值必须在-65535~65535之间,或产生一个NaN错误。

返回:COS函数返回X的余弦。

(11)tan原型:float tan(float x);功能:tan函数计算浮点数x的正切值.参数:x必须在—65535~65535之间,或错误值NaN.返回:tan函数返回x的正切。

C语言中KeilC51库函数大全

C语言中KeilC51库函数大全

C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。

第一节本征库函数(i n t r i n s i c r o u t i n es)和非本征证库函数C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL 和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。

C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入NOP_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。

_chkfloat_:测试并返回源点数状态。

使用时,必须包含#inclucle <>一行。

如不说明,下面谈到的库函数均指非本征库函数。

第二节几类重要库函数1. 专用寄存器include文件例如8031、8051均为其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。

2. 绝对地址include文件该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。

3. 动态内存分配函数,位于中4. 缓冲区处理函数位于“”中其中包括拷贝比较移动等函数如:memccpy memchr memcmp memcpy memmove memset这样很方便地对缓冲区进行处理。

5. 输入输出流函数,位于“”中流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的及源文件,然后在库中替换它们即可。

第三节K ei l C51库函数原型列表1.bit isalnum(char c);bit isalpha(char c);bit iscntrl(char c);bit isdigit(char c);bit isgraph(char c);bit islower(char c);bit isprint(char c);bit ispunct(char c);bit isspace(char c);bit isupper(char c);bit isxdigit(char c);bit toascii(char c);bit toint(char c);char tolower(char c);char __tolower(char c);char toupper(char c);char __toupper(char c);2.unsigned char _crol_(unsigned char c,unsigned char b);unsigned char _cror_(unsigned char c,unsigned char b);unsigned char _chkfloat_(float ual);unsigned int _irol_(unsigned int i,unsigned char b);unsigned int _iror_(unsigned int i,unsigned char b);unsigned long _irol_(unsigned long l,unsigned char b);unsigned long _iror_(unsigned long L,unsigned char b);void _nop_(void);bit _testbit_(bit b);3.char getchar(void);char _getkey(void);char *gets(char * string,int len);int printf(const char * fmtstr[,argument]…);char putchar(char c);int puts (const char * string);int scanf(const char * fmtstr.[,argument]…);int sprintf(char * buffer,const char *fmtstr[;argument]);int sscanf(char *buffer,const char * fmtstr[,argument]);char ungetchar(char c);void vprintf (const char *fmtstr,char * argptr);void vsprintf(char *buffer,const char * fmtstr,char * argptr);4.float atof(void * string);int atoi(void * string);long atol(void * string);void * calloc(unsigned int num,unsigned int len);void free(void xdata *p);void init_mempool(void *data *p,unsigned int size);void *malloc (unsigned int size);int rand(void);void *realloc (void xdata *p,unsigned int size);void srand (int seed);5.void *memccpy (void *dest,void *src,char c,int len);void *memchr (void *buf,char c,int len);char memcmp(void *buf1,void *buf2,int len);void *memcopy (void *dest,void *SRC,int len);void *memmove (void *dest,void *src,int len);void *memset (void *buf,char c,int len);char *strcat (char *dest,char *src);char *strchr (const char *string,char c);char strcmp (char *string1,char *string2);char *strcpy (char *dest,char *src);int strcspn(char *src,char * set);int strlen (char *src);char *strncat (char 8dest,char *src,int len);char strncmp(char *string1,char *string2,int len);char strncpy (char *dest,char *src,int len);char *strpbrk (char *string,char *set);int strpos (const char *string,char c);char *strrchr (const char *string,char c);char *strrpbrk (char *string,char *set);int strrpos (const char *string,char c);int strspn(char *string,char *set);系统分类:用户分类:标签:无标签来源:整理阅读全文(121) | 回复(0)发表于2009/6/23 13:41:24Hello位于\C51\excmples\Hello\目录,其功能是向串口输出“Hello,world”整个程序如下:#pragma DB OE CD#indule <>#include<>void main(void){SCOn=0x50;TMOD=0x20TH1=0xf3;Tri=1;TI=1;printf(“Hello,world \n”);while(1) { }}第一节u V i s i o n f o r W i n d o w s的使用步骤(1) file_new新建一个文件,输入如上内容或直接用目录下源文件。

c51中的intrins库函数

c51中的intrins库函数

c51中的intrins库函数流水灯循环左移右移,用C语言,要高效的话,只有用伪本征函数文件“intrins.h”中的_crol_(),_cror_()...等等函数,具体解释如蓝色文字,例如,要用P1口驱动8个共阳连接的二极管左循环一个一个地亮,语句是 P1=_crol_(a,1);//a储存被移位的字符。

_crol_ 字符循环左移_cror_ 字符循环右移_irol_ 整数循环左移_iror_ 整数循环右移_lrol_ 长整数循环左移_lror_ 长整数循环右移_nop_ 空操作8051 NOP 指令_testbit_ 测试并清零位8051 JBC 指令详解:函数名: _crol_,_irol_,_lrol_原型: unsigned char _crol_(unsigned char val,unsigned char n);unsigned int _irol_(unsigned int val,unsigned char n);unsigned int _lrol_(unsigned int val,unsigned char n);功能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。

例:#includemain(){unsigned int y;C-5 1 程序设计 37y=0x00ff;y=_irol_(y,4); /*y=0x0ff0*/}函数名: _cror_,_iror_,_lror_原型: unsigned char _cror_(unsigned char val,unsigned char n);unsigned int _iror_(unsigned int val,unsigned char n);unsigned int _lror_(unsigned int val,unsigned char n);功能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令相关,上面几个函数不同于参数类型。

C51的部分常用库函数_51单片机应用开发从入门到精通_[共3页]

C51的部分常用库函数_51单片机应用开发从入门到精通_[共3页]

第3章 MCS-51单片机软件开发环境
37 3.3.2 C51的部分常用库函数
本小节将简要介绍C51的部分常用库函数。

1.abs 函数
abs 函数的详细介绍如表3.14所示。

表3.14 abs 函数介绍 函 数 原 型
#include <math.h> int abs(int x); 函数参数
x :整型 函数功能 计算x 的绝对值 函数返回值
x 的绝对值,整型
说明:在math.h 头文件中,除了abs 函数之外,还有类似的acos 、asin 、atan 等函数。

2.ceil 函数
ceil 函数的详细介绍如表3.15所示。

表3.15 ceil 函数介绍 函 数 原 型
#include <math.h> float ceil(float x); 函数参数
x :浮点数 函数功能
求大于或等于x 的最小整数 函数返回值
大于或等于x 的最小整数,浮点数
说明:在math.h 头文件中,有类似ceil 的求小于或等于x 的最大整数的floor 函数。

3.getchar 函数
getchar 函数的详细介绍如表3.16所示。

表3.16 getchar 函数介绍 函 数 原 型
#include <stdio.h> char getchar(void); 函数参数
无 函数功能
从MCS-51单片机硬件的输入接口用_getkey 函数读入一个字符并且将此字符传递给putchar 函数用于回应 函数返回值
来自输入接口的下一个字符,整型,有ASCII 对应码值
4.gets 函数
gets 函数的详细介绍如表3.17所示。

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

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

单片机C语言(C51)常用库函数单片机C语言(C51)常用库函数在单片机编程中,使用库函数可以大大提高开发效率和简化代码结构。

C51是一种常用的单片机编程语言,它提供了许多常用的库函数,本文将介绍一些常用的C51库函数及其用法。

1. 字符串处理函数字符串处理是单片机编程中常见的任务。

C51提供了一些常用的字符串处理函数,如strcpy、strcat、strcmp等。

这些函数可以简化对字符串的操作。

- strcpy:用于将一个字符串复制到另一个字符串中。

用法示例:```char str1[20];char str2[20] = "Hello, world!";strcpy(str1, str2);```- strcat:用于将一个字符串追加到另一个字符串的末尾。

用法示例:```char str1[20] = "Hello,";char str2[20] = " world!";strcat(str1, str2);```- strcmp:用于比较两个字符串是否相等。

用法示例:```char str1[20] = "Hello";char str2[20] = "World";if (strcmp(str1, str2) == 0) {// 字符串相等的处理逻辑} else {// 字符串不相等的处理逻辑}```2. 数学函数单片机编程中常常需要进行数学运算,C51提供了一些常用的数学函数,如abs、sqrt、sin等。

这些函数可以帮助实现各种数学计算。

- abs:用于计算一个整数的绝对值。

用法示例:```int num = -10;int abs_num = abs(num);```- sqrt:用于计算一个浮点数的平方根。

用法示例:```float x = 16.0;float sqrt_x = sqrt(x);```- sin:用于计算一个角度的正弦值。

C51的函数

C51的函数
空操作函数的格式如下: void _nop_ (void) 该函数产生一个汇编指令NOP,执行它没有任何实质性操作,仅仅延时一 个机器周期。 3)位测试函数 位测试函数的格式如下: bit _testbit_ (bit x) 该函数的参数和返回值必须是位变量。该函数产生汇编指令JBC x,即判 断位x的值是0还是1,并将其值通过Cy标志返回。
函数
C51的函数
函数是C51语言的重要组成部分,是从标准C语言中继承 而来的。C51语言不限制程序中的函数个数。任何一个完整的 C51程序都必须有且仅有一个主函数(main函数),主函数是 C51程序的入口,所有的C51程序都是从主函数开始执行的。 为了有利于程序的模块化,促进资源的共享,C51语言允许用 户使用自定义函数。同时,C51提供了大量的功能强大的库函 数。这些库函数都是编译系统自带的已定义好的函数,用户 可以在程序中直接调用,而无须再自定义。合理使用库函数 可以简化程序设计、加快程序执行速度。
被调函数在主调函数中,以程序语句的方式出现。通常只完成一种 操作,不带函数会返回值。 该函数调用非常简单,即在main函数内调用函数func,用于输出一串字 符。 2.函数表达式
调用函数后,取得函数的返回值,用于其他操作。
1.3 C51的库函数
C51可以使用大量标准C语言的库函数,在用预处理器命令#include 包含相应的头文件后,程序员就可以在程序中使用这些函数。
unsigned int _lrol_ (unsigned int val, unsigned char n); /*左移无符号长整型*/
这些函数的第一个参数表示要进行位移的变量,第二个参数表示要移 动的位数。
右移函数与左移函数形式一致,只是函数名不同,它们分别是: unsigned char _cror_ (unsigned char val, unsigned char n);/*

C51程序的函数教程

C51程序的函数教程

C51程序的函数教程C51是一种基于哈佛体系结构的经典单片机架构,广泛应用于各种嵌入式系统中。

C51程序是指使用C语言编写的针对C51单片机的程序代码。

在本文中,我们将介绍C51程序中常用的几个重要函数,并提供一些实例来帮助读者更好地理解其用法。

1. 主函数(main函数)主函数是C程序的入口点,它是程序的起始位置。

在C51程序中,主函数的定义形式如下:```cvoid main(void)//程序代码```主函数中的程序代码将按照顺序执行,可以包括变量定义、函数调用、条件语句和循环语句等。

2.IO口输入输出函数IO口输入输出函数用于控制C51单片机的输入输出引脚。

C51单片机通常具有多个IO口,每个IO口可以配置为输入或输出。

以下是几个常用的IO口输入输出函数:- `void P0 = value;`:将value的值输出到P0口。

- `value = P0;`:将P0口的值读取到value变量。

- `void P1 = value;`:将value的值输出到P1口。

- `value = P1;`:将P1口的值读取到value变量。

3.延时函数延时函数用于在程序中添加延迟以实现时间控制。

C51单片机没有内置的延时函数,但我们可以使用定时器来实现延时。

以下是一个常用的延时函数示例:```cvoid delay(unsigned int ms)while (ms--)//使用定时器产生延时}```在上述延时函数中,使用了一个循环来实现延时。

具体的延时时间是通过循环次数来控制的,ms参数表示延时的毫秒数。

4.串口通信函数串口通信函数用于实现C51单片机与外部设备之间的串口通信。

串口通信可以用于数据传输和调试等应用。

以下是一个常用的串口通信函数示例:```cvoid UART_Init//配置串口参数void UART_SendChar(unsigned char value)//发送一个字符unsigned char UART_ReceiveChar//接收一个字符```在上述示例中,`UART_Init`函数用于配置串口的参数,`UART_SendChar`函数用于发送一个字符,而`UART_ReceiveChar`函数用于接收一个字符。

C51的常用库函数精品课件

C51的常用库函数精品课件
• char _toupper (char c); • 其中,c为待转换的小写字符。这其实是一个由宏
定义完成的操作,其功能是将字符参数c与常数 0xdf逐位进行与运算,从而将小写字符转换为大 写字符。
第19页,共85页。
12.2 字符串函数
• 字符串函数的原型声明包含在头文件STRING.H中。 在C51语言中,字符串应包括2个或多个字符,字 符串的结尾以空字符来表示。字符串函数通过接 受指针串来对字符串进行处理。常用的字符串函 数介绍如下。
• 十六进制数字检查函数用于转换形参字符为十六 进制数字,其函数原型如下:
• char toint (char c); • 其中,c为待转换字符。该函数将形参字符0~9、
a~f(大小写无关)转换为16进制数字。其中, 对于字符0~9,返回值为0H~9H,对于ASCII字符 a~f(大小写无关),返回值为0AH~0FH。
第28页,共85页。
12.2.9 字符串比较函数
• 字符串比较函数用于比较两个字符串的大小,其 函数原型如下:
• char strcmp(char *s1,char *s2); • 其中,s1和s2为待比较的字符串。该函数的功能
是比较字符串s1和s2,如果两者相等则返回0;如 果s1<s2,则返回一个负数;如果s1>s2,则返回 一个正数。
第21页,共85页。
12.2.2 指定长度的字符串比较函数
• 指定长度的字符串比较函数用于按照指定的长度 比较两个字符串的大小,其函数原型如下:
• char memcmp(void*s1, void*s2,int len); • 其中,s1和s2为输入字符串,len为比较的长度。
该函数的功能是逐个比较字符串sl和s2的前len个 字符,如果相等则返回0,如果字符串s1大于s2, 则返回一个正数,如果字符串s1小于s2,则返回 一个负数。如果两个字符串的长度小于len,该函 数仍将一直比较len个字符,这种情况下,有可能 结果是错误的。因此应该保证len不能超过最短字 符串的长度。

C51库函数

C51库函数

C51库函数C-51软件包的库包含标准的应用程序,每个函数都在相应的头文件(.h)中有原型声明。

如果使用库函数,必须在源程序中用预编译指令定义与该函数相关的头文件(包含了该函数的原型声明)。

例如:#include如果省掉头文件,编译器则期望标准的C参数类型,从而不能保证函数的正确执行。

3.1 CTYPE.H:字符函数在CTYPE.H头文件中包含下列一些库函数:函数名:isalpha原型:extern bit isalpha(char)功能:isalpha检查传入的字符是否在…A‟-…Z‟和…a‟-…z‟之间,如果为真返回值为1,否则为0。

函数名:isalnum原型:extern bit isalnum(char)功能:isalnum检查字符是否位于…A‟-…Z‟,…a‟-…z‟或…0‟-…9‟之间,为真返回值是1,否则为0。

函数名:iscntrl原型:extern bit iscntrl(char)功能:iscntrl检查字符是否位于0x00~0x1F之间或0x7F,为真返回值是1,否则为0。

函数名:isdigit原型:extern bit isdigit(char)功能:isdigit检查字符是否在…0‟-…9‟之间,为真返回值是1,否则为0。

函数名:isgraph原型:extern bit isgraph(char)功能:isgraph检查变量是否为可打印字符,可打印字符的值域为0x21~0x7E。

若为可打印,返回值为1,否则为0。

函数名:isprint原型:extern bit isprint(char)功能:除与isgraph相同外,还接受空格字符(0X20)。

函数名:ispunct原型:extern bit ispunct(char)功能:ispunct检查字符是否位为标点或空格。

如果该字符是个空格或32个标点和格式字符之一(假定使用ASCII字符集中128个标准字符),则返回1,否则返回0。

C51函数库函数功能表

C51函数库函数功能表

一、CTYPE.H1、extern bit isalpha (unsigned char);检查参数字符是否为英文字符,是则返回1,否则返回02、extern bit isalnum (unsigned char);检查参数字符是否为字母或者数字字符,是则返回1,否则返回03、extern bit iscntrl (unsigned char);检查参数值是否在0x00~0x7F之间或者等于0x7F,是则返回1,否则返回04、extern bit isdigit (unsigned char);检查参数值是否为数字字符,是则返回1,否则返回05、extern bit isgraph (unsigned char);检查参数是否为可打印字符(0x21~0x7E),是则返回1,否则返回06、extern bit isprint (unsigned char);检查参数是否为可打印字符,包括空格符,其余与isgraph相同7、extern bit ispunct (unsigned char);检查参数是否为标点、空格或者格式字符,是则返回1,否则返回08、extern bit islower (unsigned char);检查参数是否为小写字母,是则返回1,否则返回09、extern bit isupper (unsigned char);检查参数是否为大写字母,是则返回1,否则返回010、extern bit isspace (unsigned char);检查参数是否为下列之一:空格、制表符、回车、换行、垂直制表符和送纸符号,是则返回1,否则返回011、extern bit isxdigit (unsigned char);检查参数是否为16进制数字字符,是则返回1,否则返回0 12、extern unsigned char tolower (unsigned char);将大写字符转换成小写形式,如果字符不在(A~Z)之间,则直接返回该字符13、extern unsigned char toupper (unsigned char);将小写字符转换成大写形式,如果字符不在(a~z)之间,则直接返回该字符14、extern unsigned char toint (unsigned char);将ASCII字符0~9,A~F(不分大小写)转换成16进制的数字,返回转换后的16进制数字二、STDIO.H#ifndef EOF#define EOF -1#endif#ifndef NULL#define NULL ((void *) 0)#endif#ifndef _SIZE_T#define _SIZE_Ttypedef unsigned int size_t;#endif1、extern char _getkey (void);从单片机串口读入一个字符,然后等待字符输入2、extern char getchar (void);该函数使用_getkey()函数从串口读入字符,并将读入的字符马上给putchar()函数输出3、extern char ungetchar (char);将输入的字符回送输入缓冲区,成功返回char,否则返回EOF 4、extern char putchar (char);通过单片机的串口输出字符,与_getkey()函数一样5、extern int printf (const char *, ...);以一定的格式通过单片机串行口输出数值和字符串,返回值为实际输出的字符数6、extern int sprintf (char *, const char *, ...);通过一个指针S将数据送人可寻址的内存缓冲区,并以ASCII 码的形式存储7、extern int vprintf (const char *, char *);8、extern int vsprintf (char *, const char *, char *);9、extern char *gets (char *, int n);10、extern int scanf (const char *, ...);11、extern int sscanf (char *, const char *, ...);12、extern int puts (const char *);三、string.h1、extern char *strcat (char *s1, char *s2);2、extern char *strncat (char *s1, char *s2, int n);3、extern char strcmp (char *s1, char *s2);4、extern char strncmp (char *s1, char *s2, int n);5、extern char *strcpy (char *s1, char *s2);6、extern char *strncpy (char *s1, char *s2, int n);7、extern int strlen (char *);8、extern char *strchr (const char *s, char c);9、extern int strpos (const char *s, char c);10、extern char *strrchr (const char *s, char c);11、extern int strrpos (const char *s, char c);12、extern int strspn (char *s, char *set);13、extern int strcspn (char *s, char *set);14、extern char *strpbrk (char *s, char *set);15、extern char *strrpbrk (char *s, char *set);16、extern char *strstr (char *s, char *sub);17、extern char *strtok (char *str, const char *set);18、extern char memcmp (void *s1, void *s2, int n);19、extern void *memcpy (void *s1, void *s2, int n);20、extern void *memchr (void *s, char val, int n);21、extern void *memccpy (void *s1, void *s2, char val, int n);22、extern void *memmove (void *s1, void *s2, int n);23、extern void *memset (void *s, char val, int n);四、stdlib.h1、extern int abs (int val);2、extern long labs (long val);3、extern float atof (char *s1);将字符串转换成浮点数4、extern long atol (char *s1);将字符串转换成长整型5、extern int atoi (char *s1);将字符串转换成整型6、extern int rand ();取一个0~32767之间的随机数7、extern void srand (int);根据种子seed的值取随机数8、extern float strtod (char *, char **);9、extern long strtol (char *, char **, unsigned char);将字符串转换成长整数10、extern unsigned long strtoul (char *, char **, unsigned char);将字符串转换成无符号长整数#define _MALLOC_MEM_ xdata11、extern void init_mempool (void _MALLOC_MEM_ *p, unsigned int size);初始化内存池12、extern void _MALLOC_MEM_ *malloc (unsigned int size);申请一块大小为size的内存13、extern void free (void _MALLOC_MEM_ *p);释放一块被申请的内存14、extern void _MALLOC_MEM_ *realloc (void _MALLOC_MEM_ *p, unsigned int size);重新申请一块大小为size的内存15、extern void _MALLOC_MEM_ *calloc (unsigned int size, unsigned int len);申请有size个元素的,每个元素的大小为len的数组五、math.h1、extern char cabs (char val);计算并返回val的绝对值,为char型2、extern int abs (int val);计算并返回val的绝对值,为int型3、extern long labs (long val);计算并返回val的绝对值,为long型4、extern float fabs (float val);计算并返回val的绝对值,为float型5、extern float sqrt (float val);返回x的正平方根6、extern float exp (float val);计算e为底x的幂并返回计算结果7、extern float log (float val);返回自然对数8、extern float log10 (float val);返回以10为底的对数9、extern float sin (float val);10、extern float cos (float val);11、extern float tan (float val);以上3个函数返回相应的三角函数值,所有的变量范围在-π/2 ~ +π/2之间,否则会返回错误12、extern float asin (float val);13、extern float acos (float val);14、extern float atan (float val);返回相应的反三角函数值,值域为-π/2 ~ +π/215、extern float sinh (float val);16、extern float cosh (float val);17、extern float tanh (float val);返回x的相应的双曲函数值18、extern float atan2 (float y, float x);返回x/y的反正切值,值域为-π~ +π19、extern float ceil (float val);返回一个不小于val的最小整数(作为浮点数)20、extern float floor (float val);返回一个不大于val最大整数(作为浮点型)21、extern float modf (float val, float *n);将浮点数val分为整数和小数两部分,两者的符号与val相同,整数部分放入*n,小数部分作为返回值22、extern float fmod (float x, float y);返回x/y的余数23、extern float pow (float x, float y);返回x的y次方六、absacc.h以下4个宏定义,对单片机的进行绝对地址访问,可以作为字节寻址,CBYTE寻址code区,DBYTE寻址data区,PBYTE寻址分页xdata区,XBYTE寻址xdata区1、#define CBYTE ((unsigned char volatile code *) 0)2、#define DBYTE ((unsigned char volatile data *) 0)3、#define PBYTE ((unsigned char volatile pdata *) 0)4、#define XBYTE ((unsigned char volatile xdata *) 0)以上4个宏定义与上面4个功能类似,只是数据类型是unsigned int型5、#define CWORD ((unsigned int volatile code *) 0)6、#define DWORD ((unsigned int volatile data *) 0)7、#define PWORD ((unsigned int volatile pdata *) 0)8、#define XWORD ((unsigned int volatile xdata *) 0)七、intrins.h1、extern void _nop_ (void);空操作指令,需要一个指令周期2、extern bit _testbit_ (bit);该函数对字节中的一个比特进行测试,如果该比特为1则返回1,并置该位为0,否则返回03、extern unsigned char _cror_ (unsigned char, unsigned char);4、extern unsigned int _iror_ (unsigned int, unsigned char);5、extern unsigned long _lror_ (unsigned long, unsigned char);将第一个参数循环右移n位,3个函数的参数和返回值类型不同6、extern unsigned char _crol_ (unsigned char, unsigned char);7、extern unsigned int _irol_ (unsigned int, unsigned char);8、extern unsigned long _lrol_ (unsigned long, unsigned char);将第一个参数循环左移n位,3个函数的不同在于参数和返回值的类型9、extern unsigned char _chkfloat_(float);10、extern void _push_ (unsigned char _sfr);11、extern void _pop_ (unsigned char _sfr);八、setjmp.htypedef char jmp_buf[_JBLEN];1、extern volatile int setjmp (jmp_buf);2、extern volatile void longjmp (jmp_buf, int);。

c51中的intrins.h库函数

c51中的intrins.h库函数
for(c=0;c<30000;c++);/*延时,实践表明当小于值大于等于32768(刚好是unsigned int最大值65535的一半)时 ,此句指令执行时间大于1秒*/ }

程序附加说明:
1.关于自定义下载,略微解释下原理,电脑中STC-ISP软件向单片机发送自定义下载命令后,引起单片机的串口中断 ,并进入中断子程序:判断是否为设定“自定义下载命令”-延时1秒-执行重启命令“ISP_CONTR=0x60;”(即MOV I SP_CONTR(0XE7),0X60),单片机重启并先运行ISP监视程序,电脑STC-ISP软件便把.hex文件数据下到STC单片机中去 。

void main(void) { unsigned int a,c; unsigned char b; TMOD=0x20; TH1=0xf4;//波特率4800 TL1=0XF4; TR1=1; SCON=0XF8; PCON=0X80; EA=1; ES=1; RI=0; b=0xfe; while(1) { P1=b; b=_crol_(b,1);//字符中的位左移1位(伪本征函数)
函数名: _cror_,_iror_,_lror_ 原 型: unsigned char _cror_(unsigned char val,unsigned char n); unsigned int _iror_(unsigned int val,unsigned char n); unsigned int _lror_(unsigned int val,unsigned char n); 功 能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令 相关,上面几个函数不同于参数类型。 例: #include main() { unsigned int y; y=0x0ff00; y=_iror_(y,4); /*y=0x0ff0*/ }
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

_chkfloat_:函数定义:unsigned char _chkfloat_ ( float val); /* number to check */函数功能:_chkfloat_函数检查浮点数val 的类型。

返回值:_chkfloat_函数返回浮点数val 的类型。

返回值意义0 标准浮点数1 浮点02 +INF 正溢出3 -INF 负溢出4 NaN 非数函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_chkfloat_函数函数定义:unsigned char _chkfloat_(float val);返回值:Return Value Meaning0 Standard floating-point number.1 Floating-point value 0.2 +INF (positive overflow).3 -INF (negative overflow).4 NaN (Not a Number) error status.用P1指示返回值*/unsigned char f[4]={0xff,0xff,0xff,0xff};void delay(unsigned int time){while(time--);}void main(){P2=~_chkfloat_(1.2455); //Standard floating-point number.delay(50000);P2=~_chkfloat_(0.00); //Floating-point value 0.delay(50000);P2=~_chkfloat_(1000000000000000000000000000000000000000000000000000000000000000.0000 000000); //+INF (positive overflow).delay(50000);P2=~_chkfloat_(-1000000000000000000000000000000000000000000000000000000000000000.000 0000000); //-INF (negative overflow).delay(50000);P2=~_chkfloat_(*((float *)f)); //NaN (Not a Number) error status.while(1);_crol_:函数定义:unsigned char _crol_ ( unsigned char c, /* character to rotate left */unsigned char b); /* bit positions to rotate */ 函数功能:_crol_函数将一个字节c循环左移b位。

返回值:_crol函数返回将c循环左移b位后的值。

函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_crol_函数函数定义:unsigned char _crol_(unsigned char c,unsigned char b); 返回值:_crol_函数返回将c循环左移b位后的值。

用P1指示返回值*/void delay(unsigned int time){while(time--);}void main()unsigned char i;i=0;P2=~0x01;for(i=0;i<8;i++){P2=_crol_(P2,1);delay(50000);}while(1);}_cror_:函数定义:unsigned char _cror_ ( unsigned char c, /* character to rotate right */unsigned char b); /* bit positions to rotate */ 函数功能:_cror_函数将一个字节c循环右移b位。

返回值:_cror_函数返回将c循环右移b位后的值。

函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_cror_函数函数定义:unsigned char _cror_(unsigned char c,unsigned char b); 返回值:_cror_函数返回将c循环右移b位后的值。

用P1指示返回值*/void delay(unsigned int time){while(time--);}void main(){unsigned char i;i=0;P2=~0x80;for(i=0;i<8;i++){P2=_cror_(P2,1);delay(50000);}while(1);}_getkey:函数定义:char _getkey (void);函数功能:等待接收串口的一个字节的数据。

返回值:从串口接收到的字节。

函数测试:#include <reg51.h>#include <stdio.h>/*本实验测试标准输入输出库中的_getkey函数函数定义:char _getkey (void);返回值:从串口接收到的字节。

用P1指示返回值*/void delay(unsigned int time){while(time--);}void UART_Init() /* 通讯有关参数初始化*/{PCON&=0x7f;TH1=0xfd; /* T1 use sio */TL1=0xfd; /* 选择通讯速率:0=1200,1=2400,2=4800,3=9600,4=19.2k */ /* T1 use sio */TMOD=0x21; /* T1=MODE2,sio; T0=MODE1,16bit,use time */PS=1; /* SIO int high 优先级*/EA=1;SM0=0;SM1=1; /* SM0=0 SM1=1,mode1,10bit */ SM2=0; /* data int,无校验(TB8=bit_duble偶) */TR1=1;REN=1;RI=0;TI=0;ES=1;}void main(){delay(50000);UART_Init();P2=0xff;while(1){P2=_getkey();}}_irol_:函数定义:unsigned int _irol_ ( unsigned int i, /* integer to rotate left */unsigned char b); /* bit positions to rotate */对整型数i循环左移b位。

返回值:i循环左移b位后的值。

函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_irol_函数函数定义:unsigned int _irol_(unsigned int i,unsigned char b); 返回值:i循环左移b位后的值。

*/unsigned int test;void main(){test=0xa5a5;test=_irol_(test,3); //test=0x2d2dwhile(1);}_iror_:函数定义:unsigned int _iror_ ( unsigned int i, /* integer to rotate right */unsigned char b); /* bit positions to rotate */对整型数i循环右移b位。

返回值:i循环右移b位后的值。

函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_iror_函数函数定义:unsigned int _iror_(unsigned int i,unsigned char b);返回值:i循环右移b位后的值。

*/unsigned int test;void main(){test=0xa5a5;test=_iror_(test,3); //test=0xb4b4while(1);}_lrol_:函数定义:unsigned long _lrol_ ( unsigned long i, /* 32-bit integer to rotate left */unsigned char b); /* bit positions to rotate */对长整型数i循环左移b位。

返回值:i循环左移b位后的值。

函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_lrol_函数函数定义:unsigned long _lrol_(unsigned long i,unsigned char b);返回值:i循环左移b位后的值。

*/unsigned long test;void main(){test=0xa5a5a5a5;test=_lrol_(test,3); //test=0x2d2d2d2dwhile(1);}_lror_:函数定义:unsigned long _lror_ ( unsigned long i, /* 32-bit integer to rotate right */unsigned char b); /* bit positions to rotate */函数功能:对长整型数i循环右移b位。

返回值:i循环右移b位后的值。

函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_lror_函数函数定义:unsigned long _lror_(unsigned long i,unsigned char b); 返回值:i循环左移b位后的值。

*/unsigned long test;void main(){test=0xa5a5a5a5;test=_lror_(test,3); //test=0xb4b4b4b4while(1);}_nop_:函数定义:void _nop_ (void);函数功能:等同于汇编里的nop指令,用来实现一个机器周期的延时。

返回值:函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_nop_函数函数定义:void _nop_ (void);返回值:无*/void main(){P1=0x00;_nop_(); //如果是22.1184M的晶振,12分频后为1.8432M,机器周期为543ns _nop_();_nop_();P1=0xff;while(1);}_pop_:函数定义:void _pop_ ( unsigned char sfr); /* SFR to POP from the stack */函数功能:在代码中插入一个POP指令,将一个SFR推出返回值:函数测试:#include <intrins.h>#include <REG52.H>sfr XXX = 0xFF;void main (void){_push_(XXX); //main函数就是一个栈,参数就是压栈进入,_push_用来将一个SFR压入此栈XXX = 1; //对压入的SFR进行赋值XXX = 2;XXX = 3;_pop_(XXX); //将SFR推出此栈,其值被释放while (1);}_push_:函数定义:void _push_ ( unsigned char sfr); /* SFR to PUSH onto the stack */函数功能:在代码中插入一个PUSH指令,将一个SFR压入无函数测试:参照_pop_的测试程序。

相关文档
最新文档