小小遥遥的笔记 https://bbs.21ic.com/?648718 [收藏] [复制] [RSS]

日志

C51学习笔记

已有 841 次阅读2010-10-8 02:25 |系统分类:单片机


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


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


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


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


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


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


_nop_:      相当于插入NOP


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


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


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


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


第二节 几类重要库函数


1. 专用寄存器include文件


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


2. 绝对地址include文件absacc.h


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


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


 


4. 缓冲区处理函数位于“string.h”中


其中包括拷贝比较移动等函数如:


memccpy memchr 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 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. 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 (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);


 


2. C51启动文件STARTUP.A51


启动文件STARTUP.A51中包含目标板启动代码,可在每个project中加入这个文件,只要复位,则该文件立即执行,其功能包括:


l        定义内部RAM大小、外部RAM大小、可重入堆栈位置


l        清除内部、外部或者以此页为单元的外部存储器


l        按存储模式初使化重入堆栈及堆栈指针


l        初始化8051硬件堆栈指针


l        main( )函数交权


关键字    用 途      说 明
auto ;存储种类说明 ;用以说明局部变量,缺省值为此
break ;程序语句 ;退出最内层循环
case ;程序语句 ;Switch语句中的选择项
char ;数据类型说明 ;单字节整型数或字符型数据
const ;存储类型说明 ;在程序执行过程中不可更改的常量值
continue ;程序语句 ;转向下一次循环
default ;程序语句 ;Switch语句中的失败选择项
do ;程序语句 ;构成do..while循环结构
double ;数据类型说明 ;双精度浮点数
else ;程序语句 ;构成if..else选择结构
enum ;数据类型说明 ;枚举
extern ;存储种类说明 ;在其他程序模块中说明了的全局变量
flost ;数据类型说明 ;单精度浮点数
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循环结构


   


路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)