KeilC51使用详解1,上古卷轴5代码怎么用

卷轴 0
KeilC51使用详解
1 作者:未知文章来源:21ic点击数:3489更新时间:2005-3-15 第一章KeilC51开发系统基本知识...6第一节系统概述...6第二节KeilC51单片机软件开发系统的整体结构...6第三节KeilC51工具包的安装...7
1.C51forDos72.C51forWindows的安装及注意事项:...7第四节KeilC51工具包各部分功能及使用简介...71.C51与A51.72.L51和BL51.83.DScope51,Tscope51及Monitor51.84.Ishell及uVision.9第二章KeilC51软件使用详解...10第一节KeilC51编译器的控制指令...101.源文件控制类...102.目标文件(Object)控制类:...103.列表文件(listing)控制类:...10第二节dScope51的使用...111.dScope51forDos112.dScopeforWindows12第三节Monitor51及其使用...131.Monitor51对硬件的要求...132.Mon51的使用...133.MON51的配置...134.串口连接图:...135.MON51命令及使用...14 第四节集成开发环境(IDE)的使用...141.IshellforDos的使用...142.uVisionforwindows的使用...15 第三章KeilC51vs标准C..15第一节KeilC51扩展关键字...15第二节内存区域(MemoryAreas):...16
1.PragramArea:...162.InternalDataMemory:163.ExternalDataMemory.164.SpeciacFunctionRegisterMemory.16第三节存储模式...161.Small模式...162.Compact模式...173.large模式...17第四节存储类型声明...17第五节变量或数据类型...17第六节位变量与声明...171.bit型变量...172.可位寻址区说明20H-2FH..18第七节KeilC51指针...181.一般指针...182.存储器指针...183.指针转换...18第八节KeilC51函数...191.中断函数声明:...192.通用存储工作区...193.选通用存储工作区由usingx声明,见上例。
...194.指定存储模式...195.#pragmadisable.19
6.递归或可重入函数指定...197.指定PL/M-51函数...20第四章KeilC51高级编程...20第一节绝对地址访问...201.绝对宏:...202._at_关键字...213.连接定位控制...21第二节KeilC51与汇编的接口...211.模块内接口...212.模块间接口...21第三节KeilC51软件包中的通用文件...221.动态内存分配...222.C51启动文件STARTUP.A51.223.标准输入输出文件...254.其它文件...25第四节段名协定与程序优化...251.段名协定(SegmentNamingConventions)252.程序优化...25第五章KeilC51库函数参考...26第一节本征库函数(intrinsicroutines)和非本征证库函数...26第二节几类重要库函数...261.专用寄存器include文件...262.绝对地址include文件.h.263.动态内存分配函数,位于stdlib.h中...274.缓冲区处理函数位于“string.h”中...275.输入输出流函数,位于“stdio.h”中...27第三节KeilC51库函数原型列表...271.CTYPE.H..272.INTRINS.H..27
3.STDIO.H..284.STDLIB.H..285.STRING.H..28第六章KeilC51例子:Hello.c..29第一节uVisionforWindows的使用步骤...29第二节IshellforDos使用步骤...30第七章KeilC51的代码效率...30第一节存储模式的影响...30第二节程序结构的影响...31第八章dScopeforWindows使用详解...32第一节概述...321.主窗口(MainframeWindow)...322.调试窗口(DEBUGWindow)...323.命令窗口(CommandWindow)...324.观察窗口(WatchWindow)...325.寄存器窗口(RegisteWindow)...326.串口窗口(SericalWindows)...327.性能分析窗口...328.内存窗口(MemoryWindow)...329.符号浏览窗口(SymbolBrowserWindow)...3310.调用线窗口(Call-StackWindow)...3311.代码覆盖窗口...3312.外围设备窗口(peripherals)33第二节dScopeforWindows基本操作...331.指定初始化文件...332.观察变量...333.显示RAM的值...344.观察堆栈...345.中断处理程序调试...34
6.性能分析(PerformanceAnalyzer:PA)...34第三节dScopeforWindows命令文件的编制...341.地址空间及地址空间类型...342.常量...353.变量...364.运算符...385.表达式...386.数组...387.结构和联合...388.指针:...389.dScope命令语句...3810.函数...43 第一章KeilC51开发系统基本知识第一节系统概述 KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
下面详细介绍KeilC51开发系统各部分功能和使用。
第二节KeilC51单片机软件开发系统的整体结构 C51工具包的整体结构,如图
(1)所示,其中uVision与Ishell分别是C51forWindows和forDos的集成开 发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及A51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

(1)C51工具包整体结构图第三节KeilC51工具包的安装
1.C51forDos 在Windows下直接运行软件包中DOS\C51DOS.exe然后选择安装目录即可。
完毕后欲使系统正常工作须进行以下操作(设C:\C51为安装目录):修改Autoexec.bat,加入path=C:\C51\BinSetC51LIB=C:\C51\LIBSetC51INC=C:\C51\INC然后运行Autoexec.bat2.C51forWindows的安装及注意事项: 在Windows下运行软件包中WIN\Setup.exe,最好选择安装目录与C51forDos相同,这样设置最简单(设安装于C:\C51目录下)。
然后将软件包中crack目录中的文件拷入C:\C51\Bin目录下。
第四节KeilC51工具包各部分功能及使用简介
1.C51与A51
(1)C51C51是C语言编译器,其使用方法为:C51sourcefile[编译控制指令]或者C51@mandfile 其中sourcefile为C源文件(.C)。
大量的编译控制指令完成C51编译器的全部功能。
包控C51输出文件
C.LST,.OBJ,.I和.SRC文件的控制。
源文件(.C)的控制等,详见第五部分的具体介绍。
而Commandfile为一个连接控制文件其内容包括:.C源文件及各编译控制指令,它没有固定的名字,开发人员可根据自己的习惯指定,它适于用控制指令较多的场合。

(2)A51A51是汇编语言编译器,使用方法为:A51sourcefile[编译控制指令]或A51@mandfile其中sourcefile为汇编源文件(.asm或.a51),而编译控制指令的使用与其它汇编如ASM语言类似,可参考其他汇编语言材料。
Commandfile同C51中的Commandfile类似,它使A51使用和修改方便。

2.L51和BL51
(1)L51 L51是KeilC51软件包提供的连接/定位器,其功能是将编译生成的OBJ文件与库文件连接定位生成绝对目标文件(.ABS),其使用方法为: L51目标文件列表[库文件列表][tooutputfile][连接控制指令]或L51@Commandfile 源程序的多个模块分别经C51与A51编译后生成多个OBJ文件,连接时,这些文件全列于目标文件列表中,作为输入文件,如果还需与库文件(.LiB)相连接,则库文件也必须列在其后。
outputfile为输文件名,缺少时为第一模块名,后缀为.ABS。
连接控制指令提供了连接定位时的所有控制功能。
Commandfile为连接控制文件,其具体内容是包括了目标文件列表,库文件列表及输出文件、连接控制命令,以取代第一种繁琐的格式,由于目标模块库文件大多不止1个,因而第2种方法较多见,这个文件名字也可由使用者随意指定。

(2)Bl51 BL51也是C51软件包的连接/定位器,其具有L51的所有功能,此外它还具有以下3点特别之处:a.可以连接定位大于64kBytes的程序。
b.具有代码域及域切换功能(CodeBanking&BankSwitching)c.可用于RTX51操作系统RTX51是一个实时多任务操作系统,它改变了传统的编程模式,甚至不必用main()函数,单片机系统软件向RTOS发展是一种趋势,这种趋势对于186和386及68K系列CPU更为明显和必须,对8051因CPU较为简单,程序结构等都不太复杂,RTX51作用显得不太突出,其专业版软件PK51软件包甚至不包括RTX51Full,而只有一个RTX51TINY版本的RTOS。
RTX51TINY适用于无外部RAM的单片机系统,因而可用面很窄,在本文中不作介绍。
Bankswitching技术因使用很少也不作介绍。

3.DScope51,Tscope51及Monitor51(1)dScope51 dScope51是一个源级调试器和模拟器,它可以调试由C51编译器、A51汇编器、PL/M-51编译器及ASM-51汇编器产生的程序。
它不需目标板(forwindows也可通过mon51接目标板),只能进行软件模拟,但其功能强大,可模拟CPU及其外围器件,如内部串口,外部I/O及定时器等,能对嵌入式软件功能进行有效测试。
其使用方法为: DS51[debugfile][INIT(initfile)]其中debugfile是一个Hex格式的8051文件,即待调试的文件其为可选的,可在进入dScope51后用load命令装入。
Initfile为一个初使化文件,它在启动dScope51后,在debugfile装入前装入,装有一些dScope的初使化参数及常用调试函数等。
下面是一个dScope.ini文件(fordos)的内容:Load..\..\ds51\8051.iofMap0,0xffffdScope51forWindows则直接用鼠标进入,然后用load装入待调文件。
(2)tScope51与dScope51不同的是Scope51必须带目标板,目前它可以通过两种方式访问目标板。

(1)通过EMul51在线仿真器,tScope51为该仿真器准备了一个动态连接文件EMUL51.IOT,但该方法必须配合该仿真器。

(2)通过Monitov51监控程序,这种方法是可行的,tScope51为访问Monitor51专门带有MON51.IOT连接程序,使用时可通过串口及监控程序来调试目标板。
其使用方法为:TS51[INIT(file_name.ini)]其中file_name.ini为一个初使化文件。
进入TS51后,必须装入IOT文件,可用的有MON51.IOT及EMUL51.IOT两种,如装入MON51.IOT:Load.C:\C51\TS51\MON51.IOTCPUTYPE(80517)可惜的是tScope51只有forDos的版本。

(3)Monitor51Monitor51是一个监控程序通过PC机的串口与目标板进行通信,Monitor操作需要MON51或dScope51forWindows,后面部分将对Monitor51做较为详细的介绍。

4.Ishell及uVision
(1)IshellforDos 这是一个forDos的IDE,直接在命令行键入Ishell,则进入该环境,它使用简单方便。
其命令行与DOS命令行具有同样的功能,对单模块的Project直接由菜单进行编译连接,对多模块的project。
则通过批处理,BAT文件进行编译连接,然后通过菜单控制由dScope51或tScope51对程序进行调试,因为是fordos的,不做太详细介绍。
(2)uVisionforWindows uVisionforWindows是一个标准的Windows应用程序,它是C51的一个集成软件开发平台,具有源代码编辑、project管理、集成的make等功能,它的人机界面友好,操作方便,是开发者的首选,具体配置及使用见第五部分。
第二章KeilC51软件使用详解第一节KeilC51编译器的控制指令C51编译器的控制指令分为三类:源文件控制类,目标文件控制类及列表控制类。

1.源文件控制类 NOEXTEND:C51源文件不允许使用ANSIC扩展功能。
DEFINE(DF):定义预处理(在C51命令行)。

2.目标文件(Object)控制类:COMPACTLARGESMALL选编译模式DEBUG(DB)包含调试信息,以供仿真器或dSCope51使用。
NOAMAKE(NOAM)禁止AutoMake信息记录NOREGPARMS禁止用寄存器传递参数OBJECTEXTEND(OE)Object文件包含附加变量类型信息OPTIMIZE(OT)指定优化级别REGFILE(RF)指定一个寄存器使用的文件以供整体优化用REGISTERBANK(RB)指定一个供绝对寄存器访问的寄存器区名SRC不生成目标文件只生成汇编源文件其它控件不常用。

3.列表文件(listing)控制类:CODE(CD):向列表文件加入汇编列表 LISTINCLUDE(LC):显示indude文件SYMBOLS(SB):列表文件包括模块内所有符号的列表WARNINGLEVEL(WL):选择“警告”级别第二节dScope51的使用1.dScope51forDos 总的来说dScope51具有以下特性:●高级语言显示模式●集成硬件环境模拟●单步或“GO”执行模式●存储器、寄存器及变量访问●Watch表达式之值●函数与信号功能 下面,具体说明在进入dScope51forDos之后,如何实现上述功能,dScope51采用下拉菜单格式和窗口显示控制,共有language、serial、exe、register四个窗口,其中exe为命令行窗口,language为程序窗口,serial为串口窗,register为寄存器窗。

(1)高级语言显示模式 单击主菜单中的“View”,第一栏中的三条命令“Highlevel”、“Mixed”、“Assembly”分别对所装入的程序按照“高级”、“混合级”及“汇编级”三种方式显示,以方便调试使用。

(2)集成硬件环境模拟显示 主菜单中“Peripheral”各条能显示模拟硬件环境的状态,其中:i/oPort:显示各I/O口之值,对8031而言SFR中的P1、P2、P3、P0与引脚之值分别列出:Interrupt:显示5个中断源的入口模式是否允许,优先级等中断状态。
Timer:显示各定时/计数器的模式,初始值状态等。
intMessage:中断信息允许,如为允许(“>>”出现),则当中断申请时,显示中断源信息。
比如当中断发生时会显示:“interruptTimer0ured”等A/Dconverter: 显示A/D转换器状态无时,则提示“无”。
Serial:串口信息显示,包括串口模式、波特产等 Other:其它器件,如为8031则显示“无”
(3)单步或“Go”执行 “F8”单步执行,“F5”全速执行到断点。
或选主菜单中Trace单步执行CPU中的Go全速执行。

(4)存储器寄存器及变量访问 外部存储器管理MAP菜单:设置(set)、取消(reset)、显示(Display)处理可用存储空间。
修改Code代码:ASM命令存储器显示命令:D类别为(
X、D、
I、B、C)修改存储器命令:E有以下几种命令EB、EC、EI、EL、EF、EP复杂数据类型显示:Object命令;用以显示结构或数组的内容。
欲使此命令有效,C51编译器必须有DB及OBJECTEXTEND两条。
反汇编命令:U
(5)“Watch”表达式之值 在View菜单的“Watch”一栏中有四项:其中包括定义WatchPoint(Define)、删除WatchPoint(remove,killall),及自动更新选项。
也可用WS、WK等命令代替,下面具体看“表达式”类型:dScope51一次最多可设16个WtchPoint表达式,显示于WatchWindow之中,表达式可以是简单变量,也可是复杂数据类型如结构、数组和指向结构的指针等,例如: >WS*ptime>WSptime→hour>WSsome_record[o],analog等等
(6)关于.IOF文件启动DS51后必须装入.IOF文件才能使CPU及Peripheral各项起作用,这个函数的使用是依据8051系列CPU的不同特点,装入8051各CPU硬件设备模拟驱动文件,比如8031CPU就必须loadDS51目录下的8051.IOF。
2.dScopeforWindowsdScopeforwindows具有dScopefordos的全部功能,此外,它还具有以下明显的优点:
(1)标准的Windows界面,操作更容易更简单;
(2)常用操作多用对话框,而非Dos的行命令方式;
(3)窗口资源更加丰富:存储器窗口、覆盖率分析、运行状态分析窗口,加强了调试功能; 因为dScopeforWindows功能强大,具体操作在第八章详细介绍。
第三节Monitor51及其使用
1.Monitor51对硬件的要求
(1)硬件系统为51系列CPU;
(2)带5K外部程序存储器(从O地址开始),存放Monitor51程序;(3)256Bytes的外部数据存储器以及5K的跟踪缓冲区,此外,外部数据存储器必须足够容纳所有应用程序代码及数据,且所有外部数据存储器必须为冯·诺伊曼存储器,即能一致访问XDATA与Code空间。

(4)一个定时器作为波特率发生器供串口使用;(5)6Bytes的空余堆栈。

2.Mon51的使用Mon51的使用途径有三种方式:
(1)Dos行命令方式即先用install对MON51进行配置,然后用MON51进入Monitor状态,启用各种命令对Monitor51进行调试。
(2)tScope51方式启动tScope51装入TS51目录下的MON51.IOT驱动文件,与目标板通信。
(3)dScope51forWindows方式在选CPU驱动文件时,选“MON51.dll”,则检查目标板并进入MON51状态。

3.MON51的配置
(1)MON51forDos的配置运行install文件(在MON51目录下),不同的参数可以配置不同的硬件环境。
INSTALLSerialtype[xdstastart][codestart][bank][PROMCHECK]],具体说明见MON51帮助文件或使用手册。

(2)MON51forWindows的配置在启用MON51.dll时,会使得系统自动检查目标板连接,如配置不对,则弹出“Configuration”对话框,设置PC串口,波特率等,完毕单击“apply”有效。

4.串口连接图:收发交叉互连,RTS、CTS直连,DSR、DTR直连,具体引脚排列参考串口资料。

5.MON51命令及使用详细的MON51命令可参阅帮助。
第四节集成开发环境(IDE)的使用
1.IshellforDos的使用 进入Ishell之后看到两个窗口:一个是文件窗口,一个是Dos命令行窗口,窗口上方是下拉式的命令菜单,其中的Files控制文件窗口的显隐。
使用Ishell,第一步就是配置系统,即要学习两个文件的修改与创建:
(1)Ishell.CFG文件 每一个project都有一个Ishell.CFG,其中存放有“Option菜单和Setup菜单下的部分信息;Bellenabled、Monochromeenabled、EditorSelected、CRTLines、targetenviroment、nameofuseredit、Automaticloadforconfigurationenabled、filewindowenabled、filespecificationforfilewindow、mandlinecontrols、projectname等。
对每个project都必须设置以上信息,然后存盘“setup”的的“save”,这样才可正式开始下面工作。

(2)IShell.col文件 对IDE颜色设置,如不改动,可以缺省为主。

(3)CDF文件 该文件位于BIN目录下,每一文件定义一组外部函数工具包,即定义外部环境如8051.CDF,USER.CDF等,开发者可修改CDF文件,供自己使用,至于CDF文件内容可查看一下8051.CDF即可知道。
注意.CDF文件是Ishell系统的核心所在,不同的CDF文件可使本IDE适用于不同的编译、连接系统,即本IDE并不仅适于C51。
下面谈一谈Automake工具: C51的Automake是一个project管理器,在8051工具包中以OBJECT文件形式保留了一个project的信息,AutoMake用这些信息来进行project管理,一旦手工建立一个project,Automake可生成一个新的OBJECT,AutoMake利用此文件来编译那些修改过的文件。
Automake支持C51、A51、L51/BL51、C166、A166、L166等编译连接器。
点中主菜单中的Automake即运行本工具。
IshellforDos使用比较繁琐,推荐使用uVisionforwindows。
2.uVisionforwindows的使用 uVision是一个标准的windows应用程序,其编译功能、文件处理功能、project处理功能、窗口功能以及工具引用功能(如A51、C51、PL/M41、BL51dScope等)等都较IshellforDos要强得多。
uVision采用BL51作连接器,因为BL51兼容L51,所以一切能在Dos下工作的project都可以到uVision 中进行连接调试。
uVision采用dScopeforwindows作调试器,该调试器支持MON51及系统模拟两种方式,功能较forDOS 要强大好用,调试功能强大。
注意:
(1)Option菜单下的各项要会使用,其中A51、C51、PL/M51、BL51定义各文件所使用的编译、连接控制 指令,dScope定义一个dScope初始化文件。
Make则是定义一个make文件。

(2)进入调试是在RUN菜单下运行dScope。
(3)project中包括新建、打开、修改、更新、编译、连接等poject处理,具体使用可参考后面的例子。
第三章KeilC51vs标准
C 深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之
一。
因为大多数扩展功能都是直接针对
8 051系列CPU硬件的。
大致有以下8类: ●8051存储类型及存储区域 ●存储模式 ●存储器类型声明 ●变量类型声明 ●位变量与位寻址 ●特殊功能寄存器(SFR) ●C51指针 ●函数属性 具体说明如下(8031为缺省CPU)。
第一节KeilC51扩展关键字 C51V4.0版本有以下扩展关键字(共19个): _at_idatasfr16alieninterruptsmall bdatalarge_task_Codebit pdata usingreentrantpactsbit datasfr 第二节内存区域(MemoryAreas):
1.PragramArea: 由Code说明可有多达64kBytes的程序存储器
2.InternalDataMemory: 内部数据存储器可用以下关键字说明: data:直接寻址区,为内部RAM的低128字节00H~7FH idata:间接寻址区,包括整个内部RAM区00H~FFH bdata:可位寻址区, 20H~2FH
3.ExternalDataMemory 外部RAM视使用情况可由以下关键字标识: xdata:可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFH pdata:能访问1页(25bBytes)的外部RAM,主要用于紧凑模式(CompactModel)。

4.SpeciacFunctionRegisterMemory 8051提供128Bytes的SFR寻址区,这区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串 口、I/O及其它部件,可由以下几种关键字说明: sfr:字节寻址比如sfrP0=0x80;为PO口地址为80H,“=”后H~FFH之间的常数。
sfr16:字寻址,如sfr16T2=;指定Timer2口地址T2L=T2H=0xCD sbit:位寻址,如sbitEA=0xAF;指定第0xAF位为EA,即中断允许 还可以有如下定义方法: sbit0V=PSW^2;(定义0V为PSW的第2位)sbit0V=0XDO^2;(同上)或bit0V-=0xD2(同上)。
第三节存储模式 存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种:
1.Small模式所有缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。

2.Compact模式所有缺省变量均位于外部RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件 中说明,也可用pdata指定,优点是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。
3.large模式 所有缺省变量可放在多达64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。
提示:存储模式在C51编译器选项中选择。
第四节存储类型声明 变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字直接声明指定。
各类型分别用:code,data,idata,xdata,pdata说明,例:datauar1charcodearray[]=“hello!
”;unsignedcharxdataarr[10][4][4];第五节变量或数据类型 C51提供以下几种扩展数据类型:bit位变量值为0或1sbit从字节中定义的位变量0或1sfrsfr字节地址0~255sfr16sfr字地址0~65535其余数据类型如:char,enum,short,int,long,float等与ANSIC相同。
第六节位变量与声明1.bit型变量bit型变量可用变量类型,函数声明、函数返回值等,存贮于内部RAM20H~2FH。
注意:
(1)用#pragmadisable说明函数和用“usign”指定的函数,不能返回bit值。

(2)一个bit变量不能声明为指针,如bit*ptr;是错误的
(3)不能有bit数组如:bitarr[5];错误。

2.可位寻址区说明20H-2FH可作如下定义:intbdatai;charbdataarr[3],然后:sbitbito=in0;sbitbit15=I^15;sbitarr07=arr[0]^7;sbitarr15=arr[i]^7;第七节KeilC51指针C51支持一般指针(GenericPointer)和存储器指针(Memory_SpecificPointer).1.一般指针 一般指针的声明和使用均与标准C相同,不过同时还可以说明指针的存储类型,例如:long*state;为一个指向long型整数的指针,而state本身则依存储模式存放。
char*xdataptr;ptr为一个指向char数据的指针,而ptr本身放于外部RAM区,以上的long,char等指针指向的数据可存放于任何存储器中。
一般指针本身用3个字节存放,分别为存储器类型,高位偏移,低位偏移量。

2.存储器指针基于存储器的指针说明时即指定了存贮类型,例如:chardata*str;str指向data区中char型数据intxdata*pow;pow指向外部RAM的int型整数。
这种指针存放时,只需一个字节或2个字节就够了,因为只需存放偏移量。

3.指针转换即指针在上两种类型之间转化:●当基于存储器的指针作为一个实参传递给需要一般指针的函数时,指针自动转化。
●如果不说明外部函数原形,基于存储器的指针自动转化为一般指针,导致错误,因而请用“#include”说明所有函数原形。
●可以强行改变指针类型。
第八节KeilC51函数C51函数声明对ANSIC作了扩展,具体包括:
1.中断函数声明:中断声明方法如下:voidserial_ISR()interrupt4[using1]{/*ISR*/}为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。
/*definenotusedinterrupt,sogenerate"IRET"intheirentrance*/voidextern0_ISR()interrupt0{}/*notused*/voidtimer0_ISR()interrupt1{}/*notused*/voidextern1_ISR()interrupt2{}/*notused*/ voidtimer1_ISR()interrupt3{}/*notused*/voidserial_ISR()interrupt4{}/*notused*/2.通用存储工作区
3.选通用存储工作区由usingx声明,见上例。

4.指定存储模式 由pact及large说明,例如:voidfun1(void)small{} 提示:small说明的函数内部变量全部使用内部RAM。
关键的经常性的耗时的地方可以这样声明,以提高运行速度。

5.#pragmadisable 在函数前声明,只对一个函数有效。
该函数调用过程中将不可被中断。

6.递归或可重入函数指定 在主程序和中断中都可调用的函数,容易产生问题。
因为51和PC不同,PC使用堆栈传递参数,且静态变量以外的内部变量都在堆栈中;而51一般使用寄存器传递参数,内部变量一般在RAM中,函数重入时会破坏上次调用的数据。
可以用以下两种方法解决函数重入:a、在相应的函数前使用前述“#pragmadisable”声明,即只允许主程序或中断之一调用该函数;b、将该函数说明为可重入的。
如下:voidfunc(param...)reentrant;KeilC51编译后将生成一个可重入变量堆栈,然后就可以模拟通过堆栈传递变量的方法。
由于一般可重入函数由主程序和中断调用,所以通常中断使用与主程序不同的R寄存器组。
另外,对可重入函数,在相应的函数前面加上开关“#pragmanoaregs”,以禁止编译器使用绝对寄存器寻址,可生成不依赖于寄存器组的代码。

7.指定PL/M-51函数由alien指定。
第四章KeilC51高级编程本章讨论以下内容: ●绝对地址访问●C与汇编的接口●C51软件包中的通用文件 ●段名转换与程序优化第一节绝对地址访问 C51提供了三种访问绝对地址的方法:
1.绝对宏:在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD具体使用可看一看.h便知例如:rval=CBYTE[0x0002];指向程序存贮器的0002h地址rval=XWORD[0x0002];指向外RAM的0004h地址
2._at_关键字 直接在数据定义后加上_at_const即可,但是注意:
(1)绝对变量不能被初使化;(2)bit型函数及变量不能用_at_指定。
例如:idatastructlinklist_at_0x40;指定list结构从40h开始。
xdatachartext[25b]_at_0xE000;指定text数组从0E000H开始提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考.h。

3.连接定位控制此法是利用连接控制指令codexdatapdata\databdata对“段”地址进行,如要指定某具体变量地址,则很有局限性,不作详细讨论。
第二节KeilC51与汇编的接口
1.模块内接口方法是用#pragma语句具体结构是:#pragmaasm汇编行 #pragmaendasm 这种方法实质是通过asm与ndasm告诉C51编译器中间行不用编译为汇编行,因而在编译控制指令中有 SRC以控制将这些不用编译的行存入其中。

2.模块间接口 C模块与汇编模块的接口较简单,分别用C51与A51对源文件进行编译,然后用L51将obj文件连接即可,关键问题在于C函数与汇编函数之间的参数传递问题,C51中有两种参数传递方法。

(1)通过寄存器传递函数参数最多只能有3个参数通过寄存器传递,规律如下表: 参数数目CharIntlong,float一般指针1R7R6&R7R4~R7R1~R3 2R5R4&R5R4~R7R1~R33R3R2&R3R1~R3
(2)通过固定存储区传递(fixedmemory)这种方法将bit型参数传给一个存储段中: ?function_name?
BIT将其它类型参数均传给下面的段:?function_name?
BYTE,且按照预选顺序存放。
至于这个固定存储区本身在何处,则由存储模式默认。

(3)函数的返回值 函数返回值一律放于寄存器中,有如下规律: ReturntypeRegistev说明 Bit标志位由具体标志位返回char/unsignedchar1_byte指针 R7单字节由R7返回 int/unsignedint2_byte指针R6&R7双字节由R6和R7返回,MSB在R6long&unsignedlongR4~R7MSB在R4,LSB在R7 FloatR4~R732BitIEEE格式一般指针R1~R3存储类型在R3高位R2低R1
(4)SRC控制该控制指令将C文件编译生成汇编文件(.SRC),该汇编文件可改名后,生成汇编.ASM文件,再用A51进行 编译。
第三节KeilC51软件包中的通用文件在C51\LiB目录下有几个C源文件,这几个C源文件有非常重要的作用,对它们稍事修改,就可以用在 自己的专用系统中。

1.动态内存分配 init_mem.C:此文件是初始化动态内存区的程序源代码。
它可以指定动态内存的位置及大小,只有使用了init_mem()才可以调回其它函数,诸如malloccalloc,realloc等。
calloc.c:此文件是给数组分配内存的源代码,它可以指定单位数据类型及该单元数目。
malloc.c:此文件是malloc的源代码,分配一段固定大小的内存。
realloc.c:此文件是realloc.c源代码,其功能是调整当前分配动态内存的大小。

2.C51启动文件STARTUP.A51启动文件STARTUP.A51中包含目标板启动代码,可在每个project中加入这个文件,只要复位,则该文 件立即执行,其功能包括: ●定义内部RAM大小、外部RAM大小、可重入堆栈位置●清除内部、外部或者以此页为单元的外部存储器●按存储模式初使化重入堆栈及堆栈指针●初始化8051硬件堆栈指针●向main()函数交权 开发人员可修改以下数据从而对系统初始化 常数名 意义 IDATALEN待清内部RAM长度 XDATASTART指定待清外部RAM起始地址 XDATALEN待清外部RAM长度 IBPSTACK是否小模式重入堆栈指针需初始化标志,1为需要。
缺省为
0 IBPSTACKTOP指定小模式重入堆栈顶部地址 XBPSTACK是否大模式重入堆栈指针需初始化标志,缺省为
0 XBPSTACKTOP指定大模式重入堆栈顶部地址 PBPSTACK是否Compact重入堆栈指针,需初始化标志,缺省为
0 PBPSTACKTOP指定Compact模式重入堆栈顶部地址 PPAGEENABLEP2初始化允许开关 PPAGE 指定P2值 PDATASTART待清外部RAM页首址 PDATALEN待清外部RAM页长度 提示:如果要初始化P2作为紧凑模式高端地址,必须:PPAGEENAGLE=
1,PPAGE为P2值,例如指定 某页1000H-10FFH,则PPAGE=10H,而且连接时必须如下: L51PDATA(1080H),其中1080H是1000H-10FFH中的任一个值。
以下是STARTUP.A51代码片断,红色是经常可能需要修改的地方: ;------------------------------------------------------------------------------ ;
ThisfileispartoftheC51Compilerpackage ;CopyrightKEILELEKTRONIKGmbH1990 ;------------------------------------------------------------------------------ ;STARTUP.A51:Thiscodeisexecutedafterprocessorreset. ; ;TotranslatethisfileuseA51withthefollowinginvocation: ; ;A51STARTUP.A51 ; ;TolinkthemodifiedSTARTUP.OBJfiletoyourapplicationusethefollowing ;L51invocation: ; ;L51,STARTUP.OBJ ; ;------------------------------------------------------------------------------ ; ;
User-definedPower-OnInitializationofMemory ; ;WiththefollowingEQUstatementstheinitializationofmemory ;atprocessorresetcanbedefined: ; ; theabsolutestart-addressofIDATAmemoryisalways0 IDATALENEQU80HthelengthofIDATAmemoryinbytes. ; XDATASTART EQU0Htheabsolutestart-addressofXDATAmemory XDATALENEQU0HthelengthofXDATAmemoryinbytes. ; PDATASTART EQU0Htheabsolutestart-addressofPDATAmemory PDATALENEQU0HthelengthofPDATAmemoryinbytes. ; ;Notes:TheIDATAspaceoverlapsphysicallytheDATAandBITareasofthe ; 8051CPU.AtminimumthememoryspaceupiedfromtheC51 ; run-timeroutinesmustbesettozero. ;------------------------------------------------------------------------------ ; ;
ReentrantStackInitilization ; ;ThefollowingEQUstatementsdefinethestackpointerforreentrant ;functionsandinitializedit: ; ;StackSpaceforreentrantfunctionsintheSMALLmodel. IBPSTACKEQU0setto1ifsmallreentrantisused. IBPSTACKTOP EQU0FFH+1ofstacktohighestlocation+
1. ; ;StackSpaceforreentrantfunctionsintheLARGEmodel. XBPSTACKEQU0setto1iflargereentrantisused. XBPSTACKTOP EQU0FFFFH+1;ofstacktohighestlocation+
1. ; ;StackSpaceforreentrantfunctionsintheCOMPACTmodel. PBPSTACKEQU0setto1pactreentrantisused. PBPSTACKTOP; EQU0FFFFH+1;ofstacktohighestlocation+
1. ;-----------------------------------------------------------------------------; ;
PageDefinitionforUsingtheCompactModelwith64KBytexdataRAM; ;ThefollowingEQUstatementsdefinethexdatapageusedforpdata;variables.TheEQUPPAGEmustconformwiththePPAGEcontrolused ;inthelinkerinvocation.; PPAGEENABLE EQU0setto1ifpdataobjectareused. PPAGE EQU0definePPAGEnumber. ;;------------------------------------------------------------------------------
3.标准输入输出文件putchar.c putchar.c是一个低级字符输出子程,开发人员可修改后应用到自己的硬件系统上,例如向CLD或LEN输 出字符。
缺省:putchar.c是向串口输出一个字符XON|XOFF是流控标志,换行符“\*n”自动转化为回车/换行“\r\n”。
getkey.c getkey函数是一个低级字符输入子程,该程序可用到自己硬件系统,如矩阵键盘输入中,缺省时通过串口 输入字符。

4.其它文件还包括对Watch-Dog有独特功能的INIT.A51函数以及对8×C751适用的函数,可参考源代码。
第四节段名协定与程序优化
1.段名协定(SegmentNamingConventions) C51编译器生成的目标文件存放于许多段中,这些段是代码空间或数据空间的一些单元,一个段可以是可重定位的,也可以是绝对段,每一个可重定位的段都有一个类型和名字,C51段名有以下规定: 每个段名包括前缀与模块名两部分,前缀表示存储类型,模块名则是被编译的模块的名字,例如: ?CO?main1:表示main1模块中的代码段中的常数部分?PR?function1?module表module模块中函数function1的可执行段,具体规定参阅手册。

2.程序优化 C51编译器是一个具有优化功能的编译器,它共提供六级优化功能。
确保生成目标代码的最高效率(代码最少,运行速度最快)。
具体六级优化的内容可参考帮助。
在C51中提供以下编译控制指令控制代码优化:OPTIMIZE(SJXE):尽量采用子程序,使程序代码减少。
NOAREGS:不使用绝对寄存器访问,程序代码与寄存器段独立。
NOREGPARMS:参数传递总是在局部数据段实现,程序代码与低版本C51兼容。
OPTIMIZE(SIZE)AKOPTIMIZE(speed)提供6级优化功能,缺省为:OPTIMIZE(
6,SPEED)。
第五章KeilC51库函数参考 C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。
第一节本征库函数(intrinsicroutines)和非本征证库函数 C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。
C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入NOP_testbit_:相当于JBCar测试该位变量并跳转同时清除。
_chkfloat_:测试并返回源点数状态。
使用时,必须包含#inclucle一行。
如不说明,下面谈到的库函数均指非本征库函数。
第二节几类重要库函数
1.专用寄存器include文件 例如8031、8051均为REG51.h其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。

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

3.动态内存分配函数,位于stdlib.h中
4.缓冲区处理函数位于“string.h”中 其中包括拷贝比较移动等函数如:pymemchrmemcmpmemcpymemmovememset这样很方便地对缓冲区进行处理。

5.输入输出流函数,位于“stdio.h”中 流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的getkey.c及putchar.c源文件,然后在库中替换它们即可。
第三节KeilC51库函数原型列表
1.CTYPE.H bitisalnum(charc);bitisalpha(charc);bittrl(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.INTRINS.H unsignedchar_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.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.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.STRING.Hvoid*py(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);第六章KeilC51例子:Hello.cHello位于\C51\excmples\Hello\目录,其功能是向串口输出“Hello,world”整个程序如下:#pragmaDBOECD #indule#includevoidmain(void) {SCOn=0x50;TMOD=0x20TH1=0xf3;Tri=1;TI=1;printf(“Hello,world\n”);while
(1){} }第一节uVisionforWindows的使用步骤(1)file_new新建一个hello.c文件,输入如上内容或直接用目录下源文件。
(2)file_save或工具栏将文件存盘。
(3)project_newproject创建一个project名为hello,并在其中加入hello.c。
这时该project已是打开状态,或用openproject打开已存在的project。
(4)option_piler中选出至少包括两项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”表明运行无误。
第二节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则只能多个文件分别编译,然后连接。
第七章KeilC51的代码效率 C51程序编译生成汇编代码的效率,是由许多因素共同决定的,对于KeilC51,主要受以下两种因素影响:第一节存储模式的影响 存储模式决定了缺省变量的存储空间,而访问各空间变量的汇编代码的繁简程度决定了代码率的高低。
例如:一个整形变量i,如放于内存18H、19H空间,则++i的操作编译成四条语句:INC0x19MOVA,0x19JNZ0x272DINC0x180x272D:而如果放于外存空间0000H、0001H则++i的操作编译成九条语句:MOVDPTR,0001MOVXA,@DPTRINCA MOVX@DPTR,AJNz#5MOVOPTR,#0000MOVXA,@DPTRINCAMOVX@DPTR,A就汇编之后的语句而言,对外部存储器的操作较内部存储器操作代码率要低得多,生成的语句为内存的两倍以上,而程序中有大量的这种操作,可见存储模式对代码率的响了。
因此程序设计的原则是
1、存储模式从small-Compact-large依次选择,实在是变量太多,才选large模式。

2、即使选择了large模式,对一些常用的局部的或者可放于内存中的变量,最好放于内存中,以尽量提高程序的代码率。
第二节程序结构的影响 程序的结构单元包括模块、函数等等。
同样的功能,如果结构越复杂,其所涉及的操作、变量、功能模块函数等就越多,较之结构性好,代码简单的程序其代码率自然就低得多。
此外程序的运行控制语句,也是影响代码率的关键因素,例如:switch-case语句,许多编译器都把它们译得非常复杂,KeilC51也不例外,相对较为简易的Switch-case语句,编译成跳转指令形式,代码率较高,但对较为复杂的Switch-Case,则要调用一个系统库函数?
C?
ICASE进行处理,非常复杂。
再如if(),while(),等语句也是代码相对较低的语句,但编译以后比switch-case要高得多。
因此建议设计者尽量少用switch-case之类语句来控制程序结构,以提高代码率。
除以上两点外,其它因素也会对代码率产生影响,例如:是否用寄存器传递参数即NOAREGS选项是否有是否包括调试信息:即DEBUG选项是否包括扩展的调试信息:即BJECTEXTEND第八章dScopeforWindows使用详解第一节概述
1.主窗口(MainframeWindow)可设置其它各种调试窗口,设置断点、观察点,修改地址空间,加载文件等等;
2.调试窗口(DEBUGWindow) 支持用户程序的各种显示方式,可连续运行,单步运行用户程序,并可在线汇编;
3.命令窗口(CommandWindow)支持命令行的输入;
4.观察窗口(WatchWindow)可设置所要观察的变量、表达式等;
5.寄存器窗口(RegisteWindow)显示内部寄存器的内容,程序运行次数等;
6.串口窗口(SericalWindows)显示串口接收和发送的数据;
7.性能分析窗口显示所要观察的各程序段占用CPU的空间;
8.内存窗口(MemoryWindow)显示所选择的内存中的数据;
9.符号浏览窗口(SymbolBrowserWindow)显示各种符号名称,包括专有符号,用户自定义符号(函数名、变量、标号)等;10.调用线窗口(Call-StackWindow)动态显示当前执行的程序段的函数调用关系;11.代码覆盖窗口提供当前模块内各程序段中被执行代码的比率;。
12.外围设备窗口(peripherals)可显示I/O口,定时器,中断,串口等外围设备状态;第二节dScopeforWindows基本操作
1.指定初始化文件在uVision的Option菜单dScopeDebugger中指定dScope的初始化文件,用uVision的RUN启动dScope将自动加载此初始化文件,自动执行其中命令;下面是一个例子,可以看出调入一个调试代码的过程。
Ds51.ini:load8051.dllloadtestslog>>test.log xtal=11.0592definebutton"gotomain","g,main"wsRevCounterwsrm.rg,mainPARESETPAserialPAtimer02.观察变量方法1:命令行WSexpression[,numberbase][LINE]其中numberbase为显示数制,10对应10进制,16对应16进制,缺省为16进制。
LINE为单行显示,缺省为多行显示。
方法2:setup->Watchpoints,在对话框中输入变量
3.显示RAM的值di(x,d):起始地址,终止地址d变量名
4.观察堆栈View->Call-stack->Showinvocation,可以跟踪调用过程;
5.中断处理程序调试在装入8051.dll后,在dScope的主菜单中将增加Peripherial,其有4个字菜单:I/0port:Pi端口状态Interrupt:中断设置Timer:定时器中断状态Serial:串口中断状态设置相应的中断请求标志位即可产生中断。

6.性能分析(PerformanceAnalyzer:PA) PA用来分析一段代码执行占用CPU的百分比。
定义 命令行PAfunc_name 第三节dScopeforWindows命令文件的编制dScope除了用命令行的方式进行调试以外,还可将各种调试命令汇集于一个调试文件中, 然后调用该文件,就可达到自动测试用户源代码的目的。
dScope的命令文件支持C/PL/M的格式,因而编制调试命令文件与编制C语言程序有些类似。

1.地址空间及地址空间类型
(1)地址空间分段 dScope提供的最大可用空间为16M,实际上我们只用以下三段:①内部数据空间段(0X00段或D段)0X00:0X0000~0X00:0XFFFF(对MSC51而言为0X00:0X00FF)②外部数据空间段(0X01段式或X段)0X01:0X0000~0X01~0XFFFF③程序空间段(0XFF段或C段)0XFF:0X0000~0XFF:0XFFFF
(2)地址空间类型C:代码空间D:内部直接寻址空间I:内部间接寻址空间X:外部数据空间B:位寻址空间P:I/O口EB:扩展的位寻址空间(MCS251专有)ED:扩展的数据空间(MCS251专有)CO:常数空间(MCS251专有)HC:正常数空间(MCS251专有)
2.常量dScope支持十六进制、八进制、十进制、二进制常数,其后缀分别为
H、Q(O)、T(或无)、Y;dScope不区分常量的大、小写。

(1)整型常量 分为整型(int),无符号整型(uint,00rd),长整型(long),无符号长整型(Wlong、Word)。

(2)浮点型常量 与ANSIC相同。

(3)字符串常量 与ANSIC相同
(4)字符常量 分为字符型(Char)和无符号字符型(Uchar)一种。

(5)行号常数 指用户程序中的行号,实际上是个地址
(6)位常量(Bit): 0和1
(7)地址常数 地址常数的种类很多,地址常数不同于行号常数,行号常数就是一个地址,而地址数被引 用时,实际上是取该地址中的数据。
C:代码地址常数,如C:0X0012或0XFF:0X0012 D:内部直接寻址地址常数,如D:0X0068或0X00:0X0068I:内部间按寻址地址常数,如I:0X0010或0X00:0X0010X:外部数据空间地址常数,如X:0X0028或0X01:0X0028B:位地址常数,如B:0X20或B:0X24.0EB:扩展的位地址常数(MCS251专有),ED:扩展的数据空间地址常数(MCS251专有)CO:常数空间地址常数(MCS251专有)HC:正常数空间地址常数(MCS251专有)
(8)标识符常量 即用户源程序中的标号、函数名等,实际上代表某一地址。

(9)用户源程序中定义的常数
3.变量 dScope所支持的变量名或标识符最多可由31个字符组成,第一个字母为A~Z,a~z,下划线或问号,后续字符可为字母、数字、下划线和问号。
除CPU变量和系统变量外,dScope不支持全局变量,但可视“define”命令定义的变量为全局变量。
Dscope所支持的变量分为以下几种(变量名称不区分大、小写),支持类型转换:
(1)整型变量 分为整型变量(int)、无符号整型变量(uint/word),长整型(Long)、无符号长整型(Ulong/dword)。

(2)浮点型变量(float) 与ANSIC相同。

(3)字符型变量
L 分为字符型(char)变量和无符号字符型(Uchar)
(4)位变量(Bit)
(5)系统变量 dScope自己定义了一系列内部变量,用户可对这些变量进行读或读/写操作,可被用户 自定义数所引用。
a.Cycles(ReadOnly) 32位变量(Ulong),指示当前程序执行已花费的指令周期(cycle)。
b.Ramsize(R/W) 16位变量(Uint),指示内部可直接寻址的数据空间大小。
c.Radix(R/N) 8位变量(Uchar),决定输出的数制Radix=0X0A(10进制),Radix=0X10(16进制)d.-IIP-(R/W)8位变量(Uchar),指示当前的中断嵌套数目。
e.$(R/W)32位变量(Ulong),指出PC值,通过对其进行写操作,可改变程序执行的流程。
f.Itrace(R/W)8位变量(Uchar),决定是否对程序运行情况进行记录Itrace=
1,使能记录操作Itrace=
0,根本上记录操作g.__Break__(R/W)8位变量(Uchar)__Break__=
1,中止程序的运行 h.__Mode__和__Framesize__是MCS251专有的变量。

(6)CPU变量 即R0~R7、
A、C(位变量)、
B、DPTR及特殊功能寄存器变量,对这些变量均可进行读、写操作。

(7)用户源程序中定义的变量、数组、结构等
4.运算符 dScope支持ANSIC的运算符,包括算术运算符,逻辑运算符,关系运算符。

5.表达式 以运算符将dScope所支持的常量、变量、函数等连接在一起,就构成了dScope的表达式。

6.数组 dScope不支持在命令文件中定义数组,但可引用用户程序中的数组,引用方式如同
C。

7.结构和联合 dScope不支持在命令文件中定义结构和联合,但可引用用户程序中的结构和联合,引用方式如同
C,但如要输出整个结构或联合的结果,就要用命令“OBJ”。

8.指针: 不可自定义指针,但支持用户源程序中的指针变量。
9.dScope命令语句 dScope提供了一系列调试命令。
在命令文件中,dScope只支持这些语句及前述定义的表达式,C语言的语句均不被支持,但在命令文件所包含的用户自定义函数(非用户源程序中的函数)中支持C语句,但用户自定义函数中同样不支持数组、结构、联合和指针。

(1)ASM在线汇编命令,格式如下:ASMC:0Xnnnn(或标号);设定插入汇编指令的地址ASM汇编指令ASM汇编指令插入完毕后,在debug窗口内选择“Assemble->Assemble”完成编译。

(2)Assign串行口分配指令,格式如下:Assignchanneloutreg对MCS51为:AssignWinSoot但目前的dScope版本并未提供完整串口窗口功能。

(3)Define用户自定义变量指令,格式如下:Define<类型><变量名>类型一为如前所述的变量类型,Define指令定义的变量可能为全局变量,可为用户自定义函数所引用。

(4)Display内存显示命令,格式如下二:D起始地址,结束地址地址如前所述的地址常数,标识符常量。

(5)Enter内存修改指令,格式如下:E类型地址=表达式[表达式2],[……] 类型如前所述,地址如前所述的地址常数。
表达式如前所述,但如果是函数名称(含标号、 指针变量),则关键字E→EP
(6)Map/ResetmapMap为内存段修改指令,Resetmap将内存段复位或缺省值。

(7)Object 用以引用用户源程序中的结构(联合)、数组、格式如下: Obj表达式[n,],[Line]表达式为用户源程序中的数组,结构(联合)名称。
当Line缺省时,数目、结构(联合)的内容按n行输出;如有Line,则单行输出。

(8)
U 反汇编命令,格式如下: U[地址] 地址包括地址常数及标识符常量,指明反汇编的起始地址。

(9)WK 观察点删除命令,格式如下: WKn1[n2],[……];删除指定的观察点,n为字符型,整型 常数 WK*(10)WS ;删除所有的观察点 观察点设置命令,格式如下: WS表达式[,n][LINE]关键字LINE存在时,观察点表达式单行输出LINE缺省时,观察点表达式n行输出。
(11)
G 连续运行命令,格式如下: G[起始地址],[终止地址] 地址为标识符常量或地址常数,地址缺省时,为连续运行。
(12)T/P 单步运行指令,格式如下: T/Pn;n指至单行运行的步数,P指给用户当调用某函数时,把它作为一步处理,并 不进入该函数运行。
(13)PA 性能分析操作指令,其分以下几种: PA 显示当前所设置的性能分析程度段 PAKill* 删除当前所设置的所有性能分析程序段 PAKilln1[,n2],[……] 删除指定的性能分析程序段 PA地址范围 设置性能分析程序段,地址范围可以起始地址和结束地址的方式给出,也可给出函数名,行 号范围。
PAReset复位性能分析窗口(PAWindows),清除所有的记录。
(14)BD 断点失效命令,格式如下: BDn1[,n2],[,……];disable指定的断点 DB* ;disable所有的断点 (15)BE 断点使能命令,格式如下: BEM[,n2],[,……];使能指定的断点 BE* ;使能所有的断点 (16)BK 断点删除指令,格式如下: BKM[,n2],[,……];删除指定的断点 BK* ;删除所有的断点 (17)BL 断点显示指令,显示所有被定义的断点。
(18)BS 断点定义指令,dScope支持多达40个断点,具体格式如下: a.BS表达式[,count][,“cmd”] count:经过该断点的次数[选项] “cmd”:断点到达后附带执行的dScope命令(连项) 表达式一个条件表达式,此时该断点称为条件断点(运算符为&.&&,<<=>,>=,==,!
=) BSREAD表达式[,count][,“cmd”] BSWRITE表达式[,count][“cmd”] BSREADWRITE表达式[,count][,“cmd”] 以上三种断点称访问式(ess断点),当某一址或变量被访问(R/W)或某些值被读写时, 程序被中断。
(19)Definebutton 图标定义指令,用于当窗口(Toolbox) (20)!
DOS窗口Open命令,以“EXIT”命令退出DOS窗口。
(21)Include 文件包含命令,格式如下: Include[路径]文件名 dScope支持以文件包含的方式调入并执行调试命令文件,用户自定义函数文件,调试命令 文件可以有后缀,也可无后缀。
(22)Load 加载命令,格式如下: Load[路径]文件名 Load指令能够加载的文件必须具有以下格式之
一。
IntelHex/Hex386格式 IntelObject(OMF_51)格式 IntelObject(OMF-251)格式 dScope的CPU驱动文件(.DLL) (23)LOG CommandWindow存盘指令,用于将CommandWindows中的内容输出到指定的文件中,格 式如下:LOG>[路径]文件名;创建一个新文件LOG>>[路径]文件名;将CommandWindows的内容输出到某个已 存在的文件中。
LOGOFF完成输出操作并开闭该文件LOG指令只将LOG>或LOG>>与LOGOFF指令之间的操作命令存入该指定文件。
(24)Reset 复位指令,具体格式如下:Reset;执行dScope的复位ResetMap;复位外部数据空间ResetVar;复位SET指令定义的变量(25)Save该指令将一段内存映象以19EX386/HEX的格式存盘,具体格式如下:Save路径文件名:地址
1、地址2地址
1、地址2指所要保存的空间范围,既可是标识符,也可是址常数。
(26)SET该指令回来定义dScope目标代码预定义变量的含义,这些预定义变量包括以下二种:SRC;指出所在的路径F1~F12;对应于键盘上的12个功能键,定义这些功能键的含义。
SET指令的格式为:SET变量=“字符串”SET变量10.函数dScope支持三种函数,即dScope预定义函数,用户自定义函数和信号函数,分别详述如下:(1)dScope预定义函数dScope号提供8个预定义函数(可视为dScope的库函数)①VoidPrintf(“String”,输出表列) 屏幕打印函数,与ANSIC的Printf()函数相同②Voidexec(“Command__String”) Command__String为一有效的命令字符串,此函数用于在运行用户自定义函数的过程中执行dScope命令,这个函数提供了一个很重要的编制测试命令文件的方法。
③intgetint(“Prompt__String”);从键盘输入一个整数 intgetlong(“Prompt__String”);从键盘输入一个长整数floatgetfloat(“Prompt__String”);从键盘输入一个浮点数以上这三个函数被执行时,dScope会弹出一个dialogbox等待用户输入数据,其标题栏上是“Prompt__String”,利用这个函数,不仅可以为变量赋值,也可使用户得以看清前一阶段的 测试结果。
④intrand(intseed) 该函数会输出一个随机数(-32768~32768)⑤Voidmemeset(start,ulongend,ucharval) 该函数用于给地址范围(Start__end)内的内存赋值(Val)⑥Voidtwatch(Longcycles) 定时函数,时间由(Longcycles)决定,它是以指令周期计数的,它也用于产生一个信 号波形,该函数必须用于信号函数中。

(2)用户自定义函数这类函数不同于用户源程序中的数函,其定义格式为Func返回类型函数名(参数序列){ 语句}返回类型如前所述的变量类型用户自定义函数中的语句与ANSIC相似,只是不支持数组结构、联合、指针,可引用dScope系统变量,define语句定义的变量和用户源程序变量,不支持dScope命令,如想在函数中执行dScope命令,要借助于exec(“Command__String”)函数,可引用dScope预定义的函数(除了twatch()函数),不支持ANSIC的库函数。

(3)信号函数用于产生具有某一波形的信号,定义格式为:Signal返回类型函数名(参数长列){ 语句 }信号函数主要是利用twatch()函数,目前dScope版本在提供这一功能上面还有一定问题。
(4)dScope函数与ANSI函数的区别①不支持条件汇编②不支持头文件③无变量的初始化④不支持数组、结构、指针⑤调用方式不同,自定义函数和信号函数首先要包含一个函数文件之中,然而在测试命令文件中以Inclule指令调用该函数文件,最后才能以函数名调用之。
⑥函数调用只支持传值方式。
BACK>>KeilC51使用詳解KeilC51使用詳解 (KeilC51使用詳解 ©電子設計世界!版權所有,歡迎轉貼,請勿修改並注明出處。
保留一切權利。
第一章KeilC51開發系統基本知識...6第一節系統概述...6第二節KeilC51單片機軟體發展系統的整體結構...6第三節KeilC51工具包的安裝...71.C51forDos72.C51forWindows的安裝及注意事項:...7 第四節KeilC51工具包各部分功能及使用簡介...71.C51與A51.72.L51和BL51.83.DScope51,Tscope51及Monitor51.84.Ishell及uVision.9第二章KeilC51軟體使用詳解...10第一節KeilC51編譯器的控制指令...101.原始檔案控制類...102.目標檔(Object)控制類:...103.列表文件(listing)控制類:...10第二節dScope51的使用...111.dScope51forDos112.dScopeforWindows12第三節Monitor51及其使用...131.Monitor51對硬體的要求...132.Mon51的使用...133.MON51的配置...134.串口連接圖:...135.MON51命令及使用...14第四節集成開發環境(IDE)的使用...141.IshellforDos的使用...142.uVisionforwindows的使用...15第三章KeilC51vs標準C..15第一節KeilC51擴展關鍵字...15第二節記憶體區域(MemoryAreas):...161.PragramArea:...162.InternalDataMemory:163.ExternalDataMemory.164.SpeciacFunctionRegisterMemory.16第三節存儲模式...161.Small模式...162.Compact模式...173.large模式...17第四節存儲類型聲明...17第五節變數或資料類型...17第六節位元變數與聲明...171.bit型變數...172.可位定址區說明20H-2FH..18111.dScope51forDos112.dScopeforWindows12第三節Monitor51及其使用...131.Monitor51對硬體的要求...132.Mon51的使用...133.MON51的配置...13
4.串口連接圖:...135.MON51命令及使用...14第四節集成開發環境(IDE)的使用...141.IshellforDos的使用...142.uVisionforwindows的使用...15第三章KeilC51vs標準C..15第一節KeilC51擴展關鍵字...15第二節記憶體區域(MemoryAreas):...161.PragramArea:...162.InternalDataMemory:163.ExternalDataMemory.164.SpeciacFunctionRegisterMemory.16第三節存儲模式...161.Small模式...162.Compact模式...173.large模式...17第四節存儲類型聲明...17第五節變數或資料類型...17第六節位元變數與聲明...171.bit型變數...172.可位定址區說明20H-2FH..18第七節KeilC51指針...181.一般指針...182.記憶體指針...183.指針轉換...18第八節KeilC51函數...191.中斷函數聲明:...192.通用存儲工作區...193.選通用存儲工作區由usingx聲明,見上例。
...194.指定存儲模式...195.#pragmadisable.196.遞迴或可重入函數指定...197.指定PL/M-51函數...20第四章KeilC51高級編程...20第一節絕對位址訪問...201.絕對宏:...202._at_關鍵字...213.連接定位控制...21第二節KeilC51與彙編的介面...211.模組內介面...212.模組間介面...21第三節KeilC51套裝軟體中的通用檔...221.動態記憶體分配...222.C51啟動檔STARTUP.A51.22
3.標準輸入輸出檔...254.其他文件...25第四節段名?
第七節KeilC51指針...181.一般指針...182.記憶體指針...183.指針轉換...18第八節KeilC51函數...191.中斷函數聲明:...192.通用存儲工作區...193.選通用存儲工作區由usingx聲明,見上例。
...194.指定存儲模式...195.#pragmadisable.196.遞迴或可重入函數指定...197.指定PL/M-51函數...20第四章KeilC51高級編程...20第一節絕對位址訪問...201.絕對宏:...202._at_關鍵字...213.連接定位控制...21第二節KeilC51與彙編的介面...211.模組內介面...212.模組間介面...21第三節KeilC51套裝軟體中的通用檔...221.動態記憶體分配...222.C51啟動檔STARTUP.A51.223.標準輸入輸出檔...254.其他文件...25第四節段名協定與程式優化...251.段名協定(SegmentNamingConventions)252.程式優化...25第五章KeilC51庫函數參考...26第一節本征庫函數(intrinsicroutines)和非本征證庫函數...26第二節幾類重要庫函數...261.專用寄存器include檔...262.絕對位址include文件.h.263.動態記憶體分配函數,位於stdlib.h中...274.緩衝區處理函數位於“string.h”中...275.輸入輸出流函數,位於“stdio.h”中...27第三節KeilC51庫函數原型列表...271.CTYPE.H..272.INTRINS.H..273.STDIO.H..284.STDLIB.H..28
5.STRING.H..28第六章KeilC51例子:Hello.c..29第一節uVisionforWindows的使用步驟...29第二節IshellforDos使用步驟...30第七章KeilC51的代碼效率...30第一節存儲模式的影響...30第二節程式結構的影響...31第八章dScopeforWindows使用詳詢3定與程式優化...251.段名協定(SegmentNamingConventions)252.程式優化...25第五章KeilC51庫函數參考...26第一節本征庫函數(intrinsicroutines)和非本征證庫函數...26第二節幾類重要庫函數...261.專用寄存器include檔...262.絕對位址include文件.h.263.動態記憶體分配函數,位於stdlib.h中...274.緩衝區處理函數位於“string.h”中...275.輸入輸出流函數,位於“stdio.h”中...27第三節KeilC51庫函數原型列表...271.CTYPE.H..272.INTRINS.H..273.STDIO.H..284.STDLIB.H..285.STRING.H..28第六章KeilC51例子:Hello.c..29第一節uVisionforWindows的使用步驟...29第二節IshellforDos使用步驟...30第七章KeilC51的代碼效率...30第一節存儲模式的影響...30第二節程式結構的影響...31第八章dScopeforWindows使用詳解...32第一節概述...321.主窗口(MainframeWindow)...322.調試窗口(DEBUGWindow)...323.命令窗口(CommandWindow)...324.觀察視窗(WatchWindow)...325.寄存器窗口(RegisteWindow)...326.串口窗口(SericalWindows)...327.性能分析視窗...328.記憶體視窗(MemoryWindow)...329.符號流覽視窗(SymbolBrowserWindow)...3310.調用線窗口(Call-StackWindow)...3311.代碼覆蓋視窗...3312.週邊設備窗口(peripherals)33 第二節dScopeforWindows基本操作...331.指定初始化檔...332.觀察變數...333.顯示RAM的值...344.觀察堆疊...345.中斷處理程式調試...346.性能分析(PerformanceAnalyzer:PA)...34第三節dScopeforWindows命令文件的編制...341.位址空間及位址空間類型...342.常量...353.變數...364.運算符...385.?
...32第一節概述...321.主窗口(MainframeWindow)...322.調試窗口(DEBUGWindow)...323.命令窗口(CommandWindow)...324.觀察視窗(WatchWindow)...325.寄存器窗口(RegisteWindow)...326.串口窗口(SericalWindows)...327.性能分析視窗...328.記憶體視窗(MemoryWindow)...329.符號流覽視窗(SymbolBrowserWindow)...3310.調用線窗口(Call-StackWindow)...3311.代碼覆蓋視窗...3312.週邊設備窗口(peripherals)33第二節dScopeforWindows基本操作...331.指定初始化檔...332.觀察變數...333.顯示RAM的值...344.觀察堆疊...345.中斷處理程式調試...346.性能尷R(PerformanceAnalyzer:PA)...34第三節dScopeforWindows命令文件的編制...341.位址空間及位址空間類型...342.常量...353.變數...364.運算符...385.運算式...386.陣列...387.結構和聯合...388.指針:...389.dScope命令語句...3810.函數...43 第一章KeilC51開發系統基本知識第一節系統概述KeilC51是美國KeilSoftware公司出品的51系列相容單片機C語言軟體發展系統,與彙編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。
用過組合語言後再使用C來開發,體會更加深刻。
KeilC51軟體提供豐富的庫函數和功能強大的集成開發調試工具,全Windows介面。
另外重要的一點,只要看一下編譯後生成的彙編代碼,就能體會到KeilC51生成的目標代碼效率非常之高,多數語句生成的彙編代碼很緊湊,容易理解。
在開發大型軟體時更能體現高階語言的優勢。
下面詳細六算式...386.陣列...387.結構和聯合...388.指針:...389.dScope命令語句...3810.函數...43 第一章KeilC51開發系統基本知識第一節系統概述KeilC51是美國KeilSoftware公司出品的51系列相容單片機C語言軟體發展系統,與彙編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。
用過組合語言後再使用C來開發,體會更加深刻。
KeilC51軟體提供豐富的庫函數和功能強大的集成開發調試工具,全Windows介面。
另外重要的一點,只要看一下編譯後生成的彙編代碼,就能體會到KeilC51生成的目標代碼效率非常之高,多數語句生成的彙編代碼很緊湊,容易理解。
在開發大型軟體時更能體現高階語言的優勢。
下面詳細介紹KeilC51開發系統各部分功能和使用。
第二節KeilC51單片機軟體發展系統的整體結構C51工具包的整體結構,如圖
(1)所示,其中uVision與Ishell分別是C51forWindows和forDos的集成開發環境(IDE),可以完成編輯、編譯、連接、調試、仿真等整個開發流程。
開發人員可用IDE本身或其他編輯器編輯C或彙編原始檔案。
然後分別由C51及A51編譯器編譯生成目標檔(.OBJ)。
目標檔可由LIB51創建生成庫檔,也可以與庫檔一起經L51連接定位生成絕對目標檔(.ABS)。
ABS檔由OH51轉換成標準的Hex檔,以供調試器dScope51或tScope51使用進行源代碼級調試,也可由模擬器使用直接對目標板進行調試,也可以直接寫 入程式記憶體如EPROM中。

(1)C51工具包整體結構圖第三節KeilC51工6紹KeilC51開發系統各部分功能和使用。
第二節KeilC51單片機軟體發展系統的整體結構C51工具包的整體結構,如圖
(1)所示,其中uVision與Ishell分別是C51forWindows和forDos的集成開發環境(IDE),可以完成編輯、編譯、連接、調試、仿真等整個開發流程。
開發人員可用IDE本身或其他編輯器編輯C或彙編原始檔案。
然後分別由C51及A51編譯器編譯生成目標檔(.OBJ)。
目標檔可由LIB51創建生成庫檔,也可以與庫檔一起經L51連接定位生成絕對目標檔(.ABS)。
ABS檔由OH51轉換成標準的Hex檔,以供調試器dScope51或tScope51使用進行源代碼級調試,也可由模擬器使用直接對目標板進行調試,也可以直接寫入程式記憶體如EPROM中。

(1)C51工具包整體結構圖第三節KeilC51工具包的安裝
1.C51forDos在Windows下直接運行套裝軟體中DOS\C51DOS.exe然後選擇安裝目錄即可。
完畢後欲使系統正常工作須進行以下操作(設C:\C51為安裝目錄):修改Autoexec.bat,加入path=C:\C51\BinSetC51LIB=C:\C51\LIBSetC51INC=C:\C51\INC然後運行Autoexec.bat2.C51forWindows的安裝及注意事項:在Windows下運行套裝軟體中WIN\Setup.exe,最好選擇安裝目錄與C51forDos相同,這樣設置最簡單(設安裝於C:\C51目錄下)。
然後將套裝軟體中crack目錄中的檔拷入C:\C51\Bin目錄下。
第四節KeilC51工具包各部分功能及使用簡介
1.C51與A51
(1)C51C51是C語言編譯器,其使用方法為:C51sourcefile[編譯控制指令]或者C51@mandfile其中sourcefile為C原始檔案(.C)。
大量的編譯控制指令完成C51編譯器%A具包的安裝
1.C51forDos在Windows下直接運行套裝軟體中DOS\C51DOS.exe然後選擇安裝目錄即可。
完畢後欲使系統正常工作須進行以下操作(設C:\C51為安裝目錄):修改Autoexec.bat,加入path=C:\C51\BinSetC51LIB=C:\C51\LIBSetC51INC=C:\C51\INC然後運行Autoexec.bat2.C51forWindows的安裝及注意事項:在Windows下運行套裝軟體中WIN\Setup.exe,最好選擇安裝目錄與C51forDos相同,這 樣設置最簡單(設安裝於C:\C51目錄下)。
然後將套裝軟體中crack目錄中的檔拷入C:\C51\Bin目錄下。
第四節KeilC51工具包各部分功能及使用簡介
1.C51與A51
(1)C51C51是C語言編譯器,其使用方法為:C51sourcefile[編譯控制指令]或者C51@mandfile其中sourcefile為C原始檔案(.C)。
大量的編譯控制指令完成C51編譯器的全部功能。
包控C51輸出檔
C.LST,.OBJ,.I和.SRC文件的控制。
原始檔案(.C)的控制等,詳見第五部分的具體介紹。
而Commandfile為一個連接控制檔其內容包括:.C原始檔案及各編譯控制指令,它沒有固定的名字,開發人員可根據自己的習慣指定,它適於用控制指令較多的場合。

(2)A51A51是組合語言編譯器,使用方法為:A51sourcefile[編譯控制指令]或A51@mandfile其中sourcefile為彙編原始檔案(.asm或.a51),而編譯控制指令的使用與其他彙編如ASM語言類似,可參考其他組合語言材料。
Commandfile同C51中的Commandfile類似,它使A51使用和修改方便。

2.L51和BL51
(1)L51L51是KeilC51套裝軟體提供的連接/定位器,其功能是將編譯生成的OBJ檔與庫檔連接定位生成絕對A漸‘\能。
包控C51輸出檔
C.LST,.OBJ,.I和.SRC文件的控制。
原始檔案(.C)的控制等,詳見第五部分的具體介紹。
而Commandfile為一個連接控制檔其內容包括:.C原始檔案及各編譯控制指令,它沒有固定的名字,開發人員可根據自己的習慣指定,它適於用控制指令較多的場合。

(2)A51A51是組合語言編譯器,使用方法為:A51sourcefile[編譯控制指令]或A51@mandfile其中sourcefile為彙編原始檔案(.asm或.a51),而編譯控制指令的使用與其他彙編如ASM語言類似,可參考其他組合語言材料。
Commandfile同C51中的Commandfile類似,它使A51使用和修改方便。

2.L51和BL51
(1)L51L51是KeilC51套裝軟體提供的連接/定位器,其功能是將編譯生成的OBJ檔與庫檔連接定位生成絕對目標檔(.ABS),其使用方法為:L51目標檔列表[庫檔列表][tooutputfile][連接控制指令]或L51@Commandfile根源程式的多個模組分別經C51與A51編譯後生成多個OBJ檔,連接時,這些檔全列於目標檔列表中,作為輸入檔,如果還需與庫檔(.LiB)相連接,則庫檔也必須列在其後。
outputfile為輸檔案名,缺少時為第一模組名,尾碼為.ABS。
連接控制指令提供了連接定位時的所有控制功能。
Commandfile為連接控制檔,其具體內容是包括了目標檔列表,庫檔列表及輸出 檔、連接控制命令,以取代第一種繁瑣的格式,由於目的模組庫檔大多不止1個,因而第
2 種方法較多見,這個檔案名字也可由使用者隨意指定。

(2)Bl51BL51也是C51套裝軟體的連接/定位器,言媦釔?
.ABS),其使用方法為:L51目標檔列表[庫檔列表][tooutputfile][連接控制指令]或L51@Commandfile根源程式的多個模組分別經C51與A51編譯後生成多個OBJ檔,連接時,這些檔全列於目標檔列表中,作為輸入檔,如果還需與庫檔(.LiB)相連接,則庫檔也必須列在其後。
outputfile為輸檔案名,缺少時為第一模組名,尾碼為.ABS。
連接控制指令提供了連接定位時的所有控制功能。
Commandfile為連接控制檔,其具體內容是包括了目標檔列表,庫檔列表及輸出檔、連接控制命令,以取代第一種繁瑣的格式,由於目的模組庫檔大多不止1個,因而第
2 種方法較多見,這個檔案名字也可由使用者隨意指定。

(2)Bl51BL51也是C51套裝軟體的連接/定位器,其具有L51的所有功能,此外它還具有以下3點 特別之處:a.可以連接定位大於64kBytes的程式。
b.具有代碼域及域切換功能(CodeBanking&BankSwitching)c.可用於RTX51作業系統RTX51是一個即時多工作業系統,它改變了傳統的編程模式,甚至不必用main()函數,單片機系統軟體向RTOS發展是一種趨勢,這種趨勢對於186和386及68K系列CPU更為明顯和必須,對8051因CPU較為簡單,程式結構等都不太複雜,RTX51作用顯得不太突出,其專業版軟體PK51套裝軟體甚至不包括RTX51Full,而只有一個RTX51TINY版本的RTOS。
RTX51TINY適用於無外部RAM的單片機系統,因而可用面很窄,在本文中不作介紹。
Bankswitching技術因使用很少也不作介紹。

3.DScope51,Tscope51及Monitor51(1)dScope51dScope51是一個源級調鋮膃蚯51的所有功能,此外它還具有以下3點特別之處:a.可以連接定位大於64kBytes的程式。
b.具有代碼域及域切換功能(CodeBanking&BankSwitching)c.可用於RTX51作業系統RTX51是一個即時多工作業系統,它改變了傳統的編程模式,甚至不必用main()函數,單片機系統軟體向RTOS發展是一種趨勢,這種趨勢對於186和386及68K系列CPU更為明顯和必須,對8051因CPU較為簡單,程式結構等都不太複雜,RTX51作用顯得不太突出,其專業版軟體PK51套裝軟體甚至不包括RTX51Full,而只有一個RTX51TINY版本的RTOS。
RTX51TINY適用於無外部RAM的單片機系統,因而可用面很窄,在本文中不作介紹。
Bankswitching技術因使用很少也不作介紹。

3.DScope51,Tscope51及Monitor51(1)dScope51dScope51是一個源級調試器和模擬器,它可以調試由C51編譯器、A51彙編器、PL/M-51編譯器及ASM-51彙編器產生的程式。
它不需目標板(forwindows也可通過mon51接目標板),只能進行軟體類比,但其功能強大,可類比CPU及其週邊器件,如內部串口,外部I/O及計時器等,能對嵌入式軟體功能進行有效測試。
其使用方法為:DS51[debugfile][INIT(initfile)] 其中debugfile是一個Hex格式的8051檔,即待調試的檔其為可選的,可在進入dScope51後用load命令裝入。
Initfile為一個初使化檔,它在啟動dScope51後,在debugfile裝入前裝入,裝有一些dScope的初使化參數及常用調試函數等。
下面是一個dScope.ini檔(fordos)的內容:Load..\..\ds51\8051.iofMap0,0xffffdScope51forWindows則直接用滑鼠進入,然後用load裝入待調檔。
(2試器和模擬器,它可以調試由C51編譯器、A51彙編器、PL/M-51編譯器及ASM-51彙編器產生的程式。
它不需目標板(forwindows也可通過mon51接目標板),只能進行軟體類比,但其功能強大,可類比CPU及其週邊器件,如內部串口,外部I/O及計時器等,能 對嵌入式軟體功能進行有效測試。
其使用方法為:DS51[debugfile][INIT(initfile)]其中debugfile是一個Hex格式的8051檔,即待調試的檔其為可選的,可在進入dScope51後用load命令裝入。
Initfile為一個初使化檔,它在啟動dScope51後,在debugfile裝入前裝入,裝有一些dScope的初使化參數及常用調試函數等。
下面是一個dScope.ini檔(fordos)的內容:Load..\..\ds51\8051.iofMap0,0xffffdScope51forWindows則直接用滑鼠進入,然後用load裝入待調檔。
(2)tScope51與dScope51不同的是Scope51必須帶目標板,目前它可以通過兩種方式訪問目標板。

(1)通過EMul51線上模擬器,tScope51為該模擬器準備了一個動態連接檔EMUL51.IOT,但該方法必須配合該模擬器。

(2)通過Monitov51監控程序,這種方法是可行的,tScope51為訪問Monitor51專門帶有MON51.IOT連接程式,使用時可通過串口及監控程序來調試目標板。
其使用方法為:TS51[INIT(file_name.ini)]其中file_name.ini為一個初使化檔。
進入TS51後,必須裝入IOT檔,可用的有MON51.IOT及EMUL51.IOT兩種,如裝入MON51.IOT:Load.C:\C51\TS51\MON51.IOTCPUTYPE(80517)可惜的是tScope51只有forDos的版本。

(3)Monitor51Monitor51是一個監控程序通過PC機的串口與目標板進行通信,Monitor操作需要MON51或dScope51forWindows,後面部分將對Monitor51做較為詳細%)tScope51與dScope51不同的是Scope51必須帶目標板,目前它可以通過兩種方式訪問目標板。

(1)通過EMul51線上模擬器,tScope51為該模擬器準備了一個動態連接檔EMUL51.IOT,但該方法必須配合該模擬器。

(2)通過Monitov51監控程序,這種方法是可行的,tScope51為訪問Monitor51專門帶有MON51.IOT連接程式,使用時可通過串口及監控程序來調試目標板。
其使用方法為:TS51[INIT(file_name.ini)]其中file_name.ini為一個初使化檔。
進入TS51後,必須裝入IOT檔,可用的有MON51.IOT及EMUL51.IOT兩種,如裝入MON51.IOT: Load.C:\C51\TS51\MON51.IOTCPUTYPE(80517)可惜的是tScope51只有forDos的版本。

(3)Monitor51Monitor51是一個監控程序通過PC機的串口與目標板進行通信,Monitor操作需要MON51或dScope51forWindows,後面部分將對Monitor51做較為詳細的介紹。

4.Ishell及uVision
(1)IshellforDos這是一個forDos的IDE,直接在命令行鍵入Ishell,則進入該環境,它使用簡單方便。
其命令行與DOS命令行具有同樣的功能,對單模組的Project直接由功能表進行編譯連接,對多模組的project。
則通過批次處理,BAT檔進行編譯連接,然後通過功能表控制由dScope51或tScope51對程式進行調試,因為是fordos的,不做太詳細介紹。
(2)uVisionforWindowsuVisionforWindows是一個標準的Windows應用程式,它是C51的一個集成軟體發展平臺,具有源代碼編輯、project管理、集成的make等功能,它的人機界面友好,操作方便,是開 發者的首選,具體配置及使用見第五部分。
第二章KeilC51軟體使用詳解第一節KeilC51編譯器的控制指令C51編譯器的控制指的介紹。

4.Ishell及uVision
(1)IshellforDos這是一個forDos的IDE,直接在命令行鍵入Ishell,則進入該環境,它使用簡單方便。
其命令行與DOS命令行具有同樣的功能,對單模組的Project直接由功能表進行編譯連接,對多模組的project。
則通過批次處理,BAT檔進行編譯連接,然後通過功能表控制由dScope51或tScope51對程式進行調試,因為是fordos的,不做太詳細介紹。
(2)uVisionforWindowsuVisionforWindows是一個標準的Windows應用程式,它是C51的一個集成軟體發展平臺,具有源代碼編輯、project管理、集成的make等功能,它的人機界面友好,操作方便,是開 發者的首選,具體配置及使用見第五部分。
第二章KeilC51軟體使用詳解第一節KeilC51編譯器的控制指令C51編譯器的控制指令分為三類:原始檔案控制類,目標檔控制類及列表控制類。

1.原始檔案控制類NOEXTEND:C51原始檔案不允許使用ANSIC擴展功能。
DEFINE(DF):定義預處理(在C51命令行)。

2.目標檔(Object)控制類:COMPACTLARGESMALL選編譯模式DEBUG(DB)包含調試資訊,以供模擬器或dSCope51使用。
NOAMAKE(NOAM)禁止AutoMake資訊記錄NOREGPARMS禁止用寄存器傳遞參數OBJECTEXTEND(OE)Object檔包含附加變數類型資訊OPTIMIZE(OT)指定優化級別REGFILE(RF)指定一個寄存器使用的檔以供整體優化用REGISTERBANK(RB)指定一個供絕對寄存器訪問的寄存器區名SRC不生成目標檔只生成彙編原始檔案 其他控制項不常用。

3.列表文件(listing)控制類:CODE(CD):向列表文件加入彙編列表令分為三類:原始檔案控制類,目標檔控制類及列表控制類。

1.原始檔案控制類NOEXTEND:C51原始檔案不允許使用ANSIC擴展功能。
DEFINE(DF):定義預處理(在C51命令行)。

2.目標檔(Object)控制類:COMPACTLARGESMALL選編譯模式DEBUG(DB)包含調試資訊,以供模擬器或dSCope51使用。
NOAMAKE(NOAM)禁止AutoMake資訊記錄NOREGPARMS禁止用寄存器傳遞參數OBJECTEXTEND(OE)Object檔包含附加變數類型資訊OPTIMIZE(OT)指定優化級別REGFILE(RF)指定一個寄存器使用的檔以供整體優化用REGISTERBANK(RB)指定一個供絕對寄存器訪問的寄存器區名SRC不生成目標檔只生成彙編原始檔案其他控制項不常用。

3.列表文件(listing)控制類:CODE(CD):向列表文件加入彙編列表LISTINCLUDE(LC):顯示indude檔SYMBOLS(SB):列表檔包括模組內所有符號的列表WARNINGLEVEL(WL):選擇“警告”級別第二節dScope51的使用1.dScope51forDos總的來說dScope51具有以下特性:●高階語言顯示模式 ●集成硬體環境類比●單步或“GO”執行模式●記憶體、寄存器及變數訪問●Watch運算式之值●函數與信號功能下面,具體說明在進入dScope51forDos之後,如何實現上述功能,dScope51採用下拉功能表格式和視窗顯示控制,共有language、serial、exe、register四個視窗,其中exe為命令行視窗,language為程式視窗,serial為串口窗,register為寄存器窗。

标签: #后缀名 #文件夹 #文件夹 #圆弧 #网页 #网页 #道具 #cad