C51关键字及存储区域详解
C51关键字 数据类型 及 存储类型总结
C51关键字数据类型及存储类型总结一、数据类型1.char 字符类型char 类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。
分无符号字符类型unsigned char 和有符号字符类型signed char,默认值为signed char 类型。
unsigned char 类型用字节中所有的位来表示数值,所能表达的数值范围是0~255。
signed char 类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。
所能表示的数值范围是-128~+127。
unsigned char 常用于处理ASCII 字符或用于处理小于或等于255 的整型数。
2.int 整型int 整型长度为两个字节,用于存放一个双字节数据。
分有符号int 整型数signed int 和无符号整型数unsigned int,默认值为signed int 类型。
signed int 表示的数值范围是-32768~+32767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。
unsigned int 表示的数值范围是0~65535。
3.long 长整型long 长整型长度为四个字节,用于存放一个四字节数据。
分有符号long 长整型signed long 和无符号长整型unsigned long,默认值为signed long 类型。
signed int 表示的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。
unsigned long 表示的数值范围是0~4294967295。
4.float 浮点型float 浮点型在十进制中具有7 位有效数字,是符合IEEE-754 标准的单精度浮点型数据,占用四个字节。
因浮点数的结构较复杂在以后的章节中再做详细的讨论。
5.指针型指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。
C51的数据类型
C51的数据类型C51是一种广泛应用于嵌入式系统开发的微控制器系列,其数据类型是指变量在内存中所占用的空间大小和表示范围。
了解C51的数据类型对于编写高效、可靠的嵌入式程序至关重要。
本文将详细介绍C51的数据类型,包括基本数据类型和派生数据类型。
一、基本数据类型1. 位(bit)类型:用于表示二进制位,只能存储0或1。
在C51中,位类型用关键字bit声明,占用1位空间。
2. 无符号整型(unsigned int):用于表示非负整数,范围从0到65535。
在C51中,无符号整型用关键字unsigned int或unsigned声明,占用2个字节(16位)空间。
3. 有符号整型(signed int):用于表示有正负号的整数,范围从-32768到32767。
在C51中,有符号整型用关键字int或signed声明,占用2个字节(16位)空间。
4. 字符型(char):用于表示字符,范围从-128到127。
在C51中,字符型用关键字char声明,占用1个字节(8位)空间。
5. 单精度浮点型(float):用于表示带小数点的数值,范围从3.4E-38到3.4E38。
在C51中,单精度浮点型用关键字float声明,占用4个字节(32位)空间。
6. 双精度浮点型(double):用于表示更大范围的带小数点的数值,范围从1.7E-308到1.7E308。
在C51中,双精度浮点型用关键字double声明,占用8个字节(64位)空间。
二、派生数据类型1. 数组(array):由相同类型的元素组成的数据结构,用于存储一组相关的数据。
在C51中,数组的声明方式为:数据类型数组名[数组长度]。
例如,int numbers[10]表示一个包含10个整数的数组。
2. 结构体(structure):由不同类型的成员变量组成的数据结构,用于存储多个相关的数据。
在C51中,结构体的声明方式为:关键字struct 结构体名 { 成员变量1; 成员变量2; ... }。
Keil C51基础
#define标识符常量表达式
其中,“标识符”是所定义的宏符号名(也称宏名)。它的作用是在程序中使用所指定的标识符来代替所指定的常量表达式。
在实际使用宏定义是,按一般习惯,通常将宏符号名用大写字母白表示,以区别于其他的变量名。宏定义不是C语言的语句,因此在宏定义行的末尾不要加分号,否则在编译时将连同分号一起进行替换而导致语法错误。在进行宏定义时,可以引用已经定义过的宏符号名,即可以进行层层代换,但最多不能超过8级嵌套。需要注意的是预处理命令对于子程序中用双引号括起来的字符串内的字符,即使该字符串与宏符号名相同也不作替换。
在使用符号常量定义时要注意,这些预定义宏符号名不能用#define和#undef命令进行重复定义。
带参数的宏定义与符号常量定义的不同之处在于,对于源程序中出现的宏符号名不仅进行字符串替换,而且还进行参数替换。带参数宏定义的一般格式为:
#define宏符号名(参数表)表达式
其中,表达式内包含了在括号中所指定的参数,这些参数称为形式参数,在以后的程序中它们将被实际参数所替换。带参数的宏定义将一个带形式参数的表达式定义为一个带形式参数表的宏符号名,对程序中所有带实际参数表的该宏符号名,用指定的表达式来替换,同时用参数表中的实际参数替换表达式中对应的形式参数。
RGE
变量被定义在片外数据存储器中(最大可达64KB),使用数据指针DPTR来间接访问变量(MOVX @DPTR)。这种访问数据的方法效率不是很高的,尤其是对于2个以上字节的变量,用这种方法相当影响程序的代码长度。
Keil Cx51编译器提供了一个扩充关键字sbit,利用它定义可位寻址对象。定义方法有如下三种:
#endif
该命令格式与第一种命令格式只在第一行上不同,它的作用与第一种刚好相反,即:如果指定的标识符未被定义,则程序段1参加编译并产生有效代码,而忽略掉程序段2,否则程序段2参加编译并产生有效代码而忽略掉程序段1。
keil C51存储区域类型是什么?
keil C51 存储区域类型是什么?
keil C51 存储区域分为程序存储区和数据存储区2 大类型。
一.程序存储区(Pragram Area):
欲将声明的数据存放在程序存储区域,可以使用关键字code 说明。
例unsigned char code i=10;则表示i 为无符号字符型数据存放区域为程序存储区。
二.数据存储区(Data Memory):
数据存储区域分为内部数据存储区、外部数据存储区域和特殊功能寄存器
寻址区。
1.内部数据存储区域(Internal Data Memory):可以使关键字data、iadta、bdata 做相应说明。
data:直接寻址区,声明的数据存储范围为内部RAM 低128 字节0X00~0X7F。
例unsigned char data i=10;则表示i 为无符号字符型数据存放区域为数据存储区域(RAM)的低128 字节范围内。
C51常用数据类型
C51常用数据类型C51是一种常用的单片机系列,广泛应用于嵌入式系统的开辟中。
在C51编程中,常用的数据类型对于正确的程序设计和数据处理至关重要。
本文将详细介绍C51常用的数据类型及其使用。
1. 位(bit):位是最基本的数据类型,只能表示0或者1两个值。
在C51中,位数据类型用关键字"bit"声明,占用1位内存空间。
位数据类型常用于对单个开关、标志位等进行操作。
例如:bit flag;2. 位域(bit-field):位域是一种将一个字节中的位分割为多个独立的字段的方式。
在C51中,可以使用结构体的成员来定义位域。
位域的长度可以自定义,但不能超过所在字节的位数。
例如:typedef struct {unsigned int bit1: 1;unsigned int bit2: 2;unsigned int bit3: 3;} BitField;BitField bf;3. 字节(byte):字节是计算机中存储和处理数据的基本单位,通常由8个二进制位组成。
在C51中,字节数据类型用关键字"unsigned char"或者"unsigned char"声明,占用8位内存空间。
字节数据类型常用于存储整数、字符等数据。
例如:unsigned char num;4. 整型(integer):整型是用来表示整数的数据类型。
在C51中,整型数据类型有多种,包括有符号整型和无符号整型。
有符号整型可以表示正数、负数和零,无符号整型只能表示非负数和零。
例如:signed int num1;unsigned int num2;5. 长整型(long integer):长整型是一种更大范围的整数数据类型。
在C51中,长整型数据类型用关键字"long"声明,占用4个字节内存空间。
例如:long num;6. 浮点型(floating-point):浮点型是用来表示实数的数据类型,可以表示小数和指数形式的数值。
C51内存结构深度剖析
xdata xdata memory 只能用于声明变量,不能用来声明函数,该区域位于MCU
外部,采用16位地址线进行编码,存储大小被限制在64KB以内。
使用方法:
unsigned char xdata count=0;
为了提高程序的执行效率,C语言允许将一些频率最高的那些变量,定义为能够直接使用硬件寄存器的所谓的寄存器变量。定义一个变量时,在变量类型名前冠以“register” 即将该变量定义成为了寄存器变量。寄存器变量可以认为是一自动变量的一种。有效作用范围也自动变量相同。由于计算机寄存器中寄存器是有限的。不能将所有变量都定义成为寄存器变量,通常在程序中定义寄存器变量时,只是给编译器一个建议,该变量是否真正成为寄存器变量,要由编译器根据实际情况来确定。另一方面,C51编译器能够识别程序中使用频率最高的变量,在可能的情况下,即使程序中并未将该变量定义为寄存器变量,编译器也会自动将其作为寄存器变量处理。被定义的变量是否真正能成为寄存器变量,最终是由编译器决定的。
2对SFR,RAM ,ROM的直接存取
C51提供了一组可以直接对其操作的扩展函数
若源程序中,用#include包含头文件,io51.h 后,就可以在扩展函数中使用特殊功能寄存器的地址名,以增强程序的可读性:
注 此方法对SFR,RAM,ROM的直接存取不建议使用.因为,淡io51.h这个头文件在KEIL中无法打开,可用指针,或是采用absacc.h头文件,
使用方法:
unsigned char data fast_variable=0;
idata idata memory(数据存储区)只能用于声明变量,不能用来声明函数. 该区域位于片内,采用8位地址线编码,内存大小被限制在256byte或更少。该区域的低地址区与data memory地址一致;高地址区域是52系列在51系列基础上扩展的并与特殊功能寄存器具有相同地址编码的区域。即:data memory是idata memory的一个子集。
51单片机的RAM区域划分以及常遇到的问题
51单片机的RAM区域划分以及常遇到的问题前几天群里有一位同学使用AT89S51这个单片机编程,遇到了一个情况:keil软件的options for Target的Target选项中,其中的Memory Model选项,同样的程序,如果选择Small模式进行编译,把程序下载到单片机内,程序就工作正常;如果选择Large模式进行编译,下载到单片机内程序就工作不正常,这个就是新手偶尔遇到,但是很难分析出原因的内存使用溢出问题。
51单片机的问题,是历史问题,比较复杂,那现在一般一些新型单片机这种问题就简单一些,但是也得注意关于RAM的溢出问题。
RAM是用来保存临时数据的,一旦我们的使用量超过了RAM的大小或者区域,那就可能造成一些不可预知的错误问题。
51单片机的RAM分为片内和片外,标准的51内核是0x00~0x7F 一共128B,而现在的大多数半导体厂商开发的51系列单片机都带了扩展片内RAM,即片内RAM区域一般是从0x00到0xFF一共256B。
随着功能需求越来越多,程序量越来越大,那片内这256B也不够用了,因此又扩展了片外RAM,片外RAM的预留比较大,最大可以从0x0000到0xFFFF一共64KB,当然了,每个具体型号有多大不一定,具体看通过芯片的手册来了解。
而现在的51单片机的片外RAM,“片外”只是一个名词而已,实际上很多也是直接做到了单片机内部,但是访问地址,还是以外部的起始地址的方式。
就是说,片内RAM的地址从0x00到0xFF,而片外是从0x0000到0xFFFF;其中最开始的256B是重复的地址,这部分通常情况下只要RAM够用就可以不理会,软件编译器会自动给我们处理好。
当选默认small模式,优先使用内部的前128B,而选Large 模式,优先使用的是片外的64K。
因此上面那个同学的问题就在这里了,因为他用的是AT89S51单片机,而这个单片机是没有片外RAM 的,如果选择了Large模式,那优先使用的是片外,因此编译完成,下载到单片机里,程序运行时用了这个单片机所没有的区域,那肯定就不行了。
KeilC51基本关键字
KeilC51基本关键字KeilC51基本关键字⼀、由ANSI标准定义的共32个:auto double int struct break else long switch case enumregister typedef char extern return union const float shortunsigned continue for signed void default goto sizeof volatile do if while static⼆、KeilCx51扩展的关键字:·_at_ ·alien ·bdata ·bit ·code ·compac ·data·far ·idata ·interrupt ·large ·pdata ·_priority_ ·reentrant·sbit ·sfr ·sfr16 ·small ·_task_ ·using ·xdata三、标准C关键字说明:1)数据类型关键字(12个):(1)char:声明字符型变量或函数(2)double:声明双精度变量或函数(3)enum:声明枚举类型(4)float:声明浮点型变量或函数(5)int:声明整型变量或函数(6)long:声明长整型变量或函数(7)short:声明短整型变量或函数(8)signed:声明有符号类型变量或函数(9)struct:声明结构体变量或函数(10)union:声明联合数据类型(11)unsigned:声明⽆符号类型变量或函数(12)void:声明函数⽆返回值或⽆参数,声明⽆类型指针(基本上就这三个作⽤)2)控制语句关键字(12个):A循环语句(1)for:⼀种循环语句(可意会不可⾔传)(2)do:循环语句的循环体(3)while:循环语句的循环条件(4)break:跳出当前循环(5)continue:结束当前循环,开始下⼀轮循环B条件语句(1)if:条件语句(2)else:条件语句否定分⽀(与if连⽤)(3)goto:⽆条件跳转语句C开关语句(1)switch:⽤于开关语句(2)case:开关语句分⽀(3)default:开关语句中的“其他”分⽀Dreturn:⼦程序返回语句(可以带参数,也看不带参数)3)存储类型关键字(4个)(1)auto:声明⾃动变量⼀般不使⽤(2)extern:声明变量是在其他⽂件正声明(也可以看做是引⽤变量)(3)register:声明积存器变量(4)static:声明静态变量4)其它关键字(4个):(1)const:声明只读变量(2)sizeof:计算数据类型长度(3)typedef:⽤以给数据类型取别名(当然还有其他作⽤(4)volatile:说明变量在程序执⾏中可被隐含地改变四、C51扩展关键字说明1、_at_定义变量的绝对地址格式:<[>memory_type<]>type variable_name_at_constant;例:int xdata value_at_0x8000;/*int at xdata 0x8000*/2、alien (PL/M-51)函数外部声明C函数调⽤PL/M-51必须先⽤alien声明例:extern alien char plm_func (int,char);char c_func (void){int i;char c;for(i=0;i<100;i++){c=plm_func(i,c); /*callPL/Mfunc*/}return(c);}C函数要被PL/M-51调⽤必须先⽤alien声明例:alien char c_func(char a,int b) {return(a*b);}3、Code data, bdata, pdata, idata, xdata C51存储器类型声明Code 程序代码存储区Data 直接寻址⽚内数据存储区(低128字节)Bdata 位寻址⽚内数据存储区(16字节)Idata 间接寻址⽚内数据存储区(256字节)Pdata 分页寻址外部数据存储区(256字节)Xdata 可寻址⽚外数据存储区(64KB)例:int bdata ibase; /*Bit-addressable int*/char bdata bary[4]; /*Bit-addressablearray*/4、bit位变量定义格式:bit name<[>=value<]>;例:static bit done_flag=0; /*bitvariable*/5、sfr sfr16 sbit C51扩展数据类型sfr ⽤于定义8位特殊功能寄存器sfr16 ⽤于定义16位特殊功能寄存器sbit ⽤于定义可位寻址对象例:sfr P0=0x80; /*Port-0, address 80h*/sfr16 T2=0xCC; /*Timer2: T2L 0CCh, T2H 0CDh*/sbit EA=0xAF; //将位绝对地址赋給位变量sfr PSW=0xD0; sbit OV=PSW^2; sbit OV=0xD0^2;int bdata ibase; /*Bit-addressableint*/sbit mybit0=ibase^0; /*bit0ofibase*/6、compact,large,smallC51中变量的存储模式选择Small模式⽤于将所有未指明存储区的变量均保存在data存储区compact模式⽤于将所有未指明存储区的变量均保存在pdata存储区Large模式⽤于将所有未指明存储区的变量均保存在xdata存储区例:#pragmasmall /*Defaulttosmallmodel*/extern int calc(char i, int b) large reentrant;extern int func(int i,float f) large;extern void*tcp(char xdata *xp, int ndx) compact;int mtest(int i,int y) /*Smallmodel*/{ return(i*y+y*i+func(-1,4.75)); }int large_func(int i,int k) large /*Largemodel*/{ return(mtest(i, k)+2); }7、far far存储区是指许多新的8051扩展地址空间。
C51常用数据类型
C51常用数据类型C51是一种广泛应用于嵌入式系统的微控制器,它具有高性能、低功耗和易于使用的特点。
在C51编程中,常用的数据类型对于正确的数据处理和存储至关重要。
本文将介绍C51常用数据类型及其使用方法。
1. 无符号整型(unsigned int):无符号整型是一种不带符号位的整数类型,范围从0到最大正整数。
在C51中,无符号整型的关键字是"unsigned int"。
例如,声明一个无符号整型变量a,并给其赋值为10:unsigned int a = 10;2. 有符号整型(signed int):有符号整型是一种带有符号位的整数类型,范围从最小负整数到最大正整数。
在C51中,有符号整型的关键字是"signed int"。
例如,声明一个有符号整型变量b,并给其赋值为-5:signed int b = -5;3. 字符型(char):字符型是一种用于存储字符的数据类型,在C51中,字符型的关键字是"char"。
例如,声明一个字符型变量c,并给其赋值为'A':char c = 'A';4. 浮点型(float):浮点型是一种用于存储浮点数的数据类型,在C51中,浮点型的关键字是"float"。
例如,声明一个浮点型变量d,并给其赋值为3.14:float d = 3.14;5. 双精度浮点型(double):双精度浮点型是一种用于存储双精度浮点数的数据类型,在C51中,双精度浮点型的关键字是"double"。
例如,声明一个双精度浮点型变量e,并给其赋值为2.71828:double e = 2.71828;6. 位域(bit-field):位域是一种用于存储在一个字节中的多个位的数据类型。
在C51中,可以使用结构体来定义位域。
例如,定义一个结构体bitField,其中包含一个1位的标志位和一个3位的计数器:struct bitField {unsigned int flag: 1;unsigned int counter: 3;};7. 枚举类型(enum):枚举类型是一种用于定义一组具名常量的数据类型。
C51的关键字解释
TL0 8AH 定时器0低8位
TL1 8BH 定时器1低8位
TH0 8CH 定时器0低8位
TH1 8DH 定时器1高8位
带*号的特殊功能寄存器都是可以位寻址的寄存
C51扩展关键字
_at_为变量定义存储空间绝对地址alien声明与PL/M51兼容的函数bdata可位寻址的内部RAMbit位类型codeROMcompact使用外部分页RAM的存储模式data直接寻址的内部RAMidata间接寻址的内部RAMinterrupt中断服务函数large使用外部RAM的存储模式pdata分页寻址的外部RAM_priority_RTX51的任务优先级reentrant可重入函数sbit声明可位寻址的特殊功能位sfr8位的特殊功能寄存器sfr1616位的特殊功能寄存器small内部RAM的存储模式_task_实时任务函数using选择工作寄存器组xdata外部RAM
continue 程序语句 转向下一次循环
default 程序语句 Switch语句中的失败选择项
do 程序语句 构成do..while循环结构
double 数据类型说明 双精度浮点数
else 程序语句 构成if..else选择结构
enum 数据类型说明 枚举
extern 存储种类说明 在其他程序模块中说明了的全局变量
flost 数据类型说明 单精度浮点数
for 程序语句 构成for循环结构
goto 程序语句 构成goto转移结构
if 程序语句 构成if..else选择结构
int 数据类型说明 基本整型数
long 数据类型说明 长整型数
register 存储种类说明 使用CPU内部寄存的变量
C51存储器类型MCS-51单片机物理存储器区域
C51存储器类型MCS-51单⽚机物理存储器区域1、 data区空间⼩,所以只有频繁⽤到或对运算速度要求很⾼的变量才放到data区内,⽐如for循环中的计数值。
2、 data区内最好放局部变量。
因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提⾼内存利⽤率。
当然静态局部变量除外,其内存使⽤⽅式与全局变量相同;3、确保你的程序中没有未调⽤的函数。
在Keil C⾥遇到未调⽤函数,编译器就将其认为可能是中断函数。
函数⾥⽤的局部变量的空间是不释放,也就是同全局变量⼀样处理。
这⼀点Keil C做得很愚蠢,但也没办法。
4、程序中遇到的逻辑标志变量可以定义到bdata中,可以⼤⼤降低内存占⽤空间。
在51系列芯⽚中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。
定义⽅法是: bdata bit LedState;但位类型不能⽤在数组和结构体中。
5、其他不频繁⽤到和对运算速度要求不⾼的变量都放到xdata区。
6、如果想节省data空间就必须⽤large模式,将未定义内存位置的变量全放到xdata区。
当然最好对所有变量都要指定内存类型。
7、当使⽤到指针时,要指定指针指向的内存类型。
在C51中未定义指向内存类型的通⽤指针占⽤3个字节;⽽指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。
如指针p是指向data区,则应定义为: char data *p;。
还可指定指针本⾝的存放内存类型,如:char data * xdata p;。
其含义是指针p指向data区变量,⽽其本⾝存放在xdata区。
bit是在内部数据存储空间中 20H .. 2FH 区域中⼀个位的地址,或者 8051 位可寻址 SFR 的⼀个位地址。
code是在 0000H .. 0FFFFH 之间的⼀个代码地址。
data是在 0 到 127 之间的⼀个数据存储器地址,或者在 128 .. 255 范围内的⼀个特殊功能寄存器(SFR)地址。
C51的数据存储详解
C51的存储种类和存储器类型1.自动变量(auto)char chr=‘a’;等价于auto char chr=‘a’;注意自动变量的作用域在main函数和复合语句中分别定义了一个同名的字符型自动变量并输出,结果证明复合语句中自动变量的作用域仅限于符合语句中。
#include"stdio.h"void main(){char chr='a';{char chr='b';printf("%c\n",chr);}printf("%c\n",chr);}程序运行结果为ba复合语句说明:复合语句把多个语句用括号{}括起来组成的一个语句称复合语句。
在程序中应把复合语句看成是单条语句,而不是多条语句,例如{x=y+z;a=b+c;printf("%d%d",x,a);}是一条复合语句。
复合语句内的各条语句都必须以分号“;”结尾;此外,在括号“}”外不能加分号。
2.外部变量(extern)C51语言允许将大型程序分解为若干个独立放入程序模块文件,各个模块可以分别进行编译然后再连接在一起,在这种情况下,如果某个变量要在其他程序模块文件中使用,只要在一个程序文件中将该变量定义为全局变量,而在其他程序模块文件中使用“extern”说明该变量是已经被定义过的变量就可以了。
在整个程序中都具有相同名字的外部变量只能在一处进行定义和初始化。
#include"stdio.h"char chr_1='a';void main(){extern char chr_2;printf("%c\n",chr_1);printf("%c\n",chr_2);}char chr_2='b';程序运行结果abchr-1是一个全局变量,不需要使用extern进行声明,而chr-2在定义前被使用,因此使用前必须使用extern进行声明。
C51数据类型
C51数据类型C51数据类型是指在C51单片机编程中所使用的数据类型。
C51单片机是一种广泛应用于嵌入式系统中的8位微控制器,它具有高性能、低功耗和易于编程等特点。
在C51单片机编程中,数据类型的选择和使用对于程序的正确性和效率至关重要。
C51数据类型主要包括整型、字符型、浮点型和枚举型等。
下面将详细介绍每种数据类型的特点和使用方法。
1. 整型(int):整型是C51中最常用的数据类型之一,用于表示整数值。
C51单片机中的整型数据通常占用16位(2个字节)的存储空间,范围为-32768到32767。
可以使用关键字"int"来声明整型变量,例如:```cint a = 10;```2. 字符型(char):字符型用于表示单个字符,占用8位(1个字节)的存储空间。
在C51中,字符型数据使用ASCII码表示,范围为0到255。
可以使用关键字"char"来声明字符型变量,例如:```cchar ch = 'A';```3. 浮点型(float):浮点型用于表示带有小数部分的数值。
C51单片机中的浮点型数据通常占用32位(4个字节)的存储空间,范围为3.4E-38到3.4E+38。
可以使用关键字"float"来声明浮点型变量,例如:```cfloat f = 3.14;```4. 枚举型(enum):枚举型用于定义一组具有名称的常量。
在C51中,枚举型常量默认从0开始递增,可以手动指定初始值。
可以使用关键字"enum"来声明枚举型变量,例如:```cenum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };enum Weekday today = Tuesday;```除了以上常用的数据类型,C51还支持其他数据类型,如无符号整型(unsigned int)、长整型(long)、双精度浮点型(double)等。
C51关键字 数据类型 及 存储类型总结
C51关键字数据类型及存储类型总结一、数据类型1.char 字符类型char 类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。
分无符号字符类型unsigned char 和有符号字符类型signed char,默认值为signed char 类型。
unsigned char 类型用字节中所有的位来表示数值,所能表达的数值范围是0~255。
signed char 类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。
所能表示的数值范围是-128~+127。
unsigned char 常用于处理ASCII 字符或用于处理小于或等于255 的整型数。
2.int 整型int 整型长度为两个字节,用于存放一个双字节数据。
分有符号int 整型数signed int 和无符号整型数unsigned int,默认值为signed int 类型。
signed int 表示的数值范围是-32768~+32767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。
unsigned int 表示的数值范围是0~65535。
3.long 长整型long 长整型长度为四个字节,用于存放一个四字节数据。
分有符号long 长整型signed long 和无符号长整型unsigned long,默认值为signed long 类型。
signed int 表示的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。
unsigned long 表示的数值范围是0~4294967295。
4.float 浮点型float 浮点型在十进制中具有7 位有效数字,是符合IEEE-754 标准的单精度浮点型数据,占用四个字节。
因浮点数的结构较复杂在以后的章节中再做详细的讨论。
5.指针型指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。
单片机C51中的关键字
数据类型声明
声明该变量在程序执行中
while
程序语句
构成while 或者do
xdata
存储器类型声明
外部数据存储
说明 用来声明局部变量 可位寻址的内部存储器 退出最内层循环体 位变量值是1或者0 switch语句中的选择项 单字节整数型或字符型数据
程序存储器 在程序执行中不可修改的变量值
退出本循环,进行下一循环 直接寻址的内部数据存储器
声明一个16位的特殊
static
存储器类型声明
静态变量
stuct
数据类型声明
结构类型数
switch
程序语句
构成switch语
typedef
数据类型声明
重新定义数据
union
数据类型声明
联合类型数
unsigned
数据类型声明
无符号数据
using
寄存器组定义
定义芯片的工作
void
数据类型声明
无符号数据
volatile
关键字 auto bdata break bit case char code const continue data default do double else enum extern
用途 存储种类声明 存储器类型声明
程序语句 位变量语句 程序语句 数据类型 存储器类型说明 存储类型声明 程序语句 存储器类型说明 程序语句 程序语句 数据类型 程序语句 数据类型 存储类型声明
定义一个再入函数 函数返回
声明一个可位寻址的变量 短整数型
符号数,二进制的最高位为符号位 计算表达式或数据类型的字节数
声明一个特殊功能寄存器
声明一个16位的特殊功能寄存器 静态变量
C51语言编程基础
图6 完成新建工程文件
21
KEIL C51快速入门
下面可以编写程序。 5、在图2-7中,单击“File”菜 单,再在下拉菜单中单击“New”选 项。
新建文件后屏幕如图8所示。
图7 新建文档
图8 完成 新建文档
22
KEIL C51快速入门
此时光标在编辑窗口里闪烁,这时可以键入应用程序了,建议首先保 存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As” 选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使 用的文件名,用C语言编写扩展名为(.c)如果用汇编语言编写扩展名必须 为(.asm)。然后,单击“保存”按钮。 如图8所示。
图10 添加文档
25
KEIL C51快速入门
选中main.c,然后单击“Add ”屏幕如下图所示。
图10 完成添加文档
注意到“Source Group 1”文件夹中多了一个子项“main.c”子 项的多少与所增加的源程序的多少相同。
7、现在便可输入程序了,输入完毕进行调试便可运行。
26
Proteus 快速入门
一些例程来介绍C51的程序设计思想。
1
单片机入门主要掌握以下知识和应用
最小系统能够运行起来的必要条件。 1.电源 2.晶振3.复位电路
对单片机任意IO口的随意操作
1.输出控制电平高低2.输入检测电平高低。 定时器:重点掌握最常用的方式2 中断:外部中断、定时器中断、串口中断 串口通信:单片机之间、单片机与计算机间
3
使用C语言的优点
C 语言具有结构化和模块化特点,便于阅读和维 护。
C 语言可移植性好,很多微控制器都支持C 编译 器。功能化的代码能够很方便的从一个工程移植 到另一个工程,从而减少了开发时间。 提供的库函数包含许多标准子程序,具有较强的 数据处理能力。
C51程序设计基本知识总结
C51程序设计第1节 C51对标准C语言的扩展
一、C51关键字
二、存储区域
三、数据变量分类(C51中扩展了若干数据类型)
四、存储器模式(在C51编译器选项中选定的,它决定了没有明确指定存储类型的变量、函数等数据的默认存储区域)
五、绝对地址的访问
在一些情况下,可能希望把一些变量定位在51单片机的某个固定的地址空间上。
C51为此专门提供了一个关键字_at_。
关于该关键字,有两点在使用时需要注意:
•绝对地址的变量是不可以被初始化的
•函数或类型为bit的的变量是不可以被定为成绝对地址的
六、指针
七、函数
在C51中,函数的定义与ANSI C中是相同的,唯一不同的就是可能在函数的后面需要带若干的C51专用的关键字。
函数定义格式:[return_type]funcname([args])[{small|compact|large}][reentrant][interrupt n][using n]
return_type:返回值类型;funcname:函数名;args:函数参数列表;{small|compact|large}:函数模式选择;reentrant:重入函数;interrupt n:中断函数;using n:有code banking是究竟使用哪一块空间。
第2节 C51函数库
第3节 C51程序编写
一、C程序基本结构
C程序共有3种基本结构,分别为顺序、选择和循环。
一般的程序都是这3种基本结构组合的结果。
二、编写高效的C51程序及优化程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
compact reentrant xdata
data sbit
一些关键字用法:
1 比特型变量: bit
C51提供了比特型变量,该种类型的变量可以用于的定义和声明,函数参数的传递和函数的返回值
C51存储区域
程序存储区:
片内:4kB; 片外:64KB
内部数据存储区:
data: 直接寻址区,为内部RAM的低128字节00h-7Fh
idata: 间接寻址区,包括整个内部RAM区00h-FFh
绝对地址访问:
xdata char text[256] _at_ 0xE000; //将char型数组存放在xdata型存储区的0xE000地址处
xdata int temp _at_ 0x8000; //存放在xdata 的0x8000处的int型变量
idata struct link list _at_ 0x40; //list结构在idata类型数据区的0x40地址处
3 large 模式
在large模式中,所有缺省变量可放在多达64kB的外部RAM区(和显式的使用xdata关键字来定义是相同的),均使用数据指针DPTR来寻址。此模式空间大,可存变量多,速度慢。
bdata lБайду номын сангаасrge small
bit pdata _task_
code _priority_ using
bdata: 可位寻址区,20H-2FH
外部数据存储区:
xdata: 可指定多达64kb的外部直接寻址区,地址范围:0000H-FFFFH
pdata: 能访问1页(256Bytes)的外部RAM,主要用于紧凑模式(Compact Model)
特殊功能寄存器区:
sfr: 字节寻址,比如sfr P0=0x80;为P0口地址为80H,范围为:80H-FFH
51所有关键字:
_at_ idata sfr
alien interrupt sfr16
sfr16: 字寻址,如 sfr16 T2=0xCC; 指定Timer2口地址T2L=0xCC,T2H=0xCD
sbit : 位寻址,如 sbit EA=0xAF;指定第0xAF位为EA,即中断允许
(数据)存储器模式
1 small模式
所有缺省变量参数均装入内部RAM(与使用显式的data关键字来定义是一样的结果),该模式的优点是访问速度快,缺点是空间有限,对堆栈的空间分配比较少
2 compact 模式
所有缺省变量均位于外部RAM区的一页(和显示的pdata来定义效果是相同的),最大变量数为256kB,优点是空间较small宽裕速度较small慢,较large快,中一种中间状态.使用本模式时,程序通过@R0和@R1指令来进行访问存储器的操作