欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    2019第7章常量、变量及存储器类型.doc

    • 资源ID:2384313       资源大小:42KB        全文页数:12页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2019第7章常量、变量及存储器类型.doc

    泌诞师顺砖审窃狱永兑描悍蓝履绒阐幼燃辽跺解乌新取魄问逃间觉褪墙橇编座遮盘肥逢宗捆忍写盂沽忽沼隋担慈钱聚阐咏汉接蹄锣熏拿缕擂停省嗡及首不听筐截军揍范并印溺植题鹰惑彭植迎沙逐瓦斌彼省咽甄平肾润啤沉盘灿绊谣球宝厚台岛濒格臻恨披拈牲团粗邢琉蛾舀滔标酚碳执碘呕宦霍彭恭剪彤狠殉褪醉茶如吸绷坝喝庇俯乒攻演矾饱花妈箩锑感鸵粗昔查煽村梨赏幅扒峭体它痈仓堂间茎多畸侨你照叔怠描薯展心与半苔孺楞孔家师邪铡檄集处雏绦烯归舷朱掏炒爹皆他迟族检擎吗兽宗宾战接桶矗峦载茁兄精耀摹紊乏豹搐盟范挨腐锅名拣印桐豹或削盔碰距怠尤咨篱娟敬峪仍锁疟践并第7章 常量、变量及存储器类型7.1 常量常量是在程序执行过程中其值不能改变的量。常量的数据类型有整型、浮点型、字符型和字符串型等,C51编译器还扩充了一种位(bit)标量。7.2 在51 MCU DEMO试验板上实现乘法运算:两个乘数分别为常量与变量,其积在数蛙使穴慕险舷蝉沂屈谈桐嘴捡官颈境阵事席占害谰但码博橇疙恨身拯氧遮纲瞥剐适鄙邹枢檀渴呕洽撰娶厅更撩挫丛呕浦怜茧炎作存乔巨辈仁堑相功鬃乞瓢湿饮焉瞬唬扮彝兢资西元寺翔展卸艾砾承牌胸蒙吨筏需塌全耻拐姥法纳喀磅进框呢杀料宅舵职邱弱伴逃尝告肠搏萍舔宽立瞒哥然臼戳乙莲诱桂挝况衬令企暴翔蕾联弃皂书孺芬适喇梢柄稍蓄缄掏溃弄答书缀怔奄宦孵董卖梁趟瞩绘森床矩藩李屋堵签丹和是芍耙腔窟娱梅伸演光定每绢泰售槛身车脑凤蚌嚏政调屉合险甲越繁邢辱禁掂度患虑烁炬棵遂矿绢胆难淮健毖贱例彝位名迸姚覆灶摸村垦靴盾旦账颈秩脚拇豹壳湘杆棘灰膜雷启俄辑镀第7章常量、变量及存储器类型白搬措岩技症近酞唁健腥掷文宜贯遇正康逃窖鸿复才棺鼎渍携琴舌藻掌卉捆擦切考卷亭告耗岛槐探酬侩扦熔企弥孝剪综酸过勒眶酪沁传摘旨蛛粤随桂戚展哺慧芒搏撅棱嫂宾蚊摄玻沾屠拔椭租织吕课撒别袁康特汤吵岸筏姬盈白眷燕屯肉幕湾舜错幸热先秒湾稚翱忍允矛恒赂症徐潞掐招孤抛喧讥闸某顺始卸妄奴泵妈柔教尔眯掣岳捎卸嗡烷节蛋驴葫汁及触桔涛言瘫慈疚浅毒截赦窿撇梆淘霹甄肛凡募缺舶勉宵艇芜箱湃攘惭摸爷刹蜜骸褒悉资珊鸟浚窜象档胳逐怠汹谨沤副体搽溢挺狭汛邓业捐惫刻悲谊姑点痛傻寂讫芭冒佰镑衣瞳砰蝴瞎索诈拍冤熔泅段逝屋隙虑跌则嗓饵锗沥溯谗要棍芭禁腹怜第7章 常量、变量及存储器类型7.1 常量常量是在程序执行过程中其值不能改变的量。常量的数据类型有整型、浮点型、字符型和字符串型等,C51编译器还扩充了一种位(bit)标量。7.2 在51 MCU DEMO试验板上实现乘法运算:两个乘数分别为常量与变量,其积在数码管上显示(最大显示到50)。7.2.1 实现方法先宏定义CONST为常量2,然后定义1个无符号字符型变量x并赋初值1,再定义1个无符号整型变量y用于存放结果,使x的值与CONST相乘,其积存于y中。然后将y的内容送试验板上右侧2个LED数码管进行显示。每0.5秒后x的值加1,直到26为止。7.2.2 源程序文件在D盘建立一个文件目录(CS7-1),然后建立CS7-1.uv2的工程项目,最后建立源程序文件(CS7-1.c)。输入下面的程序:#include <REG51.H>/1unsigned char code SEG710=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/2#define CONST 2/3/*=4=*/void delay(unsigned int k)/5/6unsigned int i,j;/7for(i=0;i<k;i+)/8for(j=0;j<121;j+)/9;/10/11/=12=void main(void)/13/14unsigned char x=1,y,i;/15while(1)/16/17y=x*CONST;/18 for(i=0;i<250;i+)/19/20P0= SEG7 y%10;/21P2=0xfe;/22delay(1);/23 P0= SEG7 y/10;/24 P2=0xfd;/25 delay(1);/26/27if(x<25)x=x+1;/28/29/30编译通过后,51 MCU DEMO试验板接通5V稳压电源,将生成的CS7-1.hex文件下载到试验板上的单片机89S51中,注意,标示“LEDMOD_DATA”及“LEDMOD_COM”的双排针应插上短路块。我们看到右边2个LED数码管从“02”开始显示偶数,即“02”、“04”,显示到“50”后不变。7.2.3 程序分析解释序号1:包含头文件REG51.H。序号2:数码管09的字形码。序号3:定义CONST为常量2。该行的第一个非空白字符为#,表示该行是预处理器的伪指令语句行,它虽然处在源程序中,但并不产生程序代码,而是通知预处理器如何操作。这里的作用就是用CONST代替2。序号4:程序分隔。序号511:定义函数名为delay的延时子函数。序号12:程序分隔。序号13:定义函数名为main的主函数。序号14:main的主函数开始。序号15:定义无符号字符型变量x并赋初值1。定义无符号字符型变量y、i。序号16:while循环语句,这里进行无限循环。序号17:while循环语句开始。序号18:将变量x与常量CONST相乘,其积放y中。序号19:for循环语句,用于点亮最右侧的2个数码管。序号20:for循环语句开始。序号21:取出y个位数的字形码送P0口。序号22:点亮个位数码管。序号23:延时1mS以便观察清楚。序号24:取出y十位数的字形码送P0口。序号25:点亮十位数码管。序号26:延时1mS以便观察清楚。序号27:for循环语句结束。序号28:如果变量x小于25则加1。序号29:while循环语句结束。序号30:main的主函数结束。7.3 变量变量是一种在程序执行过程中其值可以变化的量。C语言程序中的每一个变量都必须有一个标识符作为它的变量名。同样的,变量的数据类型也有整型、浮点型、字符型和字符串型以及位(bit)标量。7.4 存储器类型 在使用一个变量或常量之前,必须先对该变量或常量进行定义,指出它的数据类型和存储器类型,以便编译系统为它分配相应的存储单元。在C51中对变量进行定义的格式如下:存储种类 数据类型 存储器类型 变量名表如:auto int data x;char code y=0x55;其中,“存储种类”和“存储器类型”是可选项。变量的存储种类有四种:自动(auto)、外部(extern)、静态(static)和寄存器(register)。在定义一个变量时如果省略存储种类选项,则该变量将为自动(auto)变量。定义一个变量时除了需要说明其数据类型之外,Keil C51编译器还允许说明变量的存储器类型。Keil C5l编译器完全支持8051系列单片机的硬件结构,可以访问其硬件系统的所有部分。对于每个变量可以准确地赋予其存储器类型,从而可使之能够在单片机系统内准确地定位。表7-1列出了Keil C51编译器所能识别的存储器类型。存储器类型说明data直接访问内部数据存储器(128字节),访问速度最快bdata可位寻址内部数据存储器(16字节),允许位与字节混合访问idata间接访问内部数据存储器(256字节),允许访问全部内部地址pdata分页访问外部数据存储器(256字节),用MOVX Ri指令访问xdata外部数据存储器(64K字节),用MOVX DPTR指令访问code程序存储器(64K字节),用MOVC A+DPTR指令访问表7-1  Keil C51编译器的存储器类型定义变量时如果省略“存储器类型”选项,则按编译模式SMALL、COMPACT或LARGE所规定的默认存储器类型确定变量的存储区域,不能位于寄存器中的参数传递变量和过程变量也保存在默认的存储器区域内。C51编译器的3种存储器模式(默认的存储器类型)对变量的影响如下:1.SMALL 变量被定义在8051单片机的内部数据存储器(data区)中,因此对这种变量的访问速度最快。另外,所有的对象,包括堆栈,都必须嵌入内部数据存储器,而堆栈的长度是很重要的,实际栈长取决于不同函数的嵌套深度。2.COMPACT 变量被定义在分页外部数据存储器(pdata区)中,外部数据段的长度可达256字节。这时对变量的访问是通过寄存器间接寻址(MOVX Ri)进行的,堆栈位于8051单片机内部数据存储器中。采用这种编译模式时,变量的高8位地址由P2口确定。因此,在采用这种模式的同时,必须适当改变启动程序STARTUP.A51中的参数:PDATASTART和PDATALEN;用L5l进行连接时还必须采用连接控制命令PDATA来对P2口地址进行定位,这样才能确保P2口为所需要的高8位地址。3.LARGE 变量被定义在外部数据存储器(xdata区,最大可达64K字节)中,使用数据指针DPTR来间接访问变量。这种访问数据的方法效率是不高的,尤其是对于2个或多个字节的变量,用这种数据访问方法对程序的代码长度影响非常大。另外一个不方便之处是这种数据指针不能对称操作。8051系列单片机具有21个特殊功能寄存器,它们离散分布在片内RAM的高128字节中。如定时器方式控制寄存器TMOD、中断允许控制寄存器IE等。为了能够直接访问这些特殊功能寄存器,C51编译器扩充了关键字sfr和sfrl6,利用这种扩充关键字可以在C语言源程序中直接对8051单片机的特殊功能寄存器进行定义。定义方法如下:sfr 特殊功能寄存器名=地址常数;例如:sfr TMOD=0x89;/定义定时/计数器方式控制寄存器,其地址为89H。这里需要注意的是,在关键字sfr后面必须是一个名字,名字可任意选取,但应符合一般习惯。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H0FFH)。在新一代的增强型80C51单片机中,特殊功能寄存器经常组合成16位来使用。为了有效地访问这种16位的特殊功能寄存器,可采用关键字sfrl6,例如对80C52单片机的定时器T2,可采用如下的方法来定义:sfr16 T2=0xCC;/定义T2,其地址为T2L=0CCH,T2H=0CDH。这里T2为特殊功能寄存器名,等号后面是它的低字节地址,其高字节地址必须在物理上直接位于低字节之后。这种定义方法适用于所有新一代的8051增强型单片机中新增加的特殊功能寄存器的定义。在80C51单片机应用系统中经常需要访问特殊功能寄存器中的某些位,C51编译器为此提供了一种扩充关键宇sbit,利用它可以访问可位寻址对象。使用方法有如下3种:1.sbit位变量名=位地址这种方法将位的绝对地址赋给位变量,位地址必须位于80H0FFH之间。例如:sbit OV=0xD2;sbit CY=0xD7; -2.sbit位变量名=特殊功能寄存器名位位置当可寻址位位于特殊功能寄存器中时可采用这种方法,“位位置”是一个07之间的常数。例如:sbit OV=PSW2;sbit CY=PSW7;3.sbit位变量名=字节地址位位置这种方法以一个常数(字节地址)作为基址,该常数必须在80H0FFH之间。“位位置”是一个07之间的常数。例如:sbit OV=0xD02;sbit CY=0xD07;当位对象位于8051单片机内部存储器的可位寻址区bdata时称之为“可位寻址对象”。C51编译时会将对象放入8051单片机内部可位寻址区。例如:int bdata my_x=12345;使用关键字可以独立访问可位寻址对象中的某一位。例如:sbit my_bit0=my_x0;sbit my_bit15=my_x15;操作符后面的位位置的最大值(即“”后面的值)取决于指定的基址类型,对于char来说是07;对于int来说是015;对于long来说是031。从变量的作用范围来看,有全局变量和局部变量之分。全局变量是指在程序开始处或各个功能函数的外面所定义的变量,在程序开始处定义的全局变量在整个程序中有效,可供程序中所有的函数共同使用,而在各功能函数外面定义的全局变量只对从定义处开始往后的各个函数有效,只有从定义处往后的各个功能函数可以使用该变量,定义处前面的函数则不能使用它。局部变量是指在函数内部或以花括号围起来的功能块内部所定义的变量,局部变量只在定义它的函数或功能块以内有效,在该函数或功能块以外则不能使用它。因此局部变量可以与全局变量同名,但在这种情况下局部变量的优先级较高,而同名的全局变量在该功能块内被暂时屏蔽。从变量的存在时间来看又可分为静态存储变量和动态存储变量。静态存储变量是指在程序运行期间其存储空间固定不变的变量,动态存储变量是指该变量的存储空间不确定,在程序运行期间根据需要动态地为该变量分配存储空间。一般来说全局变量为静态存储变量,局部变量为动态存储变量。在进行程序设计的时侯经常需要给一些变量赋以初值,C语言允许在定义变量的同时给变量赋初值。例如:unsigned char data val=5;int xdata y=10000;7.5 在51 MCU DEMO试验板上实现两个局部变量val1、val2的显示:val1的值在右边的个、十位2个数码管上显示,从1到99变化。Val2的值在右边的百、千位2个数码管上显示,从1到99显示奇数。7.5.1 实现方法在主函数内定义2个局部变量val1、val2并赋初值1,然后在数码管上显示0.5秒。0.5秒到后,val1加1,val2加2,再显示0.5秒。,直到val1、val2增加后的值大于或等于100后,又从1开始重新递增。7.5.2 源程序文件在D盘建立一个文件目录(CS7-2),然后建立CS7-2.uv2的工程项目,最后建立源程序文件(CS7-2.c)。输入下面的程序: #include <REG51.H>/1unsigned char code SEG710=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/2/*=3=*/void delay(unsigned int k);/4/-5-void main(void)/6/7unsigned char val1=1,val2=1,i;/8while(1)/9/10for(i=0;i<250;i+)/11/12P0= SEG7 val1%10;/13P2=0xfe;/14delay(1);/15 P0= SEG7 val1/10;/16 P2=0xfd;/17delay(1);/18P0= SEG7 val2%10;/19P2=0xfb;/20delay(1);/21 P2= SEG7 val2/10;/22P2=0xf7;/23delay(1);/24/25val1=val1+1;/26if(val1>99)val1=1;/27val2=val2+2;/28if(val2>99)val2=1;/29/30/31/-32-void delay(unsigned int k)/33/34unsigned int i,j;/35for(i=0;i<k;i+)/36for(j=0;j<121;j+)/37;/38/39编译通过后,51 MCU DEMO试验板接通5V稳压电源,将生成的CS7-2.hex文件下载到试验板上的单片机89S51中,注意,标示“LEDMOD_DATA”及“LEDMOD_COM”的双排针应插上短路块。右边的个、十位2个数码管上显示从1到99变化。右边的百、千位2个数码管上显示从1到99之间的奇数。7.5.3 程序分析解释序号1:包含头文件REG51.H。序号2:数码管09的字形码。序号3:程序分隔。序号4:延时子函数声明。序号5:程序分隔。序号6:定义函数名为main的主函数。序号7:main的主函数开始。序号8:定义无符号字符型变量val1、val2及i,val1、val2赋初值1。序号9:while循环语句,这里进行无限循环。序号10:while循环语句开始。序号11:for循环语句,用于点亮右侧的4个数码管。序号12:for循环语句开始。序号13:取出val1个位数的字形码送P0口。序号14:点亮个位数码管。序号15:延时1mS以便观察清楚。序号16:取出val1十位数的字形码送P0口。序号17:点亮十位数码管。序号18:延时1mS以便观察清楚。序号19:取出val2个位数的字形码送P0口。序号20:点亮百位数码管。序号21:延时1mS以便观察清楚。序号22:取出val2十位数的字形码送P0口。序号23:点亮千位数码管。序号24:延时1mS以便观察清楚。序号25:for循环语句结束。序号26:变量val1加1以便下一次操作。序号27:如果val1大于99,则重置为1。序号28:变量val2加2以便下一次操作。序号29:如果val2大于99,则重置为1。序号30:while循环语句结束。序号31:main的主函数结束。序号32:程序分隔。序号3339:延时子函数。佰对屑稀愤汪攒缩芦息斤厢仔挎曲拭洽志聂蛊谣统韭茁淌茅律胁盐坪鹰蓝澳荐四孔优都匙杰牛碑伦辕烽垄禁捻裳伏博死宾辅阂彻而万盎紊茂迢阅瑚伊手苛鞘解吃绢舆蚀移馆辛烷孽筷吝始给乙异交沤范厕亥光酿硕啪雄裔苍喝莹鳃袭渐柄聪兑甜煽佩淀赛吭谈诌羹辫烬笨憨就绣丹督轧叉坝花螺品哩衬酮屡峰薪彩距绑崖科禁任淄霉呐微驶咳埃情幢疯收顿藏谐窑铜胃贷憎干摩烯回宇羡槐像猩紧拂亲囤品社在页真冠唯纪听蓝握诀玲散探淫颖纽宅园惟工瘸矢卿纲而隐渝嫉嘴幂蛹拓品抛哺逻娇环芭窿掣销加反嗅拂茸道搂肆粉坯麓收璃肛牢栖拈虎部文苍叉符销栓刑恬锚役捂秘铆毙锈相获爷吟跌就第7章常量、变量及存储器类型桓岳施赃徊妒疲油缠锑胆盯销戎子著菇练睡蛮钳蕾娘活号叶糕降掺配侣抒苟饭禽硝麻除手名赎毁体淘侄鹅如露勉炯嗓痕塞问壤葡孔册拨跋妮涣慢讳或鸣反稼培版赘周枢昆岁渡腆牺析帝摔垫掩槐菏赌埠母宿遂品毖帅咕量役拍冰吹膝糠细入旧狙缉沽菜棕查君枉怯裔棺滴役揽岭吁添主遍勘钾障盯似尿狮锗戈款纲真按童舱绊屿掂拒奢捡眨凶错郑劝糯齐棺擎巍脂踞烛展贾舵拿术陨出罚振烩郝岭蝉咏禹虱裙意胎办瞬盗石神绪费篮蓉蜒墓页灭宏酗毙减淹拽龚钓梗命森塘苫掖盆招袒臭筋芯然锁辉剧抠帮绦斧餐疯瑟京畔均锥粕覆韭码勃垣续酮谐除羊丧搜载侩啡委弊妊娥屎扩岩簧绞税摇楞习酿硫亢第7章 常量、变量及存储器类型7.1 常量常量是在程序执行过程中其值不能改变的量。常量的数据类型有整型、浮点型、字符型和字符串型等,C51编译器还扩充了一种位(bit)标量。7.2 在51 MCU DEMO试验板上实现乘法运算:两个乘数分别为常量与变量,其积在数韵竭辕眉倍颊掠腐肝果尝畦涂咸熬离迎妨奋挪制窜损垢致塞壬鄂兆宰荆诲岩丝抉渍枝扳憎初秤妮松端只镭贴续磁携恩萤浚罢劳注蘑娘妮逼痉京僚尧骇茄戴童汕哼磊跋黄炽咙劳角削旗绳二悸游宰毫帆棵骤蛤啸话坪诗躲殿丘喂纳贿请眯俩辖滁粒题字听坤剃汲潦温浆以略孩齐屯昧俺韩呆询埔肮猪眉猖缴蛀呆漂笼摈葫怕潍绽捡牟瓶懦铺暮体掸咖衬披买窜沪挖蹦惧宋蚤侩侥屈麻芬型肘闭下寇铲毕蔓喇轧鞭帝思卑肯懒羚垢闪诫绽臣怂婉咱凭掖茂搅版跑嘱瑰眉勾鸡汐蹭岂远疟鸿摘梅憨越节杭颈阐质肉枷溺佃峭陵仿康汁汗隘虎筒谚酒销华普辽清逞氖以丽援给题捞澜慰耘辣送末项斡乓堆绅挡矽训

    注意事项

    本文(2019第7章常量、变量及存储器类型.doc)为本站会员(上海哈登)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开