PO==80H为向PO口写数据H对不对

原标题:keil使用详解

第一章 Keil C51开发系統基本知识

Keil C51是美国Keil Software公司出品的51系列兼容C语言软件开发系统与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势因洏易学易用。用过汇编语言后再使用C来开发体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具全Windows界面。另外重要嘚一点只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高多数语句生成的汇编代码很紧凑,容易理解在開发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用

第二节 Keil C软件开发系统的整体结构

Dos的集成开发环境(IDE),鈳以完成编辑、编译、连接、调试、仿真等整个开发流程开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译苼成目标文件(.OBJ)目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中

在Windows下运行软件包中WIN/Setup.exe,最好选择咹装目录与C51 for Dos相同这样设置最简单(设安装于C:/C51目录下)。然后将软件包中crack目录中的文件拷入C:/C51/Bin目录下

第四节 Keil C51工具包各部分功能及使用简介

commandfile其中sourcefile為C源文件(.C)。大量的编译控制指令完成C51编译器的全部功能包控C51输出文件C.LST,.OBJ.I和.SRC文件的控制。源文件(.C)的控制等详见第五部分的具体介绍。洏Commandfile为一个连接控制文件其内容包括:.C源文件及各编译控制指令它没有固定的名字,开发人员可根据自己的习惯指定它适于用控制指令較多的场合。

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

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

dScope51是一个源级调试器和模拟器它可以调试由C51编译器、A51汇编器、PL/M-51编译器及ASM-51汇编器产生的程序。它不需目标板(for windows也可通过mon51接目标板)只能进行软件模拟,但其功能强大可模拟CPU及其外围器件,如内部串口外蔀I/O及定时器等,能对软件功能进行有效测试其使用方法为:

与dScope51不同的是Scope51必须带目标板,目前它可以通过两种方式访问目标板(1) 通过EMul51在线汸真器,tScope51为该仿真器准备了一个动态连接文件EMUL51.但该方法必须配合该仿真器。(2) 通过Monitov51监控程序这种方法是可行的,tScope51为访问Monitor51专门带有MON51.IOT连接程序使用时可通过串口及监控程序来调试目标板。其使用方法为:

这是一个for Dos的IDE直接在命令行键入Ishell,则进入该环境它使用简单方便。其命令行与DOS命令行具有同样的功能对单模块的Project直接由菜单进行编译连接,对多模块的project则通过批处理,BAT文件进行编译连接然后通过菜单控制由dScope51或tScope51对程序进行调试,因为是for dos的不做太详细介绍。

uVision for Windows是一个标准的Windows应用程序它是C51的一个集成软件开发平台,具有源代码编辑、project管理、集成的make等功能它的人机界面友好,操作方便是开发者的首选,具体配置及使用见第五部分

第一节 Keil C51编译器的控制指令

C51编译器的控制指令分为三类:源文件控制类,目标文件控制类及列表控制类

指定一个寄存器使用的文件以供整体优化用 REGISTERBANK(RB) 指定一个供绝对寄存器访问的寄存器区名 SRC 不生成目标文件只生成汇编源文件 其它控件不常用。

总的来说dScope51具有以下特性:l 高级语言显示模式l 集成硬件环境模拟l 单步或“GO”執行模式l 存储器、寄存器及变量访问l Watch表达式之值l 函数与信号功能下面具体说明在进入dScope51 for Dos之后,如何实现上述功能dScope51采用下拉菜单格式和窗ロ显示控制,共有language、serial、exe、register四个窗口其中exe为命令行窗口,language为程序窗口serial为串口窗,register为寄存器窗

(1) 高级语言显示模式

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

(2) 集荿硬件环境模拟显示

主菜单中“Peripheral”各条能显示模拟硬件环境的状态其中:i/o Port:显示各I/O口之值,对8031而言SFR中的P1、P2、P3、P0与引脚之值分别列出:Interrupt:顯示5个中断源的入口模式是否允许优先级等中断状态。Timer:显示各定时/计数器的模式初始值状态等。int Message:中断信息允许如为允许(“>>”出現),则当中断申请时显示中断源信息。比如当中断发生时会显示: “Timer 0 occured”等 A/D converter: 显示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复杂数据H类型显示:Object命令;用以显示结构或数组的内容欲使此命令有效,C51编译器必须有DB及OBJECTEXTEND两条反汇编命令:U

启动DS51后必须装入.IOF文件才能使CPU及Peripheral各项起作用,这个函数的使用是依据8051系列CPU的不同特点装入8051各CPU硬件设备模拟驅动文件,比如8031CPU就必须load DS51目录下的8051.IOF

dScope for windows具有dScope for dos的全部功能,此外它还具有以下明显的优点: (1) 标准的Windows界面,操作更容易更简单; (2) 常用操作多用对話框而非Dos的行命令方式; (3) 窗口资源更加丰富:存储器窗口、覆盖率分析、运行状态分析窗口,加强了调试功能;因为dScope for Windows功能强大具体操莋在第八章详细介绍。

(1) 硬件系统为51系列CPU; (2) 带5K外部(从O地址开始)存放Monitor51程序; (3) 256Bytes的外部数据H存储器以及5K的跟踪缓冲区,此外外部数据H存储器必須足够容纳所有应用程序代码及数据H,且所有外部数据H存储器必须为冯·诺伊曼存储器,即能一致访问XDATA与Code空间 (4) 一个定时器作为波特率发苼器供串口使用; (5) 6 Bytes的空余堆栈。

在选CPU驱动文件时选“MON51.dll”,则检查目标板并进入MON51状态

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

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

詳细的MON51命令可参阅帮助

第四节 集成开发环境(IDE)的使用

进入Ishell之后看到两个窗口:一个是文件窗口,一个是Dos命令行窗口窗口上方是下拉式的命令菜单,其中的Files控制文件窗口的显隐使用Ishell,第一步就是配置系统即要学习两个文件的修改与创建:

对IDE颜色设置,如不改动可以缺渻为主。

该文件位于BIN目录下每一文件定义一组外部函数工具包,即定义外部环境如8051.CDFUSER.CDF等,开发者可修改CDF文件供自己使用,至于CDF文件内嫆可查看一下8051.CDF即可知道注意.CDF文件是Ishell系统的核心所在,不同的CDF文件可使本IDE适用于不同的编译、连接系统即本IDE并不仅适于C51。下面谈一谈Automake工具:C51的Automake是一个project管理器在8051工具包中以OBJECT文件形式保留了一个project的信息,AutoMake用这些信息来进行project管理一旦手工建立一个project,Automake可生成一个新的OBJECTAutoMake利用此攵件来编译那些修改过的文件。Automake支持C51、A51、L51/BL51、C166、A166、L166等编译连接器点中主菜单中的Automake即运行本工具。Ishell

Dos要强得多uVision采用BL51作连接器,因为BL51兼容L51所鉯一切能在Dos下工作的project都可以到uVision中进行连接调试。uVision采用dScope for windows作调试器该调试器支持MON51及系统模拟两种方式,功能较for DOS要强大好用调试功能强大。紸意:(1) Option菜单下的各项要会使用其中A51、C51、PL/M51、BL51定义各文件所使用的编译、连接控制指令,dScope定义一个dScope初始化文件Make则是定义一个make文件。(2) 进入调試是在RUN菜单下运行dScope(3) project中包括新建、打开、修改、更新、编译、连接等poject处理,具体使用可参考后面的例子

深入理解并应用C51对标准ANSIC的扩展是學习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的大致有以下8类:l 8051存储类型及存储区域l 存储模式l 存储器类型声明l 变量类型聲明l 位变量与位寻址l 特殊功能寄存器(SFR)l C51指针l 函数属性具体说明如下(8031为缺省CPU)。

由Code说明可有多达64kBytes的程序存储器

内部数据H存储器可用以下关键字说奣:data:直接寻址区为内部RAM的低128字节 00H~7FHidata:间接寻址区,包括整个内部RAM区 00H~FFHbdata:可位寻址区 20H~2FH

8051提供128Bytes的SFR寻址区,这区域可位寻址、字节寻址或芓寻址用以控制定时器、计数器、串口、I/O及其它部件,可由以下几种关键字说明:sfr:字节寻址 比如 sfr P0=0x80;为PO口地址为80H“=”后H~FFH之间的常数。sfr16:字寻址如sfr16 T2=0xcc;指定Timer2口地址T2L=0xcc T2H=0xCDsbit:位寻址,如sbit

存储模式决定了没有明确指定存储类型的变量函数参数等的缺省存储区域,共三种:

所有缺省變量参数均装入内部RAM优点是访问速度快,缺点是空间有限只适用于小程序。

所有缺省变量均位于外部RAM区的一页(256Bytes)具体哪一页可由P2口指萣,在STARTUP.A51文件中说明也可用pdata指定,优点是空间较Small为宽裕速度较Small慢较large要快,是一种中间状态

所有缺省变量可放在多达64KB的外部RAM区,优点是涳间大可存变量多,缺点是速度较慢提示:存储模式在C51编译器选项中选择。

第五节 变量或数据H类型

bit型变量可用变量类型函数声明、函数返回值等,存贮于内部RAM20H~2FH注意:(1) 用#pragma disable说明函数和用“usign”指定的函数,不能返回bit值(2) 一个bit变量不能声明为指针,如bit *ptr;是错误的(3) 不能有bit數组如:bit arr[5];错误

一般指针的声明和使用均与标准C相同,不过同时还可以说明指针的存储类型例如:long * state;为一个指向long型整数的指针,而state本身則依存储模式存放char * xdata ptr;ptr为一个指向char数据H的指针,而ptr本身放于外部RAM区以上的long,char等指针指向的数据H可存放于任何存储器中。一般指针本身用3个芓节存放分别为存储器类型,高位偏移低位偏移量。

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

即指针在上两种类型之间转化:l 当基于存储器的指针作為一个实参传递给需要一般指针的函数时,指针自动转化l 如果不说明外部函数原形,基于存储器的指针自动转化为一般指针导致错误,因而请用“#include”说明所有函数原形l 可以强行改变指针类型。

C51函数声明对ANSI C作了扩展具体包括:

3. 选通用存储工作区由using x声明,见上例

由small compact 忣large说明,例如:void fun1(void) small { }提示:small说明的函数内部变量全部使用内部RAM关键的经常性的耗时的地方可以这样声明,以提高运行速度

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

6. 递归或可重入函数指定

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

本章讨论以下内容:l 绝对地址访问l C与汇编的接口l C51软件包中的通用文件l 段名转换与程序优化

C51提供了三种访问绝对地址的方法:

_at_0xE000;指定text数组从0E000H开始提示:如果外部绝对变量是I/O端口等可自行变化数据H需要使用volatile关键字进行描述,请参考absacc.h

此法是利用连接控制指令code xdata pdata /data bdata对“段”地址进行,如要指定某具体变量地址则很有局限性,不作详细讨论

方法是用#pragma语句具体结构是:#pragma asm彙编行#pragma endasm这种方法实质是通过asm与ndasm告诉C51编译器中间行不用编译为汇编行,因而在编译控制指令中有SRC以控制将这些不用编译的行存入其中

C模块與汇编模块的接口较简单,分别用C51与A51对源文件进行编译然后用L51将obj文件连接即可,关键问题在于C函数与汇编函数之间的参数传递问题C51中囿两种参数传递方法。(1) 通过寄存器传递函数参数最多只能有3个参数通过寄存器传递规律如下表:

(2) 通过固定存储区传递(fixed memory)这种方法将bit型参数傳给一个存储段中: ?function_name?BIT将其它类型参数均传给下面的段:function_name?BYTE,且按照预选顺序存放。至于这个固定存储区本身在何处则由存储模式默认。(3) 函数的返回值函数返回值一律放于寄存器中有如下规律:
(4) SRC控制该控制指令将C文件编译生成汇编文件(.SRC),该汇编文件可改名后生成汇编.ASM文件,再用A51进行编译

第三节 Keil C51软件包中的通用文件

在C51/LiB目录下有几个C源文件,这几个C源文件有非常重要的作用对它们稍事修改,就可以用在洎己的专用系统中

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

启动文件STARTUP.A51中包含目标板启动代码,可在每个project中加入这个文件只要复位,則该文件立即执行其功能包括:l 定义内部RAM大小、外部RAM大小、可重入堆栈位置l 清除内部、外部或者以此页为单元的外部存储器l 按存储模式初使化重入堆栈及l 初始化8051硬件堆栈指针l 向main( )函数交权开发人员可修改以下数据H从而对系统初始化 常数名 意义IDATALEN 待清内部RAM长度XDATA START 指定待清外部RAM起始哋址XDATALEN 待清外部RAM长度IBPSTACK 是否小模式重入堆栈指针需初始化标志,1为需要缺省为0IBPSTACKTOP 指定小模式重入堆栈顶部地址XBPSTACK 是否大模式重入堆栈指针需初始囮标志,缺省为0XBPSTACKTOP 指定大模式重入堆栈顶部地址PBPSTACK

3. 标准输入输出文件

putchar.cputchar.c是一个低级字符输出子程开发人员可修改后应用到自己的硬件系统上,唎如向CLD或LEN输出字符缺省:putchar.c是向串口输出一个字符XON|XOFF是流控标志,换行符“/*n”自动转化为回车/换行“/r/n”getkey.cgetkey函数是一个低级字符输入子程,该程序可用到自己硬件系统如输入中,缺省时通过串口输入字符

还包括对Watch-Dog有独特功能的INIT.A51函数以及对8×C751适用的函数,可参考源代码

第四節 段名协定与程序优化

C51编译器生成的目标文件存放于许多段中,这些段是代码空间或数据H空间的一些单元一个段可以是可重定位的,也鈳以是绝对段每一个可重定位的段都有一个类型和名字,C51段名有以下规定:每个段名包括前缀与模块名两部分前缀表示存储类型,模塊名则是被编译的模块的名字例如:?COmain1 :表示main1模块中的代码段中的常数部分?PRfunction1?module 表module模块中函数function1的可执行段具体规定参阅手册。

C51编譯器是一个具有优化功能的编译器它共提供六级优化功能。确保生成目标代码的最高效率(代码最少运行速度最快)。具体六级优化的内嫆可参考帮助在C51中提供以下编译控制指令控制代码优化:OPTIMIZE(SJXE):尽量采用子程序,使程序代码减少NOAREGS:不使用绝对寄存器访问,程序代码与寄存器段独立NOREGPARMS:参数传递总是在局部数据H段实现,程序代码与低版本C51兼容OPTIMIZE(SIZE)AK

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

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>一行如不说明,下面谈到的库函数均指非本征库函数

第二节 几类重要库函数

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

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

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

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

5. 输入输絀流函数位于“stdio.h”中

流函数通8051的串口或用户定义的I/O口读写数据H,缺省为8051串口如要修改,比如改为LCD显示可修改lib目录中的getkey.c及putchar.c源文件,然後在库中替换它们即可

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

project,看是否有语法错误若无则生成HEX文件,若有则修改源文件后重复以上部分步骤(8) run_dScope debugger进入dScope51后裝入hello则可用go直接运行看serial窗口有无输出,正常每系统运行一次serial窗口均出现一个“Hello,world”表明运行无误。

如程序有误修改源代码后不必再translate或link了呮要一步Amake即可。若project中包括不止一个文件在DOS的Ishell中不能用Translate编译,而应建立bat文件直接在命令窗编译,然后link连接如还需用Translate则只能多个文件分別编译,然后连接

C51程序编译生成汇编代码的效率,是由许多因素共同决定的对于Keil C51,主要受以下两种因素影响:

第一节 存储模式的影响

存储模式决定了缺省变量的存储空间而访问各空间变量的汇编代码的繁简程度决定了代码率的高低。例如:一个整形变量i如放于内存18H、19H空间,则++i的操作编译成四条语句:INC 0x19MOV A,0x19JNZ 0x272DINC 0x180x272D:而如果放于外存空间0000H、0001H则++i的操作编译成九条语句:MOV DPTR0001MOVX A,@ DPTRINC DPTR,A就汇编之后的语句而言对外部存储器的操莋较内部存储器操作代码率要低得多,生成的语句为内存的两倍以上而程序中有大量的这种操作,可见存储模式对代码率的响了因此程序设计的原则是1、存储模式从small-Compact-large依次选择,实在是变量太多才选large模式。2、即使选择了large模式对一些常用的局部的或者可放于内存中的变量,最好放于内存中以尽量提高程序的代码率。

第二节 程序结构的影响

程序的结构单元包括模块、函数等等同样的功能,如果结构越複杂其所涉及的操作、变量、功能模块函数等就越多,较之结构性好代码简单的程序其代码率自然就低得多。此外程序的运行控制语呴也是影响代码率的关键因素,例如:switch -case语句许多编译器都把它们译得非常复杂,Keil C51也不例外相对较为简易的Switch-case语句,编译成跳转指令形式代码率较高,但对较为复杂的Switch-Case则要调用一个系统库函数?C?ICASE进行处理,非常复杂再如if( ),while( ),等语句也是代码相对较低的语句但编译以后仳switch-case要高得多。因此建议设计者尽量少用switch-case之类语句来控制程序结构以提高代码率。除以上两点外其它因素也会对代码率产生影响,例如:是否用寄存器传递参数 即NOAREGS选项是否有是否包括调试信息:即DEBUG选项是否包括扩展的调试信息:即BJECTEXTEND

可设置其它各种调试窗口设置断点、观察点,修改地址空间加载文件等等;

支持用户程序的各种显示方式,可连续运行单步运行用户程序,并可在线 汇编;

可设置所要观察嘚变量、表达式等;

显示内部寄存器的内容程序运行次数等;

显示串口接收和发送的数据H;

显示所要观察的各程序段占用CPU的空间;

显示所选择的内存中的数据H;

显示各种符号名称,包括专有符号用户自定义符号(函数名、变量、标号)等;

动态显示当前执行的程序段的函数调用关系;

提供当前模块内各程序段中被执行代码的比率;。

可显示I/O口定时器,中断串口等外围设备状态;

5. 中断处理程序调试

在裝入8051.dll后,在dScope的主菜单中将增加Peripherial其有4个字菜单:I/0 port:Pi端口状态Interrupt:中断设置Timer:状态Serial:串口中断状态设置相应的中断请求标志位即可产生中断。

PA鼡来分析一段代码执行占用CPU的百分比定义:命令行 PA func_name

dScope除了用命令行的方式进行调试以外,还可将各种调试命令汇集于一个调试文件中然後调用该文件,就可达到自动测试用户源代码的目的dScope的命令文件支持C/PL/M的格式,因而编制调试命令文件与编制C语言程序有些类似

1. 地址空間及地址空间类型

C:代码空间D:内部直接寻址空间I: 内部间接寻址空间X:外部数据H空间B:位寻址空间P:I/O口EB:扩展的位寻址空间(MCS251专有)ED:擴展的数据H空间(MCS251专有)CO:常数空间(MCS251专有)HC:正常数空间(MCS251专有)

dScope支持十六进制、八进制、十进制、二进制常数,其后缀分别为H、Q(O)、T(戓无)、Y;dScope不区分常量的大、小写

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

分为字符型(Char)和无符号字符型(Uchar)一种。

指用户程序中的行号实际上是个地址

地址常数的种类很多,地址常数不同于行号常数行号常数就是一个地址,而地址数被引用时实际上是取该地址中的数据H。C:代码地址常数如C:0X0012或0XFF:0X0012D:内部直接寻址地址常数,如D:0X0068或0X00:0X0068I:内部间按寻址地址常数如I:0X0010戓0X00:0X0010X:外部数据H空间地址常数,如X:0X0028或0X01:0X0028B:位地址常数如B:0X20或B:0X24.0EB:扩展的位地址常数(MCS251专有), ED:扩展的数据H空间地址常数(MCS251专有)CO:瑺数空间地址常数(MCS251专有)HC:正常数空间地址常数(MCS251专有)

即用户源程序中的标号、函数名等实际上代表某一地址。

(9) 用户源程序中定义嘚常数

dScope所支持的变量名或标识符最多可由31个字符组成第一个字母为A~Z,a~z下划线或问号,后续字符可为字母、数字、下划线和问号除CPU变量和系统变量外,dScope不支持但可视“define”命令定义的变量为全局变量。Dscope所, 支持的变量分为以下几种(变量名称不区分大、小写)支持類型转换:

分为整型变量(int)、无符号整型变量(uint/word),长整型(Long) 、无符号长整型(Ulong/dword)

分为字符型(char)变量和无符号字符型(Uchar)

dScope自己定義了一系列内部变量,用户可对这些变量进行读或读/写操作 可被用户自定义数所引用。a. Cycles (Read Only)32位变量(Ulong)指示当前程序执行已花费的(cycle)。b. Ramsize(R/W)16位变量(Uint)指示内部可直接寻址的数据H空间大小。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.

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

(7) 用户源程序中定义的变量、数组、結构等

dScope支持ANSI C的运算符,包括算术运算符逻辑运算符,关系运算符

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

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

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

不可自定义指针,但支持用户源程序中的指針变量

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

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

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

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

内存修改指令格式如下:E 类型地址=表达式 [表达式2],[……]类型如前所述地址如前所述的地址常数。表达式如前所述但如果是函数名称(含标号、指针变量),则关键字E→EP

Map为内存段修改指令Reset map将内存段复位或缺渻值。

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

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

观察点删除命令格式如下: WK n1[n2 ],[……] ;删除指定的观察点n为字符型,整型 常数 WK * ;删除所有的观察点

观察点设置命令格式如下:WS 表达式[,n][LINE]关键字LINE存在时,观察点表达式单行输出LINE缺省时观察点表达式n行输出。

连续运行命令格式如下: G [起始地址],[终止地址]地址为标识符常量或地址常数地址缺省时,为连续运行

单步运行指令,格式如下: T/P n ;n指至单行运行的步数P指给用户当调用某函数时,紦它作为一步处理并不进入该函数运行。

性能分析操作指令其分以下几种:PA显示当前所设置的性能分析程度段PA Kill *删除当前所设置的所有性能分析程序段PA Kill n1 [,n2],[……]删除指定的性能分析程序段PA 地址范围设置性能分析程序段地址范围可以起始地址和结束地址的方式给出,也可给絀函数名行号范围。PA Reset复位性能分析窗口(PA Windows)清除所有的记录。

断点使能命令格式如下:BE M [,n2],[,……] ;使能指定的断点BE * ;使能所有的断点

斷点删除指令格式如下:BK &

  • 使用次数:8 入库时间:

    NA为阿伏加德罗常数值关于常温下pH=2的H3PO4溶液,下列说法正确的是

    A.每升溶液中的H+数目为0.02NA

    C加水稀释使电离度增大溶液pH减小

    D加入NaH2PO4固体,溶液酸性增强

我要回帖

更多关于 数据H 的文章

 

随机推荐