关键词不能为空

当前您在: 主页 > 英语 >

keilc51_使用详解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 22:09
tags:

-

2021年3月3日发(作者:amazing)

























Keil C51












V1.1





















































使用详解






































电子设计世界!版权所有,欢迎转 贴,请勿修改并注明出处。保留


一切权利。


?






... 6


开发系统基本知识


Keil C51


第一章.



第一节



系统概述


... 6



第二节



Keil C51


单片机软件开发系统的整体结构


... 6



第三节



Keil C51


工具包的安装


... 7










1. C51 for Dos 7










2. C51 for Windows


的安装及注意事项:


... 7



第四节



Keil C51


工具包各部分功能及使用简介


... 7










1. C51



A51. 7










2. L51



BL51. 8










3. DScope51



Tscop e51



Monitor51. 8










4. Ishell



uVision. 9



第二章


Keil C51


软件使用详解


... 10



第一节



Keil C51


编译器的控制指令


... 10










1.


源文件控制类


... 10










2.


目标文件


(Object)


控制类:


... 10










3.


列表文件


(listing)


控制类:


... 10



第二节



dScope51


的使用


... 11










1. dScope51 for Dos 11










2. 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



... 15



的使用


2. uVision for windows









第三章


Keil C51 vs


标准


C.. 15



第一节



Keil C51


扩展关键字


... 15



第二节



内存区域


(Memory Areas)



... 16










1. Pragram Area



... 16










2. Internal Data Memory: 16










3. External Data Memory. 16










4. 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


声明,见上例。


... 19


指定存储模式




4.








5. #pragma disable. 19











... 19



递归或可重入函数指定


6.

















7.


指定


PL/M



51


函数


... 20



... 19



第四章


Keil C51


高级编程


... 20



第一节



绝对地址访问


... 20










1.


绝对宏:


... 20










2. _at_


关键字


... 21










3.


连接定位控制


... 21



第二节



Keil C51


与汇编的接口


... 21










1.


模块内接口


... 21










2.


模块间接口


... 21



第三节



Keil C51


软件包中的通用文件


... 22











1.


动态内存分配


... 22











2. C51


启动文件


STARTUP.A51. 22











3.


标准输入输出文件


... 25











4.


其它文件


... 25



第四节



段名协定与程序优化


... 25











1.


段名协定


(Segment Naming Conventions) 25











2.


程序优化


... 25



第五章


Keil C51


库函数参考


... 26



第一节



本征库函数


(intrinsic routines)


和非本征证库函数


... 26



第二节



几类重要库函数


... 26



1.


专用寄存器


include


文件


... 26



2.


绝对地址


include


文件


absacc.h. 26



3.


动态内存分配函数,位于


std lib.h



... 27



4.


缓冲区处理函数位于“


stri ng.h


”中


... 27



5.


输入输出流函数,位于“


std io.h


”中


... 27



第三节



Keil C51


库函数原型列表


... 27



1. CTYPE.H.. 27



2. INTRINS.H.. 27



3. STDIO.H.. 28



4. STDLIB.H.. 28



5. STRING.H.. 28



第六章


Keil C51


例子:


Hello.c.. 29



第一节



uVision for Windows


的使用步骤


... 29



第二节



Ishell for Dos


使用步骤


... 30



第七章


Keil C51


的代码效率


... 30



第一节



存储模式的影响


... 30



第二节



程序结构的影响


... 31



第八章


dScope for Windows


使用详解


... 32


第一节



概述


... 32



1.


主窗口(


Mainframe Window



... 32



2.


调试窗口(


DEBUG



Window



... 32



3.


命令窗口(


Command Window



... 32



4.


观察窗口(


Watch Window



... 32



5.


寄存器窗口(


Registe Window



... 32



6.


串口窗口(


Serical Windows



... 32




7.


性能分析窗口


... 32



8.


内存窗口(


Memory Window



... 32



9.


符号浏览窗口(


Symbol Browser Window



... 33



10.


调用线窗口(


Call



Stack Window



... 33



11.


代码覆盖窗口


... 33



12.


外围设备窗口


(peripherals) 33



第二节



dScope for Windows


基本操作


... 33



1.


指定初始化文件


... 33



... 33



观察变量


2.



3.


显示


RAM

的值


... 34



4.


观察堆栈


... 34



5.


中断处理程序调试


... 34



6.


性能分析(


Performance Analyzer



PA



... 34



第三节



dScope for Windows


命令文件的编制


... 34



1.


地址空间及地址空间类型


... 34



2.


常量


... 35



3.


变量


... 36



4.


运算符


... 38



5.


表达式


... 38



6.


数组


... 38



7.


结构和联合


... 38



8.


指针:


... 38



9. dScope


命令语句


... 38



10.


函数


... 43


















第一章


Keil C51


开发系统基本知识




第一节



系统概述








Keil C51


是美国


Keil S oftware


公司出品的


51


系列兼 容单片机


C


语言软件开发系统,


与汇编 相比,


C


语言在功能上、


结构性、


可读性、


可维护性上有明显的优势,


因而易 学易用。


用过汇编语言后再使用


C


来开 发,体会更加深刻。




Window s


软件提供丰富的库函数和功能强大的集成开发调试工具,


全< /p>


C51Keil







界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体


会到


Keil C51


生成的目标代码效率非常之高,


多数语句生 成的汇编代


码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。








下面详细介绍


Keil C51


开发系统各部分功能和使用。




第二节



Keil C51


单片机软件开发系统的整体结构








C51


工具包的整体结构,如图


(1)


所示,其中


uVision



Ishell



别是


C51 for



Windows



for Dos


的集成开发环境


(IDE)


,可以完成编辑 、编译、连


接、调试、仿真等整个开发流程。开发人员可用


ID E


本身或其它编


辑器编辑


C

< p>
或汇编源文件。然后分别由


C51



A51


编译器编译生成


目标文件

(.OBJ)


。目标文件可由


LIB51

< br>创建生成库文件,也可以与库


文件一起经


L51


连接定位生成绝对目标文件


(.ABS)



ABS


文件由


OH51

转换成标准的


Hex


文件,以供调试器

dScope51



tScope51

使


用进行源代码级调试,


也可由仿真器使用直接对目标板进 行调试,



可以直接写入程序存贮器如


EPROM


中。










C51


工具包整体结构图


(1)
























Keil C51


工具包的安装第三节




1. C51 for Dos



然后选择安装目录即可。完下直接运行软件包中


dows







)


:为安 装目录设毕后欲使系统正


常工作须进行以下操作


(C:C51


,加入



修改.



path=C:C51Bin



Set



C51LIB=C:C51LIB



Set



C51INC=C:C51INC



然后运行




2. C51 for Windows


的安装及注意事项:









Windows


下运行软件包中



,最好选择安装目录



C51 for Dos


相同,这样设置最简单


(


设安装于


C:C51


目录下


)


。然


后将软件包中


crack


目录中的文件拷入


C:C51Bin


目录下。





第四节



Keil C51


工具包各部分功能及使用简介




1. C51



A51



(1) C51



C51



C


语言编译器,其使 用方法为:




C51



sourcefile[


编译控制指 令


]



或者




C51 @ commandfile







其中


sourcefile



C


源文件


(.C)< /p>


。大量的编译控制指令完成


C51


编译器 的全部功能。包控


C51


输出文件




.OBJ



.I



.SRC



件的控制。源文件


(.C)


的控制等,详见第五部分的具体介绍 。









Com mandfile


为一个连接控制文件其内容包括:


.C


源文件及


各编译控制指令,


它没有固定的名字 ,


开发人员可根据自己的习惯指


定,它适于用控制指令较多的场 合。




(2) A51



A51


是汇编语言编译器,使用方法 为:




A51 sourcefile[


编译控制指令


]








A51



@ commandfile



其中


sourcefile


为汇编源文件


( .asm



.a51)



而编译控制指令的使用与


其它汇编如


ASM


语言类似,可参考其他汇编语言材料。





使用和修改方便。


A51

< p>
类似,它使


Commandfile


中的


C51



Commandfile



2. L51



BL51



(1) L51







L51



Keil C51

< p>
软件包提供的连接


/


定位器,其功能是将编译生< /p>


成的


OBJ


文件与库文件连接定位生成绝 对目标文件


(.ABS)



其使用方< /p>


法为:












L51




目标文件列表

[


库文件列表


] [to outputfile] [


连接控制


指令


]










L51




@Commandfile







源程序 的多个模块分别经


C51



A51


编译后生成多个


OBJ


文件,


连接时,这些文件全列于目标文件列表中,作为输入文件,如果还需


与库文件


(.LiB)


相连接,则库文件也必须列在其后。


outputfile


为输文


件名,缺少时为第一模 块名,后缀为


.ABS


。连接控制指令提供了连


接定位时的所有控制功能。


Commandfile


为 连接控制文件,其具体内


容是包括了目标文件列表,库文件列表及输出文件、连接控制命 令,


以取代第一种繁琐的格式,


由于目标模块库文件大多不止< /p>


1


个,


因而


第< /p>


2


种方法较多见,这个文件名字也可由使用者随意指定。




(2) Bl51







BL51


也是


C51


软件包的连接


/


定位器,其具 有


L51


的所有功能,


此外它还具有以 下


3


点特别之处:








a.


可以连接定位大于

< p>
64kBytes


的程序。








b.


具有代码域及域切换功能


(CodeBanking & Bank Switching)







c.


可用于


RTX51


操作系统

< p>







RTX51


是一个实时多任务操作系统,


它改变了传统的编程模式,


甚至 不必用


main( )


函数,单片机系统软件向


RTOS


发展是一种趋势,


这种趋势对于


186



386



68K


系列


CPU


更为 明显和必须,



8051


< p>
CPU


较为简单,程序结构等都不太复杂,


RTX 51


作用显得不太突


出,其专业版软件


PK51


软件包甚至不包括


RTX51Full


,而只有一个


RTX51TINY


版本的


RTOS



RTX51 TINY

< br>适用于无外部


RAM


的单片


机系 统,因而可用面很窄,在本文中不作介绍。


Bank switching


技术


因使用很少也不作介绍。




Monitor51


< p>


Tscope51



3 . DScope51




(1) dScope51







dScope51


是一个源级调试器和模拟器,它可以调试由


C51


编译


器、


A51


汇编器、

< br>PL/M


-


51


编译器及


ASM



51


汇编器 产生的程序。


它不需目标板



for windows


也可通过


mon51


接 目标板)



只能进行软


件模拟,但其功 能强大,可模拟


CPU


及其外围器件,如内部串口,

< p>
外部


I/O


及定时器等,能对嵌入式软件功能进行 有效测试。




其使用方法为:












DS51[debugfile][INIT(initfile)]







其中


debugfile

< p>
是一个


Hex


格式的


80 51


文件,


即待调试的文件其


为可选的 ,可在进入


dScope51


后用


lo ad


命令装入。








Initfile


为一个初使化文件,它在启动

dScope51


后,在


debugfile


装入前装入,装有一些


dScope


的初使化参数及 常用调试函数等。下


面是一个



文件


(for dos)


的内容:






Load ....





Map 0,0xffff



dScope51 for Windows


则直接用鼠标进入 ,


然后用


load


装入待调文件。




(2) tScope51








dScope51


不同的是


Scope51


必须带目标板,目前它可以通 过


两种方式访问目标板。


(1)


通过


EMul51


在线仿真器,


tScop e51


为该


仿真器准备了一个动态连接文件



但该方法必须配合该


仿真器。< /p>


(2)


通过


Monitov51


监控程序,


这种方法是可行的,


tScope 51


为访问


Monitor51


专门带 有



连接程序,使用时可通过串


口及监控 程序来调试目标板。




其使用方法为:








TS51[INIT(file_)]


其中


file_


为一个初使化文件。








进入


TS51


后,必须装入


IOT


文件,可用的有





两种,如装入






CPUTYPE(80517)




Load.C:







可惜的 是


tScope51


只有


for Dos


的版本。




(3) Monitor 51







Mon itor51


是一个监控程序通过


PC


机的串口与目标板进行通信,


Monitor


操作需要


MON51



dScope51 for Wi ndows,


后面部分将对


Monitor51


做较为详细的介绍。




4. Ishell



uVision



(1) Ishell for Dos







这是一个


for Dos


< p>
IDE



直接在命令行键入


Ishell



则进入该环


境,它使 用简单方便。其命令行与


DOS


命令行具有同样的功能,对


单模块的


Project


直接由菜单进行编 译连接,对多模块的


project


。则


通过批处理,


BAT


文件进行编译连接,

然后通过菜单控制由


dScope51


< br>tScope51


对程序进行调试,因为是


for dos


的,不做太详细介绍。




(2) uVision for Windows







uVision for Windows


是一个标准的


Windows


应用程序,


它是


C51


的一个集成软件开发平台,具有源代码编辑、


project


管理、集成的


make


等功能,它的人机界面友好,操作方便,是开发者的首选,具


体配置及使用见第五部分。




第二章


Keil C51


软件使用详解




第一节



Keil C51


编译器的控制指令






C51


编 译器的控制指令分为三类:


源文件控制类,


目标文件控制类


及列表控制类。




1.


源文件控制类








NOEXTEND



C51


源文件不允许使用


ANSI C


扩展功能。








DEFINE(DF)


:定义预处理


(



C51


命令行


)





2.


目标文件


(Object)


控制类:< /p>








COMPACT LARGE SMALL


选编译模式





DEBUG(DB)


包含调试信息 ,以供仿真器或


dSCope51


使用。





NOAMAKE(NOAM)



禁止


AutoMake


信息记录





NOREGPARMS



禁止用寄存器传递参数





文件包含附加变量类型信息


Object OBJECTEXTEND(OE)





OPTIMIZE(OT)



指定优化级别





REGFILE(RF)



指定一个寄存器使用的文件以供整体优化用





REGISTERBANK(RB)



指定一个供绝对寄存器访问的寄存器区名





SRC



不生成目标文件只生成汇编源文件












其它控件不常用。




3.


列表文件


(listing)< /p>


控制类:





CODE(CD)


:向列表文件加入汇编列表

< br>




LISTINCLUDE (LC)


:显示


indude


文件





SYMBO LS(SB)


:列表文件包括模块内所有符号的列表





W


ARN INGLEVEL(WL)


:选择“警告”级别




第二节



dScope51


的使用




1. dScope51 for Dos







总的来说


dScope51


具有以下特性:












●高级语言显示模式












●集成硬件环境模拟












●单步或“


GO


”执行模式












●存储器、寄存器及变量访问













Watch


表达式之值

< br>











●函数与信号功能








下面,具体说明在进入


dScope51 for Dos


之后,如何实现上述功


能,


dScope5 1


采用下拉菜单格式和窗口显示控制,


共有

language



serial



exe



register


四个窗口,其中


exe


为命令行窗口,


language


为程序窗


口,


serial


为串口窗,


register

< p>
为寄存器窗。




(1)


高级语言显示模式









单击主菜单中的“


View



,第一栏中的三条命令“


Highlevel





Mix ed





A ssembly



分别对所装入的程序按照

“高级”



“混合级”


及“汇编级 ”三种方式显示,以方便调试使用。





集成硬件环境模拟显示


(2)







主菜单中“


Peripheral< /p>


”各条能显示模拟硬件环境的状态,其中:








i/o Port



显示各


I/O


口之值,



8031


而言


SFR


中的


P1



P2


P3



P0

与引脚之值分别列出:








Int errupt


:显示


5


个中断源的入口 模式是否允许,优先级等中断


状态。








Timer


:显示各定时


/


计数器的模式,初始值状态等。








int Message


:中断信息允许,如为允许

< p>
(



>>


”出现


)


,则当中断


申请时,显示中断源信息。比如当 中断发生时会显示:









interrupt Timer 0 occured


”等








A/D converter












显示


A/D


转换器状态无时,则提示“无”









Ser ial


:串口信息显示,包括串口模式、波特产等








Other


:其它器件,如为


8031


则显示“



无”




(3)


单步或“


Go


”执行









F8


”单步执行,



F5


”全速执行到断点。或选主菜单中


Trace

< p>
单步执行


CPU


中的


Go


全速执行。




(4)


存储器寄存器及变量访问








外部存储器管理


MAP


菜单:


设置


(set)


、< /p>


取消


(reset)


< br>显示


(Display)


处理可用存储空间。

< p>



修改


Code


代码:


ASM


命令




存储器显示命令:


D



类别为


(X



D



I


、< /p>


B



C)



修改存储器命令:


E



有以下几种命令


EB



EC



EI



EL



EF



EP



复杂数据类型显示:


Object< /p>


命令;用以显示结构或数组的内容。欲使


此命令有效,

< p>
C51


编译器必须有


DB



OBJECTEXTEND


两条。




反汇编命令:


U



(5)



Watch


”表达式之值









View


菜单的“


Watch


”一栏中有四项:其中包括定义


Watch


Point(Define)






及自动更新选项。


Watch Point(remove,kill all)


除.







也可用


WS



WK


等命令代替,下面具体看“表达式”类型:




dScope51


一次最多可设


16



WtchPoint


表达式,


显示于


Watch Window

< p>
之中,表达式可以是简单变量,也可是复杂数据类型如结构、数组和


指向结 构的指针等,例如:








>WS



*ptime







>WS



ptime



hour







>WS



some_record[o]



analog


等等




(6)

< p>
关于


.IOF


文件








启动


DS51


后必须装入


.IOF


文件才能使


CP U



Peripheral


各项起


作用,


这个函数的使用是依据


8051


系列


CPU


的不同特点,

< br>装入


8051



CPU


硬件设备模拟驱动文件,比如


8031CPU


就 必须


load DS51



录下的






2. dScope for Windows







dScope for windows


具有


dScope for dos

< p>
的全部功能,


此外,


它还


具有以下明显的优点:





(1)


标准的


Windows


界面,操作更容易更简单;








(2)


常用操作多用对话框,而非


D os


的行命令方式;





(3)


窗口资源更加丰富:存储器 窗口、覆盖率分析、运行状态分析


窗口,加强了调试功能;








因为


dScope for Win dows


功能强大,


具体操作在第八章详细介绍。




第三节



Monitor51


及其使用




1. Monitor51


对硬件的要求








(1)


硬件系统为


51


系列


CPU









(2)



5K


外部程序存储器


(



O


地址开始


)


< p>
存放


Monitor51


程序;

< br>







(3) 256Bytes


的外部数据存储器以及


5K


的跟踪缓冲区,此 外,


外部数据存储器必须足够容纳所有应用程序代码及数据,


且 所有外部


数据存储器必须为冯·


诺伊曼存储器,


即能一致访问


XDATA



C ode


空间。








(4)


一个定时器作为波特率发生器供串口使用;





的空余堆栈。


(5) 6 Bytes






2. Mon51


的使用








Mon51


的使用途径有三种方式:








(1) Dos


行命令方式








即先用


install


< br>MON51


进行配置,


然后用


M ON51


进入


Monitor


状态,启 用各种命令对


Monitor51


进行调试。

< br>







(2) tScope51


方式








启动


tScope51


装入


TS51


目录下的



驱动文件, 与目


标板通信。








(3) dScope51 for Windows


方式








在选


CPU


驱动文件时,选“




,则检查目标板并进入


M ON51


状态。




3. MON51


的配置








(1) MON51 for Dos


的配置








运行


install


文件

< br>(



MON51


目录下


)


,不同的参数可以配置不同


的硬件环境。


INSTALL Serialtype


[xdstastart [codestart[bank][PROMCHECK]]]


具体说明见


MON51


帮助


文件或 使用手册。








(2) MON51 for Windows


的配置








在启用



时,


会使得系统自动检查目标板连接,


如配置


不对,则弹出“


Configuration


”对话框,设置


PC


串口,波特率等,


完毕单击“


apply


”有效。




4.


串口连接图:



收发交叉互连,


RTS



CTS< /p>


直连,


DSR



DTR


直连,具体引脚排列参


考串口资料。



5. MON51


命令及使用



< p>
详细的


MON51


命令可参阅帮助。




第四节



集成开发环境


(IDE)


的使用



1. Ishell for Dos


的使用








进入


Ishell


之后看到两个窗口:一个 是文件窗口,一个是


Dos



令行窗口 ,窗口上方是下拉式的命令菜单,其中的


Files


控制文件窗


口的显隐。








使用


Ishell


,第一步就是配置系统, 即要学习两个文件的修改与


创建:





文件


(1)








每一个


p roject


都有一个




其中存放有



Option


菜单和


Setup


菜单下的部分信息;


Bell enabled



Monochrome enabled



Editor


Selected



CRT Lines



target



enviroment



name of user edit



Automatic load for configuration enabled



file window



enabled



file specification for file window



translate command line


controls



project name


等。








对每个


project


都必须设置以上信息 ,


然后存盘



setup



的的



save




这样才可正式开始下面工作。




(2)


文件









IDE


颜色设置,如不改动,可以缺省为主。




(3) CDF


文件








该文件位于


BIN


目录下,每一文件定义一 组外部函数工具包,


即定义外部环境如





等,开发者可修改


CDF

< p>


件,


供自己使用,


至于


CDF


文件内容可查看一下


< p>
即可知道。


注意


.CDF


文件是


Ishell


系统的核心所在,


不同的


CDF


文件可使本


IDE


适用于不同的编译、连接系统,即本


IDE


并 不仅适于


C51





下面谈一谈


Automake


工具:









C51



Automake


是一个


project


管理器,在

8051


工具包中以


OBJECT


文件形式保留了一个


project


的信息,

< br>AutoMake


用这些信息


来进行

project


管理,一旦手工建立一个


project< /p>



Automake


可生成一

< p>
个新的


OBJECT



A utoMake


利用此文件来编译那些修改过的文件。








Automake


支持


C51



A51



L51/BL51



C166

< br>、


A166



L166


等编


译连接器。点中主菜单中的


Automak e


即运行本工具。








Ishell for Dos


使用比较繁琐,推荐使用


uVision for windows





2. uVision for windows


的使用








uVision


是一个标准的


window s


应用程序,其编译功能、文件处


理功能、

project


处理功能、


窗口功能以及工具引用功能


(



A51



C51



PL/M41


BL51 dScope



)< /p>


等都较


Ishell for Dos


要强得多。




下工作的


Dos


所以一切能在,


L51


兼容


BL51


因为作连接器,


BL51


采用


uVision






project


都可以到


uVision< /p>


中进行连接调试。








uVision


采用


dScope for windows


作调试器,


该调试器支持


MON51


及系统模拟两种方式,功能较


for DOS


要强大好用,调试功能强大。




注意:




(1) Option


菜单下的各项要会使用,其中

< p>
A51



C51



PL/M51



BL51

定义各文件所使用的编译、连接控制指令,


dScope


定 义一个


dScope


初始化文件。


Ma ke


则是定义一个


make


文件。




(2)


进入 调试是在


RUN


菜单下运行


dScop e





(3) project


中包括新建、打开、修改、更新、编译 、连接等


poject



理,具体使用 可参考后面的例子。




第三章


Keil C51 vs


标准


C







深入理 解并应用


C51


对标准


ANSIC


的扩展是学习


C51


的关键之


一。


因为大多数扩展功能都是直接针对


8051


系列


CPU


硬件的。


大致


有以下


8


类:

< br>












805 1


存储类型及存储区域












●存储模式












●存储器类型声明












●变量类型声明












●位变量与位寻址












●特殊功能寄存器


(SFR)












C51


指针












●函数属性




具体说明如下


(8031

< p>
为缺省


CPU)





第一节



Keil C51


扩展关键字




C51 V4.0


版本有以下扩展关 键字


(



19



)





_at_










idata







sfr16







alien





interrupt






small



bdata









large







_task_






Code





bit











pdata



sfr





data











sbit



compact







reentrant xdata









using



第二节



内存区域


(Memory Areas)





1. Pragram Area










Code


说明可有多达


64kBytes


的程序存储器

< br>



2. Internal Data Memory:







内部数据存储器可用以下关键字说明:








data


:直接寻址区,为内部


RAM


的低


128


字节






00H



7FH







idata


:间接寻址区,包括整个 内部


RAM










00H



FFH







bdata


:可位寻址区,

























20H



2FH



3. External Data Memory







外部


RAM


视使用情况可由以下关键字标识:








xda ta



可指定多达


64KB

< p>
的外部直接寻址区,


地址范围


0000H



0FFFFH







pda ta


:能访问


1


(25bBytes)


的外部


RAM


,主要用于紧凑模式


(Compact Model)





4. Speciac Function Register Memory







8051


提供


128Bytes



SFR


寻址区, 这区域可位寻址、字节寻址


或字寻址,用以控制定时器、计数器、串口、


I/O


及其它部件,可由


以下几种关键字说明:








sfr


:字节寻址




比如



sfr P0=0x80;



PO


口地址为


80H



“=”后


H



FFH

< br>之间的常数。








sfr 16



字寻址,


sfr16



T2=0xcc;


指定


Timer2


口地址


T2L=0x cc


T2H=0xCD







sbit


:位寻址,如


sbit EA =0xAF;


指定第


0xAF


位为


EA


,即中断


允许




还可以有如下定义方法:








sbit




0V=PSW^2



(


定义


0V



PSW


的第


2



)







sbit




0V


=< /p>


0XDO^2



(


同上


)




bit



0V


-



0xD2(

< br>同上


)





第三节



存储模式








存储模 式决定了没有明确指定存储类型的变量,


函数参数等的缺


省存储 区域,共三种:





模式


1. Small







所有缺省变量参数均装入内部


RAM


,优点 是访问速度快,缺点


是空间有限,只适用于小程序。




2. Compact


模式








所有缺省变量均位于外部


RAM


区的一页< /p>


(256Bytes)


,具体哪一


页可由


P2


口指定,



STARTUP.A51


文件中说明,


也可用


pdata


指定,


优点是空间较


Small


为宽裕速度较


Small


慢,



large


要快,


是一种中


间状态。




3. large


模式








所有缺省变量可放在多达


64KB< /p>


的外部


RAM


区,


优点是空间大,


可存变量多,缺点是速度较慢。




提示:存储模式在


C51

< p>
编译器选项中选择。




第四节



存储类型声明








变量或参数的存储类型可由存储模式指定缺省类型,


也可由关键


字直接声明指定。


各类型分别用:


code ,data,idata,xdata,pdata


说明,


例:




data uar1



char code array[ ]

=“


hello!



;



unsigned char xdata arr[10][4][4]





第五节



变量或数据类型








C51


提供以下几种扩展数据类型:








bit


位变量值为


0



1







sbit


从字节中定义的位变量




0



1







sfr



sfr


字节地址




0



255







sfr16



sfr


字地址




0



65535



其余数据类型如:


char,enu m,short,int,long,float


等与


ANSI C


相同。




第六节



位变量与声明




1. bit


型变量








bit


型变量可用变量类型,函数声 明、函数返回值等,存贮于内



RAM20H

< br>~


2FH






注意:



(1)


用#


pragma disa ble


说明函数和用



usign



指定的函数,


不能返回

< br>bit


值。




(2)


一个


bit

< br>变量不能声明为指针,如


bit *ptr


;是错误的




(3)


不能有


bit


数组如:


bit arr[5]


;错误。




2.


可位寻址区说明


20H



2FH



可作如下定义:




int bdata i





char bdata arr[3]





然后:




sbit



bito



in0



sbit bit15=I^15





sbit arr07=arr[0]^7



sbit arr15=arr[i]^7





第七节



Keil C51


指针








C51


支持一般指针


(Generic Pointer)


和存储器指针


(Memory_Specif ic Pointer).



1.


一般指针








一般指 针的声明和使用均与标准


C


相同,不过同时还可以说明


指针的存储类型,例如:








long * state;


为一个指向


long


型整数的指针,而


state


本身则依存


储模式存放。








char * xdata ptr



ptr


为一个指向


char


数据的指针 ,而


ptr


本身放


于外部


RAM


区,


以上的


long ,char


等指针指向的数据可存放于任何存


储器中。








一般指针本身用

< br>3


个字节存放,分别为存储器类型,高位偏移,


低位偏移 量。




2.


存储器指针








基于存储器的指针说明时即指定了存贮类型,例如:








char data * str;str

< br>指向


data


区中


char


型数据








int xdata * pow; pow


指向外部


RAM

< p>


int


型整数。




这种指针存放时,


只需一个字节或< /p>


2


个字节就够了,


因为只需存放偏


移量。




3.


指针转换








即指针在上两种类型之间转化:



< /p>


●当基于存储器的指针作为一个实参传递给需要一般指针的函数时,


指针自动







转化。








●如果不说明外部函数原形,


基于存 储器的指针自动转化为一般


指针,导致错误,因而请用“#


in clude


”说明所有函数原形。








●可以强行改变指针类型。




第八节



Keil C51


函数








C51


函数声明对


ANSI C


作了扩展,具体包括:




1.


中断函数声明:




中断声明方法如下:




void serial_ISR () interrupt 4 [using 1]



{



/* ISR */



}



为提高代码的容错能力,在没用 到的中断入口处生成


iret


语句,定义


没用到的中断。




/* define not used interrupt, so generate IRET in their entrance */



void extern0_ISR() interrupt 0{}





/* not used */



void timer0_ISR () interrupt 1{}





/* not used */



void extern1_ISR() interrupt 2{}





/* not used */



void timer1_ISR () interrupt 3{}





/* not used */



void serial_ISR () interrupt 4{}





/* not used */



2.


通用存储工作区




3.


选通用存储工作区由


using x


声明,见上例。




4.


指定存储模式









small compact < /p>



large


说明,例如:




void fun1(void) small {



}







提示:


small


说明的函数内部变量全部使用内部

< br>RAM



关键的经


常性的耗时的 地方可以这样声明,以提高运行速度。




5. #pragma disable







在函数前声明,


只对一个函数有效。


该函数 调用过程中将不可被


中断。




6.


递归或可重入函数指定








在主程序和中断中都可调用的函数,容易产生问题。因为


51



PC


不同,


PC


使用堆栈传递参数,


且静态变量以 外的内部变量都在堆


栈中;而


51


一般 使用寄存器传递参数,内部变量一般在


RAM


中,


函数重入时会破坏上次调用的数据。


可以用以下两种方法解决函数重


入:




a

< p>
、在相应的函数前使用前述“


#pragma disable

< p>
”声明,即只允许主程


序或中断之一调用该函数;




b


、将该函数说明为可重入的。如下:




void func(param...) reentrant;



KeilC51

编译后将生成一个可重入变量堆栈,然后就可以模拟通过堆


栈传递变量的方法。








由于一般可重入函数由主程序和中 断调用,


所以通常中断使用与


主程序不同的

R


寄存器组。








另外,对可重入函数,在相应的函数前面加上开关“


#pragma


noaregs



,以禁止编译器使用 绝对寄存器寻址,可生成不依赖于寄存


器组的代码。




7.


指定


PL/M



51


函数

< br>




alien


指定。




第四章


Keil C51


高级编程




本章讨论以下内容:












●绝对地址访问













C


与汇编的接口













C51


软 件包中的通用文件












●段名转换与程序优化




第一节



绝对地址访问








C51


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





绝对宏:


1.


在程序中,用“#


include


” 即可使用其中定义的宏来访问


绝对地址,包括:




CBYTE



XBYTE



PWORD



DBYTE



CWORD



XWORD



PBYTE



DWORD



具体 使用可看一看


absacc.h


便知




例如:




rval=CBYTE[0x0002];


指向程序存贮器的< /p>


0002h


地址




rval=XWORD




[0x0002];


指向外


RAM



0004h


地 址




2. _at_


关键字








直接在数据定义后加上


_at_ const


即可,但是注意:




(1)


绝对变量不能被初使化;




(2)bit


型函数及变量不能用< /p>


_at_


指定。




例如:




idata struct link list _at_ 0x40;


指定


list


结构从


40h


开始。




xdata char text[25b] _at_0xE000

< br>;指定


text


数组从


0E00 0H


开始




提示:如果外部绝对变量是


I/O


端口等可自行变化数据,需要 使用


volatile


关键字进行描述,请参考


absacc.h





3.


连接定位控制




此法是利用连接控制指令


code xdata pdata data bdata


对“段”地址进


行,如要指定某具体变量地址,则很有局限性,不作详细讨论。




第二节



Keil C51


与汇编的接口




1.


模块内接口




方法是用#


pragma


语句具体结构是:

< br>



#pragma asm



汇编行




#pragma endasm







这种方 法实质是通过


asm



ndasm


告诉


C51


编译器中间行不用


编译为汇编行,因而在编译控制指令中有


SRC


以控 制将这些不用编


译的行存入其中。





模块间接口


2.







C


模块与汇编模块的接口较简单,分 别用


C51



A51

< br>对源文件


进行编译,


然后用


L5 1



obj


文件连接即可,

< p>
关键问题在于


C


函数与


汇 编函数之间的参数传递问题,


C51


中有两种参数传递方法。< /p>




(1)


通过寄存器传递函数参数




最多只能有


3


个参数通过寄存器传递,规律如下 表:




CharInt



long,float


一般指参数数



R6 & R7R71RRR7R3



R4 & R5R52RR7R3RR2 & R3



3



R3



RR3



(2)


通过固定存储区传递


(fixed memory)



这种方法将


bit

< br>型参数传给一个存储段中:















function_name?BIT



将其它类型参数均传给下面的段:?


function_name?BYTE,


且按照预


选顺序存放 。




至于这个固定存储区本身在何处,则由存储模式默认。




(3)


函数的返回值




函数返回值一律放于寄存器中,有如下规律:






Return type Registev



说明




Bit



由具体标志位返回



标志位




R7




char/unsigned char




单字节由


R7


返回





指针








1_byteR6 & R7




int/unsigned int



双字节由


R6



R7




,MSB



R6




指针






2_bytelong&unsigned long MSB



R4, R7 R4




LSB



R7



Float 32Bit IEEE


格式



R7



R4R1



一般指针低


R2


高位


R3



存储类型在


R3




R1 (4) SRC


控制


.ASM


,文件编译生成汇编文件


C

< p>
该控制指令将


(.SRC)


生成汇编该汇编文件可 改名后,



进行编译。


A51


文件,


再用




件包中的通用文件


Keil C51


第三节源文件有非常重要的作用,对它






C


目录下有几个


C51LiB



C


源文件,这几个



们稍事 修改,就可以


用在自己的专用系统中。




1.


动态内存分配








init_mem.C


:此文件是初 始化动态内存区的程序源代码。它可以


指定动态内存的位置及大小,

只有使用了


init_mem( )


才可以调回其它


函数,诸如


malloc calloc,realloc


等。








calloc.c



此文件是给数组分配内 存的源代码,


它可以指定单位数


据类型及该单元数目。








malloc.c



此文件是


malloc


的源 代码,


分配一段固定大小的内存。








realloc.c


:此文件是


reall oc.c


源代码,其功能是调整当前分配动


态内存的大小。




2. C51


启动文件


STARTUP.A51







启动文件


STARTUP.A51< /p>


中包含目标板启动代码,可在每个


project


中加入这个文件,


只要复位,


则该文件立即执行,


其功能包括:












●定义 内部


RAM


大小、外部


RAM


大小、可重入堆栈位置



-


-


-


-


-


-


-


-



本文更新与2021-03-03 22:09,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/703560.html

keilc51_使用详解的相关文章