_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 _iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回 _lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回 _nop_: 相当于插入NOP
_testbit_: 相当于JBC bitvar测试该位变量并跳转同时清除。 _chkfloat_: 测试并返回源点数状态。 使用时,必须包含#inclucle
例如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);
31
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
32
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);
33
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);
第六章 Keil C51例子:Hello.c
Hello位于\\C51\\excmples\\Hello\\目录,其功能是向串口输出“Hello,world”整个程序如下:
#pragma DB OE CD #indule
SCOn=0x50;
34
TMOD=0x20 TH1=0xf3; Tri=1; TI=1;
printf(“Hello,world \\n”); while(1) { } }
第一节 uVision for Windows的使用步骤
(1) file_new新建一个hello.c文件,输入如上内容或直接用目录下源文件。 (2) file_save或工具栏将文件存盘。
(3) project_new project创建一个project名为hello,并在其中加入hello.c。 这时该project已是打开状态,或用open project打开已存在的project。 (4) option_C51 compiler中选出至少包括两项DB OE。 (5) option_dscope Debugger选中hello\\DS51.INI 查看DS51.INI看其是否为: “load…\\…\\BIN\\8051.DLL map 0, 0xffff” 否则修改。
(6) 在option_make选make文件顺序。
(7) project选Build project,看是否有语法错误,若无则生成HEX文件,若有则修改源文件后重复以上部分步骤。
(8) run_dScope debugger进入dScope51后装入hello则可用go直接运行看serial窗口有无输出,正常每系统运行一次,serial窗口均出现一个“Hello,world”表明运行无误。 第二节 Ishell for Dos使用步骤
(1) 进入Ishell 用Setup editer选择编辑器。
然后单击Edit或用Edit命令编辑hello.c源文件,存盘,也可以在files窗口中直接选
35