C51微信小程序定义变量量的6个存储类型?

 您现在的位置:&&>>&&>>&&>>&51单片机C语言程序设计经典案例正文
51单片机C语言程序设计经典案例
51单片机C语言程序设计经典案例
陆若璇  
  []三C51程序设计语言基础任务1C51程序的识读1.C51程序结构例3-1P_test/*********************//注释,还可用//注释掉一行Filename:P_test.cChipname:STC89C51RCClockfrequency:1.20MHz***********************/#include“reg52.h”//预处理命令,文件包含预处理命令,后缀名都是.h,标准的MCS-51单片机头文件为”reg51.h”,STC89系列单片机头文件为”reg52.h”#defineunitunsignedint//宏定义预处理命令sbitBZ=P3`7;sbitkey=P1`0;voiddelay(unitms){while(ms--){for(i=0;i<120;i++);}}voidmain(void){while(1){if(key==0){BZ=0x0;delayms(10);BZ=0x1;delayms(50);P0=0xFF;}else{P0=~P0;delayms(500);}}}2.C51的数据类型C51的数据类型构造类型位变量型bit字符型无符号字符型unsignedchar有符号字符型signedchar整数型无符号整数型unsignedint有符号整数型signedint长整数型无符号长整数型unsignedlongint有符号长整数型signedlongint实数型(浮点型)单精度浮点型float双精度浮点型double数组类型array结构体类型struct共用体union枚举enum表3-1类型指针类型空类型(void)C51基本数据类型的长度和值域长度/bit23224单字节单字节双字节双字节四字节四字节四字节四字节三字节长度/byte范围0,10-255-128--位变量型bit无符号字符型unsignedchar有符号字符型signedchar无符号整数型unsignedint有符号整数型signedint无符号长整数型unsignedlongint有符号长整数型signedlongint单精度浮点型float双精度浮点型double一般指针类型3.C51的标识符和关键字标识符是由字母、数字和下划线组成的字符串,第一个字符必须是字母或下划线,不超过32个字符,。表3-2C51中的关键字关键字autobdatabreakbitcasechar用途存储种类声明存储器类型说明程序语句位变量语句程序语句数据类型的声明说明用来声明局部变量可位寻址的内部数据存储器退出最内层循环体位变量的值是1(true)或0(flase)switch语句中的项单字节整数型或字符型数据关键字codeconstcontinuedatadefaultdodoubleelseenumexternfloatforgotoidataifintinterruptlongpdataregisterreentrantreturnsbitshortsignedsizeofSfrSfr16staticstructswitchtypedefunionunsignedusingvoidvolatilewhilexdata用途存储器类型声明存储类型说明程序语句存储器类型说明程序语句程序语句数据类型说明程序语句数据类型说明存储类型说明数据类型说明程序语句程序语句存储器类型说明程序语句数据类型说明中断声明数据类型说明存储器类型说明存储类型说明再入函数说明程序语句位变量声明数据类型说明数据类型说明运算符特殊功能寄存器声明特殊功能寄存器声明存储类型说明数据类型说明程序语句数据类型说明数据类型说明数据类型说明寄存器组定义数据类型说明数据类型说明程序语句存储器类型说明说明程序存储器在程序过程中不可修改的变量值退出本次循环,转向下一次循环直接寻址的内部数据存储器Switch语句中的失败选择项构成do...while循环结构双精度浮点数构成if...else选择结构枚举在其他程序模块中声明了的全局变量单精度浮点型构成for循环结构构成goto循环结构间接寻址的内部数据存储器构成do...while循环结构基本整数型定义一个中断函数长整数型分页寻址的内部数据存储器使用CPU内部的寄存器变量定义一个再入函数函数返回声明一个可位寻址的变量短整数型有符号数,二进制的最高位位符号位计算表达式或数据类型的字节数声明一个特殊功能寄存器声明一个16位的特殊功能寄存器静态变量结构类型数据构成switch选择语句重新进行数据类型定义联合数据类型无符号数据定义芯片的寄存器无符号数据声明该变量在程序执行中可被隐含改变构成while和do...while循环语句外部数据存储器4.C51的常量和变量1)常量常量就是在程序运行过程中,其值不能改变的数据,包括整型常量、字符常量、字符串常量、实数常量、位标量等,《》()。(1)整型常量:可以用二进制、八进制、十进制、十六进制表示。无符号整数常量在一个数字后面加上“u”或“U”表示。长整数型常量在后面加上“l”或“L”,无符号长整数型常量在数字后面加上“ul”或“UL”,实数型常量在后面加“f”或“F”。(2)字符常量:单引号内的字符,不可以显示的控制字符在前加“\”组成专用转义字符。(3)字符串常量:双引号内的字符,当双引号内没有字符时是空字符串。在C语言中,字符串常量是作为字符类型数组来处理的,在存储字符串时,系统在字符串尾部加上转义字符“\o”,作为该字符串的结束符。(4)实数常量:有十进制和指数两种表示形式。指数表示的实数为“[±]数字[.数字]e[±]数字”,[]中的内容为可选项(5)位标量:位标量的值是一个二进制数。2)变量变量就是在程序运行过程中,其值可以被改变的数据。必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义变量的:[][存储器类型];类型定义和标识符是必要的。存储模式有四种,自动(auto)、外部(extern)、静态(static)和寄存器(register),默认类型为自动(auto)。表3-3C51存储类型与MCS-51单片机存储空间的对应关系及其大小存储类型databdataidatapdataxdatacode与存储空间的对应关系直接寻址片内数据存储区,访问速度快(128B)可位寻址片内数据存储区,允许位与字节混合访问(16B)间接寻址片内数据存储区,可访问片内全部RAM地址空间(256B)分页寻址片外数据存储区,由MOVX@Ri访问寻址片外数据存储区(64KB),由MOVX@DPTR访问寻址代码存储区(64KB),由MOVC@DPTR访问长度/bit长度/byte111122存储范围0-50--65535如果在变量定义时省略了存储类型标识符,则编译器会自动选择默认的存储类型。默认的存储类型进一步由SMALL、COMPACT、和LARGE存储模式指令限制。存储模式决定了变量的默认存储类型、参数传递区和无明确存储类型说明变量的存储类型。在SMALL模式下,参数传递是在片内数据存储区中完成的。51单片机C语言程序设计经典案例COMPACT和LARGE模式允许参数在外部存储器中传递。表3-4存储模式及说明存储模式SMALL说明参数及局部变量放入可直接寻址的片内存储器(最大为128B,默认存储类型为data),因此访问十分方便。另外,所有对象(包括栈)都必须嵌入片内RAM,栈长由函数的嵌套导数决定。参数及局部变量放入分页片外存储区(最大为256B,默认的存储类型为pdata),通过寄存器R0和R1(@R0、@R1)间接寻址,栈空间位于MCS-51系统内部数据存储区中。参数及局部变量直接放入片外数据存储区(最大为64KB,默认存储类型为xdata),使用数据指针DPTR来进行寻址。用此数据指针进行访问效率较低,尤其是对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度。另一不方便之处在于这种数据指针不能对称操作。COMPACTLARGE任务2运算符和表达式表3-5C语言常用的运算符
    〖预览〗第七章第7章
习题1、什么是串行异步通信,它有哪些作用?答:在异步串行通信中,数据是一帧一帧(包括一个字符代码或一字节数据)传送的,每一帧的数据格式参考书。通信采用帧格式,无需同步字符。存在空闲位也是异步通信的特征之一。2、89C51单片机的串行口由哪些功能部件组成?各有什么作用?答:89C51单片机的串行接口由发送缓冲期SBUF,接收缓冲期SBUF、输入移位寄存器、串行接口控制器SCON、定时器T1构成的波特率发生器等部件组成。由发送缓冲期SBUF发送数据,接收缓冲期SBUF接收数据。串行接口通信的工作方式选择、接收和发送控制及状态等均由串行接口控制寄存器SCON控制和指示。定时器T1产生串行通信所需……【】    〖预览〗广东省建设项目环境保护管理条例62512.txt铁饭碗的真实含义不是在一个地方吃一辈子饭,而是一辈子到哪儿都有饭吃。就算是一坨屎,也有遇见屎壳郎的那天。所以你大可不必为今天的自己有太多担忧。
【发布单位】81901【发布文号】-----------【发布日期】【生效日期】【失效日期】-----------【所属类别】地方法规【文件来源】-----------广东省建设项目环境保护管理条例(修正)(1994年7月6日广东省第八届人民代表大会常务委员会第九次会议通过根据1997年9月22日广东省第八届人民代表大会常务委员会第三十一次会议关于修改《广东省建设项目环境保护管理……【】
  〔51单片机C语言程序设计经典案例〕
  51单片机C语言程序设计经典案例所属栏目:〖〗
  “51单片机C语言程序设计经典案例”相关:
  〖〗链接地址:
  资料大全提供的51单片机C语言程序设计经典案例由网友原创或转发,若51单片机C语言程序设计经典案例侵犯了您的权益,请与本站联系,谢谢!
上一个消息: 下一个消息:
51单片机C语言程序设计经典案例相关消息C51的数据类型和变量定义
10:37:49来源: eefocus
&&&&&& C51可支持图5-1所列的,但80C的CPU是一个8位。用8位字节(如:char和unsigned char)的操作比用整数或长整数类型的操作更有效。对于C这样的高级语言,不管使用什么样的数据类型,表面上看起来很简单,然而,实际上C51编译器要用一系列机器指令对其进行复杂的数据类型处理。特别是使用浮点变量时,将明显地增加程序长度和运算时间。除非程序必须保证运行精度,在编写C程序时,尽量避免使用大量的不必要的变量类型。否则会增加所调用的函数的数量,使程序过于庞大,运行速度降低,甚至在代码区中无法安装。
&&&&&& 下面仅对C51在变量定义中注意的问题以及与80C51存储资源有关的问题作说明,其余遵循C语言的规定。
&&&&&& 1.变量声明
&&&&&& 在变量的声明中,可以包括存储类型和signed或unsigned等属性。如:
&&&&&& (1)char data var1;
&&&&&& 定义字符型变量var1,被分配在内部RAM低128B,编译后,通过直接寻址方式访问。
&&&&&& (2)char code text[ ] = &ENTER PARAMETER&;
&&&&&& 定义字符数组text[ ],将其分配到程序存储区,并赋初始值&ENTER PARAMETER&。编译后,通过MOVC& A, @A+DPTR访问。
&&&&&& (3)unsigned long xdata array[100];
&&&&&& 定义无符号长整型数组array[100],将其分配到外RAM中,编译后,通过MOVX A, @DPTR访问。
&&&&&& (4)float idata x,y,z;
&&&&&& 定义浮点类型变量x,y,z,将其分配到内RAM中,编译后,通过间接寻址方式访问。
&&&&&& (5)unsigned int pdata dimension;
&&&&&& 定义无符号整型变量dimension,将其分配到外RAM中,编译后,通过MOVX& A, @Ri指令采用分页的形式访问。
&&&&&& (6)unsigned char xdata vector[10][4][4];
&&&&&& 定义无符号字符型数组vector[10][4][4],将其分配到外RAM中,编译后,通过MOVX A,@DPTR访问。
&&&&&& (7)char bdata flags;
&&&&&& 定义字符型变量flags,将其分配到可位寻址的内部数据存储器中,可以以字节方式访问,也可以以位方式访问。
&&&&&& 如果在变量的定义中,没有包括存储器类型,编译器将自动选用默认或暗示的存储器类型。暗示的存储器类型适用于所有的和静态变量,还有不能分配在寄存器中的函数参数和局部变量。默认的存储器类型由编译器的参数SMALL、COMPACT及LARGE决定,这些参数定义了编译时使用的存储模式。
&&&&&& 2.位变量(bit)
&&&&&& 与80C51硬件特性操作有关的可以定义成位变量。位变量定位在80C51的片内RAM的位寻址空间。
&&&&&& 3.整型变量(int)
&&&&&& 整形变量的长度为16位,占2个字节,在存储器中的存放格式为高位在低地址字节,低位在高地址字节。
&&&&&& 4.浮点变量(float)
&&&&&& 浮点变量的长度为32位,占4个字节,在存储器中的存放格式如下:
&&&&&& 其中:&&& S表示符号位,1表示&正&,0表示&负&。
&&&&&&&&&&&&&&& M表示23尾数,省略了最高位1。
&&&&&&&&&&&&&&&&E表示8位指数位。
&&&&&& 5.特殊功能寄存器(、sfr16、sbit)
&&&&&& 80C51单片机提供128B的SFR寻址区,这个区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、I/O及其他部件,分别由以下几种关键字说明:
&&&&&& (1)sfr:字节寻址。比如sfr P0=0x80;表示P0口地址为80H,&=&后为80H~FFH之间的常数。
&&&&&& (2)sfr16:字寻址。如sfr16 T2=0xCCCD;指定Timer2口地址T2L=CCH,T2H=CDH。
&&&&&& (3)sbit:位寻址。如sbit EA=0xAF位为EA,即中断允许。还可以有如下的定义方法:
&&&&&& 例如:sbit OV=PSW^2;&&& /*定义OV为PSW的第2位,当然需要先有PSW定义*/
&&&&&&&&&&&&sbit OV=0XD0^2;& /*同上*/
&&&&&& 在实际应用中,建议将这些定义放入一个头文件中,以便使用。KeilC51中的reg51.h便是这样一个文件,所以,在C程序中会看到&#include&语句。
&&&&&& 6.C51中的指针
&&&&&& C51编译器支持用星号(*)进行指针声明。可以用指针完成在标准C语言中所有操作。另外,由于80C51单片机及其派生系列所具有的独特结构,C51编译器支持两种不同类型的指针:存储器指针和通用指针。
&&&&&& (1)通用指针。通用或未定型的指针的声明和标准C语言中一样。如:
&&&&&&&& char * s;&&&&&&&&&& /*字符指针*/
&&&&&&&& int * numptr;&&&&& /*整型指针*/
&&&&&&&& long * state;&&&&& /*长整型指针*/
&&&&&& 通用指针总是需要三个字节来存储:第一个字节表示存储器类型,第二个字节是指针的高字节,第三个字节是指针的低字节。
&&&&&& 通用指针可以用来访问所有类型的变量,而不管变量存储在哪个存储空间中。因而,许多库函数都使用通用指针。通过使用通用指针,一个函数可以访问数据,而不用考虑它存储在什么存储器中。
&&&&&& 通用指针很方便,但是也很慢。在所指向目标的存储空间不明确的情况下,它们用得最多。
&&&&&& (2)存储器指针。存储器指针或类型确定的指针在定义时包括一个存储器类型说明,并且总是指向此说明的特定存储器空间。例如:
&&&&&&&& char data * str;&&&&&&& /*指向内RAM低128B的字符指针*/
&&&&&&&& int xdata * numtab;&&& /*指向程序存储区的长整形指针*/
&&&&&& 正是由于存储器类型在编译时已经确定,通用指针中用来表示存储器类型的字节就不再需要了。
&&&&&& 指向idata、data、bdata和pdata的存储器指针用一个字节保存,指向code和xdata的存储器指针用两个字节保存。使用存储器指针比通用指针效率要高,速度要快。当然,存储器指针的使用不是很方便。在所指向目标的存储空间明确并不会变化的情况下,它们用得最多。
&&&&&& 7.C51中的函数
&&&&&& C51中函数的定义和使用与标准C基本相同,但对有所不同,C51编译器采用一个扩展关键字reentrant作为定义函数的选项,需要将一个函数定义为再入函数时,只要在函数名的后面加上关键字reentrant即可,其格式如下:
&&&&&& 函数类型 函数名(形式参数)[reentrant]
&&&&&& 再入函数可被递归调用,无论合适,包括中断服务函数在内的任何函数都可调用再入函数。与非再入函数的参数传递和局部变量的存储分配方法不同,C51编译器为再入函数生成一个模拟栈,通过这个模拟栈来完成参数传递和存放局部变量。模拟栈所在的存储空间根据再入函数存储器模式的不同,可以是data、pdata或xdata存储空间。当程序中包含有多种存储器模式的再入函数时,C51编译器为每种模式单独建立一个模拟栈并独立管理各自的指针。
关键字:&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。C51变量类型_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C51变量类型
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 存储过程中定义变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信