求一本51单片机 库函数手册的pdf~
发布网友
发布时间:2022-05-30 01:05
我来回答
共2个回答
热心网友
时间:2023-09-12 01:06
Cx51库函数
单片机 2010-04-04 15:14:39 阅读102 评论0 字号:大中小
简单列出几个库函数
数学函数MATH.H
函数原型: int abs(int val);
Char cabs(char val);
Float fabs(float val);
Long labs(long val);
再入属性: reentrant
功能: abs计算并返回val的绝对值,如果val为正,则不改变就返回,如果为负,则返回相反数。其余三
个函数除了变量和返回值类型不同之外,其他的功能完全相同。
函数原型: float exp(float x);
float log(float x);
float log10(float x);
再入属性: non-reentrant
功能: exp计算并返回浮点数x的指数函数,log计算并返回浮点数x的自然对数(自然对数以e为底,
e=2.718282),log10计算并返回浮点数x以10为底的x的对数。
函数原型: float sqrt(float x);
再入属性: non-reentrant
功能: sqrt计算并返回x的正平方根。
函数原型: float cos(float x);
float sin(float x);
float tan(float x);
再入属性: non-reentrant
功能: cos计算并返回x的余弦值,sin计算并返回x的正弦值,tan计算并返回x的正切值,所有函数的变量
范围都是-pi/2~+pi/2 ,变量的值必须在正负65535之间,否则产生一个NaN错误。
函数原型: float acos(float x);
float asin(float x);
float atan(float x);
float atan2(float y,float x);
再入属性: non-reentrant
功能: acos计算并返回x的反余弦值,asin计算并返回x的反正弦值,atan计算并返回x的反正切值,它们
的值域-pi/2~pi/2。atan2计算并返回y/x的反正切值,其值域为-pi~pi。
函数原型: float ceil(float x);
再入属性: non-reentrant
功能: ceil计算并返回一个不小于x的最小整数(作为浮点数)。
函数原型: float floor(float x);
再入属性: non-reentrant
功能: floor计算并返回一个不大于x的最大整数(作为符点数)。
函数原型: float modf(float x,float *ip);
再入属性: non-reentrant
功能: modf将浮点数x分成整数和小数两部分,两者都含有x相同的符号,整数部分放入*ip,小数部分作
为返回值。
函数原型: float pow(float x,float y);
再入属性: non-reentrant
功能: pow计算并返回x^y的值,如果x不等 于0而y=0,则返回1.当x=0且y<=0或当x<0且y不是整数时则返
回NaN.
绝对地址访问ABSACC.H
进行绝对地址访问的宏定义包含在头文件ABSACC.H
函数原型: #define CBYTE((unsigned char volatile code *)0)
#define DBYTE((unsigned char volatile idata *)0)
#define PBYTE((unsigned char volatile pdata *)0)
#define XBYTE((unsigned char volatile xdata *)0)
再入属性: reentrant
功能: 上述宏定义用来对8051系列单片机的存储器空间进行绝对地址访问,可以作字节寻址。CBYTE寻址
CODE区 ,DBYTE寻址DATA区,PBYTE寻址分页XDATA区(采用MOVX @R0指令),XBYTE寻址XDATA区(采用MOVX @DPTR
)指令。例如,下列语句在外部存储器区域方向地址0x0002:
xval=XBYTE[0x0002];
XBYTE[0x0002]=0x20;
通过使用#define预处理命令,可采用其他符号定义绝对地址,例如#define XIO XBYTE[0x1000]
即将符号XIO定义成外部数据存储器地址0x1000。
函数原型: #define CWORD((unsigned int volatile code *)0)
#define DWORD((unsigned int volatile idata *)0)
#define PWORD((unsigned int volatile pdata *)0)
#define XWORD((unsigned int volatile xdata *)0)
再入属性: reentrant
功能: 这个宏与前面一个宏相似,只是它们指定的数据类型为unsigned int。通过灵活运用不同的数据类
型,8051的所有存储器空间都可以进行访问。例如,下列语句在外部存储器区域访问地址0x0004:
xval=XWORD[0x0002];
XWORD[0x0002]=0x0002;
注意,使用宏CWORD、DWORD、PWORD、XWORD时,实际存储器地址应为2*sizeof(unsigned int)。
函数原型: #define FVAR(object,addr)(*((object volatile far *)((addr)+0x10000L)))
#define FCFVAR(object,addr)(*((object const far *)((addr)+0x810000L)))
再入属性: reentrant
功能: 宏FVAR和FCVAR用于访问far 和const far 存储器区域。FVAR用于访问far空间(存储类为HDATA)
,FCVAR用于访问const far 空间(存储类为HCONST)。
例子: #define IOVL FVAR(long,0x14FFE) //long at HDATA addr 0x14FFE
var = IOVAL; //read
IOVAL = 0x10; //write
var = FCVAR(int,0x24002) //read int from HCONST address 0x24002
注意:绝对地址目标不能穿过64KB的段边界,例如不能在地址0xFFFE访问一个long变量。
函数原型: #define FARRAY(object,base)((object volatile far *) ((base)+0x10000L))
#define FCARRAY(object,base)((object const far *) ((base)+0x810000L))
功能: 宏FARRAY和FCARRAY用于访问位于far 和 const far 存储区的数组类型目标,FARRAY用于访问far
空间(存储类为HDATA),FCARRAY用于访问const far空间(存储类为HCONST)。
内部函数INTRINS.H
内部函数的原型声明包含在头文件INTRINS.H
函数原型: unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned long _irol_(unsigned long val,unsigned char n);
再入属性: reentrant/intrinsc
功能: _crol_,_irol_,和_lrol_将变量val循环左移n位,它们与8051单片机的“RL A”指令相关。这三个
函数的不同之处在于参数和返回值的类型不同。
函数原型: unsigned char _cror_(unsigned char val,unsigned char n);
unsigned int _iror_(unsigned int val,unsigned char n);
unsigned long _lror_(unsigned long val,unsigned char n);
再入属性: reentrant/intrinsc
功能: _cror_,_iror_和_lror_将变量val循环右移n位,它们与8051单片机的“RR A”指令相关。这三个
函数的不同之处在于参数和返回值类型不同。
函数原型: void _nop_(void);
再入属性: reentrant/intrinsc
功能: _nop_产生一个8051单片机的nop指令,该函数可用于Cx51程序中的时间延时。Cx51编译器对程序中
调用_nop_函数的地方,直接产生一条NOP指令。
函数原型: bit _testbit_(bit x);
再入属性: reentrant/intrinsc
功能: _testbit_产生一条8051单片机的JBC指令,该函数对字节中的一位进行测试。如果该位置位则函数
返回1,则函数返回1,同时将该位复位为0,否则返回0.
_testbit_函数只能用于可直接寻址的位,不允许在表达式中使用。
变量参数表 STDARG.H
Cx51编译器允许函数的参数个数和类型是可变的,可使用简略形式(记号为“...”),这时参数表的长度和参数的
数据类型在定义时是未知的。头文件stdarg.h中定义了处理函数参数表,利用这些宏,使程序可识别和处理变化的参
数。在定义具有可变参数的函数时,必须声明一个va_list型的指数,用va_start将该指针初始化为指数该参数表,
用va_arg访问表中不同类型的参数,对参数的访问结束后,用va_end 关闭参数表。
函数原型: typedef char * va_list
功能: va_list被定义成指向参数表的指针
函数原型: type va_arg(ap,type)
再入属性: reentrant
功能: 宏va_arg从ap指向的可变长度参数表中检索type类型的值。对于每一个参数可以只调用一次宏,并
且调用宏时必须按照表中参数的次序进行。对va_arg的第一次调用将返回在va_start宏中指定的v参数后的第一个参
数。继续调用va_arg将返回剩下的后续参数。
函数原型: void va_start(ap,v)
再入属性: reentrant
功能: 当用在一个具有可变长度表的函数中时,宏va_start初始化ap参数,为以后的va_arg和va_end宏所
使用参数v必须是直接位于省略号所指定的初选参数函数参数名。在使用宏va_arg进行存取前,必须调用函数来初始
化可变参数表。
函数原型: void va_end(ap)
再入属性: reentrant
功能: 该宏用于终止在va_start宏中已被初始化的可变长度参数的指针ap。关闭参数表,结束对可变参数
表的访问。
全程跳转SETJMP.H
头文件的SETJMP.H中的函数可用于正常的系列函数调用和函数结果,它允许从深层函数调用中直接返回。
函数原型: #define _JBLEN 7
typedef char jmp_buf[_jblen]
功能: 规定由setjmp和longjmp所使用的用于保存和恢复程序环境的缓冲区
函数原型: int setjmp(jmp_buf env);
再入属性: reentrant
功能: setjmp将程序执行的当前环境状态信息存入变量env之中,以便嵌套调用的低层函数使用longjmp将
执行控制权直接返回到调用setjmp语句的下一条语句。当直接调用setjmp时返回值为0,当从longjmp调用时返回非0
值。
函数原型: void long jmp(jmp_buf env,int retval);
再入属性: reentrant
功能: longjmp恢复先前调用setjmp时存在env中的状态。程序从调用setjmp语句的下一条语句执行。参数
val为调用setjmp的返回值。longjmp和setjmp函数提供了一种执行非局部goto的方法,它们一般用于将执行控制传递
给先前被调用的程序中的错误处理或恢复代码。只有用volatile属性声明的局部变量和函数才能恢复。
计算结构体成员的偏移量 STDDEF.H
头文件STDDEF.H包含了一个计算结构体成员偏移量的宏。
函数原型: int offsetof(structure,member);
功能: offsetof宏计算结构体成员member从结构体structure 开始位置的偏移量,并返回字节形式的偏移
量值。
热心网友
时间:2023-09-12 01:06
你打开keil软件,在帮助里有很多的库函数