IT技术互动交流平台

Keil C51库函数及学习附录

作者:Augusdi  发布日期:2012-11-28 11:32:37

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

第一节 本征库函数(intrinsic routines)和非本征证库函数

C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。

C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:

_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回

_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回

_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回

_nop_: 相当于插入NOP

_testbit_: 相当于JBCbitvar测试该位变量并跳转同时清除。

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

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

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

第二节 几类重要库函数

1. 专用寄存器include文件
例如8031、8051均为REG51.h其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。

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

3. 动态内存分配函数,位于stdlib.h中
 

4. 缓冲区处理函数位于“string.h”中
其中包括拷贝比较移动等函数如:

memccpymemchr memcmp memcpy memmove memset

这样很方便地对缓冲区进行处理。

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

第三节 Keil C51库函数原型列表

1. CTYPE.H
       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. INTRINS.H
       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. STDIO.H
   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. STDLIB.H
       float atof(void * string);

       int atoi(void * string);

       long atol(void * string);

       void * calloc(unsigned intnum,unsigned int len);

       void free(void xdata *p);

       void init_mempool(void*data *p,unsigned int size);

       void *malloc (unsigned intsize);

       int rand(void);

       void *realloc (void xdata*p,unsigned int size);

       void srand (int seed);

5. STRING.H
       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 (char8dest,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);

 


附录一 C51中的关键字

关键字

用 途

说 明

auto

存储种类说明

用以说明局部变量,缺省值为此

break

程序语句

退出最内层循环

case

程序语句

switch语句中的选择项

char

数据类型说明

单字节整型数或字符型数据

const

存储类型说明

在程序执行过程中不可更改的常量值

continue

程序语句

转向下一次循环

default

程序语句

switch语句中的失败选择项

do

程序语句

构成do..while循环结构

double

数据类型说明

双精度浮点数

else

程序语句

构成if..else选择结构

enum

数据类型说明

枚举

extern

存储种类说明

在其他程序模块中说明了的全局变量

float

数据类型说明

单精度浮点数

for

程序语句

构成for循环结构

goto

程序语句

构成goto转移结构

if

程序语句

构成if..else选择结构

int

数据类型说明

基本整型数

long

数据类型说明

长整型数

register

存储种类说明

使用CPU内部寄存的变量

return

程序语句

函数返回

short

数据类型说明

短整型数

signed

数据类型说明

有符号数,二进制数据的最高位为符号位

sizeof

运算符

计算表达式或数据类型的字节数

static

存储种类说明

静态变量

struct

数据类型说明

结构类型数据

swicth

程序语句

构成switch选择结构

typedef

数据类型说明

重新进行数据类型定义

union

数据类型说明

联合类型数据

unsigned

数据类型说明

无符号数数据

void

数据类型说明

无类型数据

volatile

数据类型说明

该变量在程序执行中可被隐含地改变

while

程序语句

构成while和do..while循环结构

附表1-1 ANSIC标准关键字

关键字

用 途

说 明

bit

位标量声明

声明一个位标量或位类型的函数

sbit

位标量声明

声明一个可位寻址变量

sfr

特殊功能寄存器声明

声明一个特殊功能寄存器

sfr16

特殊功能寄存器声明

声明一个16位的特殊功能寄存器

data

存储器类型说明

直接寻址的内部数据存储器

bdata

存储器类型说明

可位寻址的内部数据存储器

idata

存储器类型说明

间接寻址的内部数据存储器

pdata

存储器类型说明

分页寻址的外部数据存储器

xdata

存储器类型说明

外部数据存储器

code

存储器类型说明

程序存储器

interrupt

中断函数说明

定义一个中断函数

reentrant

再入函数说明

定义一个再入函数

using

寄存器组定义

定义芯片的工作寄存器

附表1-2 C51编译器的扩展关键字

附录二 AT89C51特殊功能寄存器列表(适用于同一架构的芯片)

符 号

地 址

注 释

*ACC

E0H

累加器

*B

F0H

乘法寄存器

*PSW

D0H

程序状态字

SP

81H

堆栈指针

DPL

82H

数据存储器指针低8位

DPH

83H

数据存储器指针高8位

*IE

A8H

中断允许控制器

*IP

D8H

中断优先控制器

*P0

80H

端口0

*P1

90H

端口1

*P2

A0H

端口2

*P3

B0H

端口3

PCON

87H

电源控制及波特率选择

*SCON

98H

串行口控制器

SBUF

99H

串行数据缓冲器

*TCON

88H

定时器控制

TMOD

89H

定时器方式选择

TL0

8AH

定时器0低8位

TL1

8BH

定时器1低8位

TH0

8CH

定时器0低8位

TH1

8DH

定时器1高8位

带*号的特殊功能寄存器都是可以位寻址的寄存器

 

附录三 运算符优先级和结合性

级 别

类 别

名 称

运算符

结合性

 

1

强制转换、数组、

结构、联合

强制类型转换

( )

 

右结合

下标

[ ]

存取结构或联合成员

->或.

 

 

 

 

2

逻 辑

逻辑非

!

 

 

 

 

左结合

字 位

按位取反

~

增 量

加一

++

减 量

减一

--

指 针

取地址

&

取内容

*

算 术

单目减

-

长度计算

长度计算

sizeof

 

3

 

算 术

*

 

 

 

 

 

 

 

 

右结合

/

取模

%

4

算术和指针运算

+

-

5

字 位

左移

<< 

右移

>> 

 

6

 

 

 

关系

大于等于

>=

大于

小于等于

<=

小于

7

恒等于

==

不等于

!=

8

 

字 位

按位与

&

9

按位异或

^

10

按位或

|

11

逻 辑

逻辑与

&&

 

 

左结合

12

逻辑或

||

13

条 件

条件运算

?:

14

赋 值

赋值

=

复合赋值

Op=

15

逗 号

逗号运算

,

右结合

Tag标签: Keil   C51库  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规