您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > KeilC51开发系统基本知识3
2.第二节几类重要库函数1.1.专用寄存器include文件例如8031、8051均为REG51.h其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。2.2.绝对地址include文件absacc.h该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。3.3.动态内存分配函数,位于stdlib.h中4.4.缓冲区处理函数位于“string.h”中其中包括拷贝比较移动等函数如:memccpymemchrmemcmpmemcpymemmovememset这样很方便地对缓冲区进行处理。5.5.输入输出流函数,位于“stdio.h”中流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的getkey.c及putchar.c源文件,然后在库中替换它们即可。3.第三节KeilC51库函数原型列表1.1.CTYPE.Hbitisalnum(charc);bitisalpha(charc);bitiscntrl(charc);bitisdigit(charc);bitisgraph(charc);bitislower(charc);bitisprint(charc);bitispunct(charc);bitisspace(charc);bitisupper(charc);bitisxdigit(charc);bittoascii(charc);bittoint(charc);chartolower(charc);char__tolower(charc);chartoupper(charc);char__toupper(charc);2.2.INTRINS.Hunsignedchar_crol_(unsignedcharc,unsignedcharb);unsignedchar_cror_(unsignedcharc,unsignedcharb);unsignedchar_chkfloat_(floatual);unsignedint_irol_(unsignedinti,unsignedcharb);unsignedint_iror_(unsignedinti,unsignedcharb);unsignedlong_irol_(unsignedlongl,unsignedcharb);unsignedlong_iror_(unsignedlongL,unsignedcharb);void_nop_(void);bit_testbit_(bitb);3.3.STDIO.Hchargetchar(void);char_getkey(void);char*gets(char*string,intlen);intprintf(constchar*fmtstr[,argument]…);charputchar(charc);intputs(constchar*string);intscanf(constchar*fmtstr.[,argument]…);intsprintf(char*buffer,constchar*fmtstr[;argument]);intsscanf(char*buffer,constchar*fmtstr[,argument]);charungetchar(charc);voidvprintf(constchar*fmtstr,char*argptr);voidvsprintf(char*buffer,constchar*fmtstr,char*argptr);4.4.STDLIB.Hfloatatof(void*string);intatoi(void*string);longatol(void*string);void*calloc(unsignedintnum,unsignedintlen);voidfree(voidxdata*p);voidinit_mempool(void*data*p,unsignedintsize);void*malloc(unsignedintsize);intrand(void);void*realloc(voidxdata*p,unsignedintsize);voidsrand(intseed);5.5.STRING.Hvoid*memccpy(void*dest,void*src,charc,intlen);void*memchr(void*buf,charc,intlen);charmemcmp(void*buf1,void*buf2,intlen);void*memcopy(void*dest,void*SRC,intlen);void*memmove(void*dest,void*src,intlen);void*memset(void*buf,charc,intlen);char*strcat(char*dest,char*src);char*strchr(constchar*string,charc);charstrcmp(char*string1,char*string2);char*strcpy(char*dest,char*src);intstrcspn(char*src,char*set);intstrlen(char*src);char*strncat(char8dest,char*src,intlen);charstrncmp(char*string1,char*string2,intlen);charstrncpy(char*dest,char*src,intlen);char*strpbrk(char*string,char*set);intstrpos(constchar*string,charc);char*strrchr(constchar*string,charc);char*strrpbrk(char*string,char*set);intstrrpos(constchar*string,charc);intstrspn(char*string,char*set);6.第六章KeilC51例子:Hello.cHello位于\C51\excmples\Hello\目录,其功能是向串口输出“Hello,world”整个程序如下:#pragmaDBOECD#indulereg51.h#includestdio.hvoidmain(void){SCOn=0x50;TMOD=0x20TH1=0xf3;Tri=1;TI=1;printf(“Hello,world\n”);while(1){}}1.第一节uVisionforWindows的使用步骤(1)file_new新建一个hello.c文件,输入如上内容或直接用目录下源文件。(2)file_save或工具栏将文件存盘。(3)project_newproject创建一个project名为hello,并在其中加入hello.c。这时该project已是打开状态,或用openproject打开已存在的project。(4)option_C51compiler中选出至少包括两项DBOE。(5)option_dscopeDebugger选中hello\DS51.INI查看DS51.INI看其是否为:“load…\…\BIN\8051.DLLmap0,0xffff”否则修改。(6)在option_make选make文件顺序。(7)project选Buildproject,看是否有语法错误,若无则生成HEX文件,若有则修改源文件后重复以上部分步骤。(8)run_dScopedebugger进入dScope51后装入hello则可用go直接运行看serial窗口有无输出,正常每系统运行一次,serial窗口均出现一个“Hello,world”表明运行无误。2.第二节IshellforDos使用步骤(1)进入Ishell用Setupediter选择编辑器。然后单击Edit或用Edit命令编辑hello.c源文件,存盘,也可以在files窗口中直接选中hello.c。(2)用cd改换project目录至hello目录。(3)在setup_target一项目选8051。(4)在setup_C51中输出DBOE。(5)在setup_project输入project名hello。(6)在setup_save保存Ishell.CFG文件。(7)编辑一个Link文件hello.lin中有“hell.obj”一行。(8)由光标落在files菜单中的Hello.c上,单击“translate”,如无语法错,再击“link”,则Hex文件生成。(9)单击Simulate如在8051.CDF中选Simulate为dScope则进入dScope调试直接“Go”,看serial窗口输出为“Hello.world”。(10)如程序有误修改源代码后不必再translate或link了,只要一步Amake即可。若project中包括不止一个文件,在DOS的Ishell中不能用Translate编译,而应建立bat文件,直接在命令窗编译,然后link连接。如还需用Translate则只能多个文件分别编译,然后连接。7.第七章KeilC51的代码效率C51程序编译生成汇编代码的效率,是由许多因素共同决定的,对于KeilC51,主要受以下两种因素影响:1.第一节存储模式的影响存储模式决定了缺省变量的存储空间,而访问各空间变量的汇编代码的繁简程度决定了代码率的高低。例如:一个整形变量i,如放于内存18H、19H空间,则++i的操作编译成四条语句:INC0x19MOVA,0x19JNZ0x272DINC0x180x272D:而如果放于外存空间0000H、0001H则++i的操作编译成九条语句:MOVDPTR,0001MOVXA,@DPTRINCAMOVX@DPTR,AJNz#5MOVOPTR,#0000MOVXA,@DPTRINCAMOVX@DPTR,A就汇编之后的语句而言,对外部存储器的操作较内部存储器操作代码率要低得多,生成的语句为内存的两倍以上,而程序中有大量的这种操作,可见存储模式对代码率的响了。因此程序设计的原则是1、存储模式从small-Compact-large依次选择,实在是变量太多,才选large模式。2、即使选择了large模式,对一些常用的局部的或者可放于内存中的变量,最好放于内存中,以尽量提高程序的代码率。2.第二节程序结构的影响程序的结构单元包括模块、函数等等。同样的功能,如果结构越复杂,其所涉及的操作、变量、功能模块函数等就越多,较之结构性好,代码简单的程序其代码率自然就低得多。此外程序的运行控制语句,也是影响代码率的关键因素,例如:switch-case语句,许多编译器都把它们译得非常复杂,KeilC51也不例外,相对较为简易的Switch-case语句,编译成跳转指令形式,代码率较高,但对较为复杂的Switch-Case,则要调用一个系统库函数?C?ICASE进行处理,非常复杂。再如if(),while(),等语句也是代码相对较低的语句,但编译以后比switch-case要高得多。因此建议设计者尽量少用switch-case之类语句来控制程序结构,以提高代码率。除以上两点外,其它因素也会对代码率产生影响,例如:是否用寄存器传递参数即NOAREGS选项是否有是否包括调试信息:即DEBUG选项是否包括扩展的调试信息:即BJECTEXTEND8.第八章dScopeforWindows使用详解1.第一节概述1.1.主窗口(MainframeWindow)可设置其它各种调试窗口,设置断点、观察点,修改地址空间,加载文件等等;2.2.调试窗口(DEBUGWindow)支持用户程序的各种显示方式,可连续运行,单步运行用户程序,并可在线汇编;3.3.命令窗口(CommandWindow)支持命令行的输入;4.4.观察窗口(Watch
本文标题:KeilC51开发系统基本知识3
链接地址:https://www.777doc.com/doc-2879880 .html