Keil C51中变量的使用

合集下载

KEILC51和PROTEUS的使用

KEILC51和PROTEUS的使用

KEILC51和PROTEUS的使用KEILC51是一款针对51系列单片机的集成开发环境,可以方便地进行编译、调试和仿真。

PROTEUS是一款集成电路设计软件,可以用于电路图的设计、仿真和调试。

本文将介绍KEILC51和PROTEUS的使用方法。

一、KEILC51的安装和使用2. 安装完成后,打开KEIL C51,创建一个新项目。

选择新建一个“Project”。

在对话框中输入项目名称,并选择项目的存放路径。

3.在项目内部,可以添加源文件、库文件和头文件。

可以通过右键单击项目名称,选择“添加”,然后选择相应的文件类型进行添加。

4. 在源文件中编写C语言程序。

可以使用标准的C语法进行编写,也可以使用Keil C51提供的51系列特定的语法进行编写。

5. 进行编译和生成可执行程序。

在菜单栏中选择“Project”->“Build Target”,或者使用快捷键“Ctrl+F7”进行编译。

编译完成后,会在项目目录下生成相应的可执行程序。

6. 进行调试和仿真。

在菜单栏中选择“Debug”->“Start/Stop Debug Session”,或者使用快捷键“F5”进行调试。

可以设置断点、单步执行、查看变量值等进行调试。

二、PROTEUS的安装和使用2. 安装完成后,打开PROTEUS,创建一个新电路。

选择“Schematic Capture”->“Design”创建一个新的电路图。

在电路图中添加所需的元件,例如电阻、电容、晶体管等。

3.连接元件之间的引脚,可以使用连线工具进行连线。

在连线时,可以使用自动连接功能快速连接元件之间的引脚。

4.设置仿真属性。

在电路图中选择“P”工具,然后在对话框中选择相应的仿真模型和仿真参数,例如选择51系列单片机的仿真模型。

5. 进行仿真和调试。

在菜单栏中选择“Debug”->“Start Debugging”,或者使用快捷键“F5”进行仿真。

可以查看元件的工作状态,观察电路的波形等进行调试。

keil c51 详细中文手册

keil c51 详细中文手册

Keil C51使用详解V1.0第一章 Keil C51开发系统基本知识 (6)第一节系统概述 (6)第二节Keil C51单片机软件开发系统的整体结构 (6)1. C51 for Dos 72. C51 for Windows的安装及注意事项: (7)第四节Keil C51工具包各部分功能及使用简介 (7)1. C51与A51. 72. L51和BL51. 83. DScope51,Tscope51及Monitor51. 84. Ishell及uVision. 9第二章 Keil C51软件使用详解 (10)第一节Keil C51编译器的控制指令 (10)1. 源文件控制类 (10)2. 目标文件(Object)控制类: (10)3. 列表文件(listing)控制类: (10)第二节dScope51的使用 (11)1. dScope51 for Dos 112. dScope for Windows 12第三节Monitor51及其使用 (13)1. Monitor51对硬件的要求 (13)2. Mon51的使用 (13)3. MON51的配置 (13)4. 串口连接图: (13)5. MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1. Ishell for Dos的使用 (14)2. uVision for windows的使用 (15)第三章 Keil C51 vs 标准C.. 15第二节内存区域(Memory Areas): (16)1. Pragram Area: (16)2. Internal Data Memory: 163. External Data Memory. 164. Speciac Function Register Memory. 16第三节存储模式 (16)1. Small模式 (16)2. Compact模式 (17)3. large模式 (17)第四节存储类型声明 (17)第五节变量或数据类型 (17)第六节位变量与声明 (17)1. bit型变量 (17)2. 可位寻址区说明20H-2FH.. 18第七节Keil C51指针 (18)1. 一般指针 (18)2. 存储器指针 (18)3. 指针转换 (18)第八节Keil C51函数 (19)1. 中断函数声明: (19)2. 通用存储工作区 (19)3. 选通用存储工作区由using x声明,见上例。

51单片机位操作

51单片机位操作

C51单片机位操作方法[日期:2010-10-21 ] [来源:本站原创作者:佚名] [字体:大中小] (投递新闻)C51对位的操控能力是非常强大的。

从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点。

这也是在各个领域中都可以看到C的重要原因。

在这一节中将详细讲解C51中的位操作及其应用。

1、位运算符C51提供了几种位操作符,如下表所示:运算符含义运算符含义&按位与~取反|按位或<<左移^按位异或>>右移1)“按位与”运算符(&)参加运算的两个数据,按二进位进行“与”运算。

原则是全1为1,有0为0,即:0&0=0; 0&1=0; 1&0=0; 1&1=1;如下例:a=5&3; //a=(0b 0101) & (0b 0011) =0b 0001 =1那么如果参加运算的两个数为负数,又该如何算呢?会以其补码形式表示的二进制数来进行与运算。

a=-5&-3; //a=(0b 1011) & (0b1101) =0b 1001 =-7在实际的应用中与操作经常被用于实现特定的功能:1.清零“按位与”通常被用来使变量中的某一位清零。

如下例:a=0xfe; //a=0b 11111110a=a&0x55;//使变量a的第1位、第3位、第5位、第7位清零a= 0b 01010100 2.检测位要知道一个变量中某一位是‘1’还是‘0’,可以使用与操作来实现。

a=0xf5; //a=0b 11110101result=a&0x08; //检测a的第三位,result=03.保留变量的某一位要屏蔽某一个变量的其它位,而保留某些位,也可以使用与操作来实现。

a=0x55; //a=0b 01010101a=a&0x0f; //将高四位清零,而保留低四位a=0x052)“按位或”运算符(|)参与或操作的两个位,只要有一个为‘1’,则结果为‘1’。

keil 使用教程

keil 使用教程

Keil C51使用教程---开发系统基本知识(一)第一节系统概述Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

用过汇编语言后再使用C来开发,体会更加深刻。

Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows 界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

下面详细介绍Keil C51开发系统各部分功能和使用。

第二节 Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,如图(1)所示,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及A51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

图(1) C51工具包整体结构图第三节 Keil C51工具包的安装1. C51 for Dos在Windows下直接运行软件包中DOS\C51DOS.exe然后选择安装目录即可。

完毕后欲使系统正常工作须进行以下操作(设C:\C51为安装目录):修改Autoexec.bat,加入path=C:\C51\BinSet C51LIB=C:\C51\LIBSet C51INC=C:\C51\INC然后运行Autoexec.bat2. C51 for Windows的安装及注意事项:在Windows下运行软件包中WIN\Setup.exe,最好选择安装目录与C51 for Dos 相同,这样设置最简单(设安装于C:\C51目录下)。

Keil_C51_μVision4的使用

Keil_C51_μVision4的使用

Keil C51 μVision4的使用Keil C51 μVision4是美国Keil Software公司出品的51系列兼容单芯片C语言整合发展环境(Integrated Development Environment, IDE),与汇编语言相比,C语言在功能上、架构性、可讀性、可维护性上有明显的优势,因而易学易用。

用过汇编语言后再使用C语言來开发,会更加体会深刻。

目前最新的版本是C51 Version 9.00 Release,也就是所谓的μVision4。

Keil C51软件提供丰富的函數库和功能强大的除错工具,及全窗口界面。

另外重要的一点,只要看一下编译后生成的汇编语言代码,就能体会到Keil C51生成的目标代码效率非常之高,多數语句生成的汇编语言代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的便利与优势。

Keil C51 μVision4较之前的版本,新增了下面几个功能:多重的监控和弹性的窗口管理系统。

系统查看器(System Viewer) - 显示设备周边缓存器的讯息。

除错恢復检视(Debug Restore Views) - 建立和储存多重除错窗口设计。

多项目工作区(Multi-Project Workspace) - 与许多项目简化工作。

源码和解组译連结(Source and Disassembly Linking) - 解组译窗口和源码窗口完全同步使程序除错和光标导航较容易。

内存窗口固定(Memory Window Freeze) - 储存目前内存窗口检视允许容易在不同的点及时比较。

设备模拟- 更新支持很多新设备(例如Infineon XC88x,SiLABS C8051Fxx,Atmel SAM7/9和从Luminary, NXP, and Toshiba 來的Cortex M3 MCUs)。

支持硬件除错转接器(Support for Hardware debug adapters) - 包括ADI。

第6章_Keil_C51软件使用说明

第6章_Keil_C51软件使用说明

第6章单片机的C51语言编程6.1 C51源程序的基本结构和常用的头文件6.2 C51的基本数据类型、数据存储类型和存储模式6.3 C51的运算符6.4 C51的函数6.5 单片机的C51语言编程6.6 C51和汇编语言的混合编程汇编语言:优点:面向机器、目标代码短、占用存储器空间少、运行快。

缺点:指令助记符多、编程灵活性差。

C语言:优点:具有面向机器和面向用户的特点,良好的可读性﹑易维护性和可移植性,对硬件的控制能力也很强,C语言的数据类型及运算符丰富,具有良好的程序结构。

缺点:代码效率稍低(同汇编语言相比),占用存储空间较大。

解决方法:单片机内部都嵌入了大容量的Flash ROM,有效的弥补了这个缺陷。

采用Keil C51语言编程的优点:(1)不需要对单片机的汇编语言指令系统有深入的了解;(2)寄存器分配﹑不同存储器的寻址及数据类型等完全由编译器自动管理;(3)程序的结构规范,由一个主函数和不同功能的子函数组成;(4)自带的库中包含许多标准子函数,具有较强的数据处理能力,方便使用;(5)C语言和汇编语言可以联合使用。

可用汇编语言编写与硬件有关的程序,用C语言编写与硬件无关的运算部分。

6.1 C51源程序的基本结构和常用的头文件6.1.1 C51源程序的基本结构文件的扩展名为“.c”。

由主函数和若干子函数组成。

预处理命令//例如:include, define等全局变量说明//例如:int a,b;main(){局部变量说明执行语句(包括子函数的调用语句)}func1(形式参数及说明)//子函数1 { 局部变量说明执行语句(包括调用其它子函数语句)…}……funcn(形式参数及说明)//子函数n { 局部变量说明执行语句…}C51编程时应注意的问题:(1)C51源程序是由函数组成的:主函数和子函数。

(2)一个函数由两个部分组成,分别是函数说明部分和函数体。

函数说明: 函数名﹑函数类型﹑函数属性﹑函数参数(形参)名﹑形式参数类型。

keil c51中的异或运算

Keil C51中的异或运算1. 引言在Keil C51开发环境中,异或运算是一种常见的位运算,它在嵌入式系统开发中具有重要的应用。

本文将从基础概念、实际应用和个人观点等方面全面评估Keil C51中的异或运算,并撰写一篇有价值的文章,以便读者能全面、深刻地理解这一主题。

2. 基础概念1) 异或运算的定义异或运算,也称为“异或操作”,是一种逻辑运算符,通常用符号“^”表示。

它的基本原理是:两个操作数的对应位相同则结果为0,不同则结果为1。

a ^ b的结果是c,其中a、b、c均为二进制数。

2) 异或运算的特性在计算机系统中,异或运算具有以下特性:- 交换律:a ^ b = b ^ a- 结合律:(a ^ b) ^ c = a ^ (b ^ c)- 对称性:a ^ b ^ b = a3) Keil C51中的异或运算符在Keil C51中,异或运算符“^”用于执行异或运算,可用于位操作和条件判断。

它与其他位运算符(如与“&”和或“|”)具有相似的语法和优先级。

3. 实际应用1) 位操作在嵌入式系统开发中,异或运算常用于对某些位进行修改或切换。

可以使用异或运算清除某个特定位的值,或者将某个特定位的值置为1。

2) 条件判断异或运算还可用于条件判断,例如判定两个变量的值是否相等。

通过a ^ b == 0来实现,若结果为真,则a与b相等;若结果为假,则a与b不等。

4. 个人观点和理解在实际开发中,我发现异或运算在嵌入式系统中有着广泛的应用。

它不仅可以简化位操作的步骤,还可以提高代码的可读性和效率。

我认为在Keil C51开发中,熟练掌握异或运算是非常重要的。

5. 总结和回顾通过对Keil C51中的异或运算进行全面评估,我们了解了其基础概念、实际应用和个人观点等内容。

异或运算作为一种重要的位运算,在嵌入式系统开发中具有广泛的应用,对于提高代码的效率和可读性具有重要意义。

总体而言,异或运算作为一种重要的逻辑运算符,在Keil C51开发中具有非常重要的地位。

KeilC51编译器的控制指令1

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

1. 源文件控制类NOEXTEND:C51源文件不允许使用ANSI C扩展功能。

DEFINE(DF):定义预处理(在C51命令行)。

2. 目标文件(Object)控制类:COMPACT LARGE SMALL 选编译模式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. dScope51 for Dos总的来说dScope51具有以下特性:●高级语言显示模式●集成硬件环境模拟●单步或“GO”执行模式●存储器、寄存器及变量访问●Watch表达式之值●函数与信号功能下面,具体说明在进入dScope51 for Dos之后,如何实现上述功能,dScope51采用下拉菜单格式和窗口显示控制,共有language、serial、exe、register四个窗口,其中exe为命令行窗口,language为程序窗口,serial为串口窗,register为寄存器窗。

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

单片机仿真件Keil C51软件的使用教程(中文版)

单片机仿真软件Keil C51软件的使用教程(中文版)keil uvision2 C51软件是目前功能最强大的单片机c语言集成开发环境,本软件及视频教程可以本站下载。

下面我们通过图解的方式来Keil C51软件的使用教程,学习最简单的,如何输入源程序→ 新建工程→ 工程详细设置→ 源程序编译得到目标代码文件。

第一步:双击Keil uVision2的桌面快捷方式(图1),启动Keil集成开发开发软件。

软件启动后的界面如图2所示。

图1:启动Keil uVision2单片机集成开发环境图2:软件启动后的界面第二步:新建文本编辑窗。

点击工具栏上的新建文件快捷按键,即可在项目窗口的右侧打开一个新的文本编辑窗,见图3所示。

图3:新建文本编辑窗第三步:输入源程序。

在新的文本编辑窗中输入源程序,可以输入C语言程序,也可以输入汇编语言程序,见图4。

图4:输入源程序第四步:保存源程序。

保存文件时必须加上文件的扩展名,如果你使用汇编语言编程,那么保存时文件的扩展名为“.asm”,如果是C语言程序,文件的扩展名使用“*.C ”。

图5:保存源程序注:第3步和第4步之间的顺序可以互换,即可以先输入源程序后保存,也可以先保存后输入源程序。

第五步:新建立Keil工程。

如图6所示,点击 "工程" → "新建工程" 命令,将出现保存对话框(图7)。

图6:新建工程图7:保存工程对话框在保存工程对话框中输入你的工程的文件名,Keil工程默认扩展名为".uv2",工程名称不用输入扩展名(见图7),一般情况下使工程文件名称和源文件名称相同即可,输入名称后保存,将出现"选择设备"对话框(图8),在对话框中选择CPU的型号。

第六步:选择CPU型号。

如图8所示,为工程选择CPU型号,本新建工程选择了ATMEL公司的AT89C51单片机。

图8:选择CPU型号对话框第七步:加入源程序到工程中。

keil 枚举 switch用法(二)

keil 枚举 switch用法(二)Keil枚举Switch用法什么是Keil枚举?在Keil C51或Keil MDK等嵌入式开发环境中,枚举(Enum)是一种数据类型,它用于定义一些常用的数据常量,例如状态、命令、选项等。

Keil枚举提供了一种简洁而有力的方式来组织和使用一组相关的常量。

Switch语句的基本用法在使用Keil枚举时,经常会用到Switch语句。

Switch语句根据枚举变量的值,选择合适的代码执行路径。

下面是Switch语句的基本用法:enum Weekday {Mon, Tue, Wed, Thu, Fri, Sat, Sun}; enum Weekday today = Thu;switch (today) {case Mon:// 当today的值为Mon时,执行这段代码break;case Tue:// 当today的值为Tue时,执行这段代码break;case Wed:// 当today的值为Wed时,执行这段代码break;case Thu:// 当today的值为Thu时,执行这段代码break;case Fri:// 当today的值为Fri时,执行这段代码break;case Sat:// 当today的值为Sat时,执行这段代码break;case Sun:// 当today的值为Sun时,执行这段代码break;}在Switch语句中,每个case后面的值是枚举变量可能的取值。

当Switch语句执行时,会根据枚举变量的值,选择匹配的case块执行。

每个case块可以包含一段或多段代码,在每个case块执行完毕后,需要使用break语句来跳出Switch语句,否则会继续执行下一个case块。

Switch语句的使用注意事项1.Switch语句中的枚举变量必须是整型或字符型。

2.每个case后面的值必须是常量。

3.可以使用default关键字定义一个默认的执行路径,当没有匹配的case时,会执行default块中的代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Keil C51中变量的使用 (1) 关键字:Keil C51 变量 引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额。在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功。由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同。正确地使用变量,有利于获得高效的目标代码。下面详细介绍Keil C51中变量的使用方法。

1 CPU存储结构与变量的关系 变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同。 标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CPU内部有寄存器,外部有存储器,寄存器的访问速度大大高于存储器的访问速度。在标准C中,不加特别定义的变量是放在存储器中的,使用register可以强制变量存储在寄存器中,对于使用特别频繁且数量不多的变量可以选用这种存储模式,以获得更高的工作效率。 相比之下,51内核单片机的存储结构则显得有些怪异,它的存储空间有3个:程序存储器空间(64 KB含片内、片外)、片外数据存储器空间(64KB)、片内数据存储器及特殊功能寄存器空间。它没有真正意义上的寄存器,它的寄存器其实是片内数据存储器(如R0~R7)和特殊功能寄存器(如A、B等)中的一部分。因此,在Keil C51中使用变量就和标准C有很大不同。

2 Keil C51变量分析 Keil C51支持标准C原有的大多数变量类型,但为这些变量新增了多种存储类型,也新增了一些标准C没有的变量。 2.1 Keil C51新增的变量存储类型 Keil C51中定义变量的格式如下: [存储种类]数据类型[存储类型]变量名表; 其中,[存储类型]是标准C中没有的,[存储类型]共有6种,分别介绍如下: ①data。将变量存储在片内可直接寻址的数据存储器中。使用这种存储模式,目标代码中对变量的访问速度最快。 ②bdata。将变量存储在片内可位寻址的数据存储器中。在目标代码中变量可以方便地进行位处理,在不进行位处理时与data相同。 ③idata。将变量存储在片内间接寻址的数据存储器中。在52内核中,当片内直接寻址数据存储器不够用时,可以使用128字节间接寻址数据存储器,访问速度一般较data要慢一些,但具有最大的片内数据存储器空间;在51内核中因无单独的间接寻址数据存储器区,idata与data无区别。 ④xdata。将变量存储在片外数据存储器中。目标代码中只能使用“MOVX A,@DPTR”和“MOVX@DPTR,A”指令访问变量,访问速度最慢,但存储空间最大(64KB)。 ⑤pdata。将变量存储在片外数据存储器中的第一页(00H~FFH)中。目标代码中可以使用“MOVX A,@Ri”和“MOVX@Ri,A”指令访问变量,访问速度与xdata相同,存储空间为256字节。 ⑥code。将变量存储在程序存储器中。目标代码中只能使用MOVC指令访问变量,因变量存储在程序存储器中,具有非易失性且为只读。 2.2 Keil C51新增的指针变量存储类型 Keil C51中的指针变量形式如下: 数据类型[数据存储类型]*[指针存储类型]标识符; 其中,[数据存储类型]和[指针存储类型]都是标准C中没有的。[数据存储类型]定义数据(即寻址对象)存储的空间,[指针存储类型]定义指针自身存储的空间。若不使用[数据存储类型],则指针为一般指针,占用3个字节;若使用[数据存储类型]则指针为基于存储器的指针,占用1~2个字节。 2.3 Keil C51新增的变量类型 bit:位变量。存储在片内数据存储器的可位寻址字节(20H~2FH)的某个位上,这个变量在实时控制中具有很高的实用价值。 sfr:特殊功能寄存器变量。存储在片内特殊功能寄存器中,用来对特殊功能寄存器进行读写操作。 sbit:特殊功能寄存器位变量。存储在片内特殊功能寄存器的可位寻址字节(地址可以被8整除者)的某个位上,用来对特殊功能寄存器的可位寻址位进行读写操作。 sbitl6:16位特殊功能寄存器变量。存储在片内特殊功能寄存器的连续2个字节的低地址上,这个变量类型很少使用。 以上这些Keil C51中新增的变量类型,不支持数组和指针操作。 3 Keil C51中使用变量存储模式的必要性 在Keil C51中,变量的存储模式是一个可选项,如果不使用这个选项,则Keil C51在编译时自动进行优选分配。但这种处理方法有以下缺点: ①系统不知道各种变量的使用频度,有可能对使用频度高的变量使用了访问速度慢的片外存储方式,而对使用频高的变量使用了片内存储方式,使得程序的运行效率降低; ②在使用指针寻址时,由于不知道寻址对象的存储方式,只好使用一般指针,在Keil C51中一般指针要多占用1~2个字节,并且使用时还要对存储方式进行判断,增加了寻址操作时间。 如果能够在定义变量的同时定义其存储类型,可以高效地使用51内核单片机的存储空间,获得高质量的目标代码。

4 Keil C51变量的使用方法 4.1 全局变量和静态局部变量 全局变量一般会在多个函数中被使用,并在整个程序运行期间内有效,静态局部变量虽然只在一个函数中使用,但也是在整个程序运行期间有效。对于这些变量,应尽量选择data型,这样在目标代码中就可以用直接寻址指令访问,获得最高的访问速度,提高程序的工作效率。例如一个保存人数的全局变量n_g,在多个函数中都被经常用到,可以这样定义: unsigned int data n_g;//对n_g赋值时使用“MOV XXH,„„”指令 4.2 数组(包括全局和局部) 定义数组一般用idata存储类型,在目标代码中使用“MOV@Ri”指令进行间接寻址。如果因数组元素过多而在编译时报错,可以改用pdata和xdata存储类型。 数组定义为data存储类型意义不大,因为既然使用数组,就是希望能够根据某一自变量访问数组元素。如定义X[100],一般都是为了能够使用X[i](i是一个变量)来访问,这样在目标代码中就必须使用问接寻址,所以数组没有必要使用data存储类型,即便使用了data存储类型,在目标代码中也仍然要用间接寻址指令。数组定义成idata存储类型,在使用52内核且片内数据存储器不够时,会使用只能间接寻址的片内数据存储空间。这样,既不能降低处理速度,又扩大了可使用的存储空间。 4.3 供查表用的数据 这类数据的特点是需要始终保持不变,且使用时只读,因此应定义为code型。例如一个字形表:

全局或局部code型变量在存储时无区别。 4.4 非静态局部变量 非静态局部变量仅在某一函数内使用,退出该函数时变量也被释放。 若系统使用small存储模式,对于这些变量可以不加存储说明,由编译软件自行按最优原则决定,因为仅在函数内使用的非静态局部变量,有可能使用工作寄存器R0~R7,这样会更快速和更节省存储空间。例如: unsigned char i,j; //系统尽可能会用R0~R7存储i和j 若系统使用了compact或large存储模式,则应将这些变量定义为data存储模式,以防系统自行决定时被定义为pdagta或xdata模式而降低工作效率。 4.5 指针 如前所述,定义指针变量时有2个存储类型:数据存储类型,说明被寻址对象的存储类型;指针存储类型,说明指针自身的存储类型。当数据存储类型为xdata时,指针自身占用2个字节;当数据存储类型为pdata以及idata等片内存储类型时,指针自身占用1个字节;若不说明数据存储类型,指针自身就要占用3个字节。因此,在KeilC51中使用指针时,应尽量定义数据存储类型,但要特别注意指针中的数据存储类型与被寻址对象的存储类型必须一致。指针都是频繁使用的,它要不断被设置、修改和使用,因此它自身的存储类型应选择data型。例如定义一个数组时就同时定义其存储类型,以后用指针对其寻址时就将数组的存储类型添加到指针的数据类型中。方法如下: 4.6 二义性变量 在标准C中如果要使用一个二义性变量,只能用枚举类型。如:

以上程序在Keil C51中使用时,变量t虽然仅有0和1两种状态,但在目标代码中仍占用一个字节。此处理方法既浪费存储资源,又延长了处理时间,这对于8086内核算不上多大问题,但在资源有限、运行速度不高的51内核中就不能不考虑了。在Keil C51中可使用以下方法:

这两种方式效果是完全相同的,但在目标代码中变量t仅占用1位(即1/8字节),而且因为51内核单片机指令系统中有位处理指令,生成的目标代码占用内存少、运行速度快。 4.7 特殊功能寄存器变量(包括位变量) 特殊功能寄存器中,累加器A、寄存器B、堆栈指针SP和数据指针DPTR是归系统使用的,在C51中不提供给用户。其他的特殊功能寄存器都可以用sfr定义成变量,其中地址可以被8整除者的各位,还可以用bsfr定义成位变量。访问这些变量,就可以对特殊功能寄存器及其可以位寻址的各位进行读写,达到操作单片机内部各硬件的目的。对于标准的51内核单片机,头文件reg51.h、reg52.h或其他头文件中已对这些特殊功能寄存器变量作了定义,用户可以用#include将此头文件包含进来,然后就可以使用了。现在很多51内核兼容型单片机扩展了更多的特殊功能寄存器,这些就需要用户自行定义,具体方法可参考器件的使用说明。 4.8 外部数据存储器变量 若设置成pdata和xdata存储类型,将把变量存储在片外数据存储器中。这两种存储类

相关文档
最新文档