- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
3.第三节存储模式
存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种:
1.Smal模l式
所有缺省变量参数均装入内部RAM ,优点是访问速度快,缺点是空间有限,只适用于小程序。
2.Compac模t式
所有缺省变量均位于外部RAM 区的一页(256Bytes,)具体哪一页可由P2口指定,在STARTUP.A51 文件中说明,也可用pdata指定,优点
是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。
3.lar模ge式
所有缺省变量可放在多达64KB的外部RAM 区,优点是空间大,可存变量多,缺点是速度较慢。提示:存储模式在C51编译器选项中选择。
第四节存储类型声明
变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字直接声明指定。各类型分别用:code,data,idata,xdata,p说da明ta,例:datauar1
charcodearray=[“]hello”!;unsignedcharxdataarr[10];[4][4]
第五节变量或数据类型
C51提供以下几种扩展数据类型:bit位变量值为0或1
sbit从字节中定义的位变量0或1sfrsf字r节地址0~255
sfr16sf字r地址0~65535
其余数据类型如:char,enum,short,int,long,等fl与oaAtNSIC相同。
第六节位变量与声明
1.b型it变量
bit型变量可用变量类型,函数声明、函数返回值等,存贮于内部RAM20H ~2FH。注意:
用#pragmadisabl说e明函数和用“usign”指定的函数,不能返回bit值。
一个bit变量不能声明为指针,如bit*p;tr是错误的
不能有bit数组如:bitarr[;5]错误。
2.可位寻址区说明20H-2FH可作如下定义:
intbdata;i
charbdataarr,[3]然后:
sbitbi=toin0;sbitbit15=I^;15
sbitarr07=arr[0;]^s7bitarr15=arr[;i]^7
7.第七节KeilC51指针
C51支持一般指针(GenericPoint和er存)
1.一般指针
储器指针(Memory_SpecificPointer).
一般指针的声明和使用均与标准C相同,不过同时还可以说明指针的存储类型,例如:
long*sta为te一;个指向long型整数的指针,而state本身则依存储模式存放。
char*xdataptr;ptr为一个指向char数据的指针,而ptr本身放于外部RAM 区,以上的long,char等指针指向的数据可存放于任何存储器中。
一般指针本身用3个字节存放,分别为存储器类型,高位偏移,低位偏移量。
2.存储器指针
基于存储器的指针说明时即指定了存贮类型,例如:chardata*str指;s向trdata区中char型数据
intxdata*pow;p指ow向外部RAM 的int型整数。
这种指针存放时,只需一个字节或2个字节就够了,因为只需存放偏移量。
3.指针转换
即指针在上两种类型之间转化:
l当基于存储器的指针作为一个实参传递给需要一般指针的函数时,指针自动转化。
l如果不说明外部函数原形,基于存储器的指针自动转化为一般指针,导致错误,因而请用“#includ”el可以强行改变指针类型。
8.第八节KeilC51函数
C51函数声明对ANSIC作了扩展,具体包括:
1.中断函数声明:中断声明方法如下:
voidserial_ISR()interrupt4[using1]
{
/*ISR*/
}
为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。
/*definenotusedinterrupt,sogenerateIRETintheirentrance*/voidextern0_ISR()interrupt0{}/*notused*/
voidtimer0_ISR()interrupt1{}/*notused*/voidextern1_ISR()interrupt2{}/*notused*/voidtimer1_ISR()interrupt3{}/*notused*/voidserial_ISR()interrupt4{}/*notused*/
2.通用存储工作区
文档评论(0)