C51语言程序设计基础.ppt
《C51语言程序设计基础.ppt》由会员分享,可在线阅读,更多相关《C51语言程序设计基础.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 单片机C51语言设计基础3.1 C51的数据的数据3.2 C51对单对单片机主要片机主要资资源的控制源的控制3.3 C51的基本运算与流程控制的基本运算与流程控制3.4 C51的数的数组组与指与指针针3.5 C51函数函数3.6 C51的的预处预处理命令理命令3.1 C51的数据3.1.1 数据数据类类型型 常量与常量与变变量量3.1.3 数据存数据存储类储类型型3.1.4 局部局部变变量与全局量与全局变变量量 3.1.1 数据类型3.1.2 常量与变量1常量常量 C51语语言中的常量是不接受程序修改的固定言中的常量是不接受程序修改的固定值值,常量可以是任意数据,常量可以是任意数据类类
2、型。型。C51中的常量有中的常量有整型常量、整型常量、实实型常量、字符型常量、字符串常量符号型常量、字符型常量、字符串常量符号常量常量等。等。(2)实实型常量型常量 在整型常量后加一个字母在整型常量后加一个字母“L”或或“l”,表示,表示该该数位数位长长整型。整型。例如例如23L、0Xfd4l等。等。如果需要的是如果需要的是负值负值,则则必必须须将将负负号号“-”放置于常量表达式放置于常量表达式的最前面,例如的最前面,例如-0 x56、-9等。等。实型常量又称型常量又称浮点常量浮点常量,是一个十,是一个十进制表示的符号制表示的符号实数。数。实型常量的型常量的值包括整数部分、尾数部分和指包括整数
3、部分、尾数部分和指数部分。数部分。实型常量的形式如下:型常量的形式如下:digits.digitsE+/-digits一些一些实型常量的示例如下:型常量的示例如下:、1575E-3、25E-4。(3)字符型常量 字符型常量是指用一字符型常量是指用一对对单单引号引号括起来的一个字符。如括起来的一个字符。如a、9、!等。等。字符常量中的字符常量中的单单引号只起定界作用并不表示字符本身。引号只起定界作用并不表示字符本身。在在C51语语言中,字符是按其言中,字符是按其对应对应的的ASCII码值码值来存来存储储的,的,1个字符占个字符占1个个字字节节 字符串常量是指用一字符串常量是指用一对双引号括起来的
4、一串字符,双引号只起定界作用,双引号括起来的一串字符,双引号只起定界作用,如如China、123456等。等。(5)符号常量 C51语言中允言中允许将程序中的常量定将程序中的常量定义为一个一个标识符,称符,称为符号常量符号常量。符号常量一般使用符号常量一般使用大写大写英文字母表示,以区英文字母表示,以区别于一般用小写字母表于一般用小写字母表示的示的变量。量。符号常量在使用前必符号常量在使用前必须先定先定义,定,定义的形式是:的形式是:#define 标识符符常量常量2变量变变量的定量的定义义:数据数据类类型型 变变量名量名;int i,j,k;unsigned char si;unsigned
5、 int ui;double balance,profit,loss;C51中常用的:中常用的:bit、char、int(1)整型变量(INT)16位数据有符号:有符号:signed int -32 76832 767 无符号:无符号:unsigned int 065 535 0 x1234存存储形式形式(3)实实型型变变量量(2)长长整型整型变变量(量(long int)长长整型整型变变量量长长度是度是32位,占用位,占用4个字个字节节(byte),其他),其他方面和整型方面和整型变变量(量(int)相似。)相似。分分为单精度(精度(float)型和双精度()型和双精度(double)型。)
6、型。其定其定义形式形式为:float x,y;/指定指定x,y为单精度精度实数数 double z;/指定指定z为双精度双精度实数数在一般系在一般系统中,一个中,一个float型数据在内存中占型数据在内存中占4个字个字节(32位),一个位),一个double型数据占型数据占8个字个字节(64位)。位)。单精精度度实数提供数提供7位有效数字,双精度位有效数字,双精度实数提供数提供1516位有效位有效数字。数字。(4)字符变量CHAR字符字符变变量用来存放字符常量。注意只能存放量用来存放字符常量。注意只能存放1个字符。个字符。字符字符变变量的定量的定义义形式如下:形式如下:char 变变量名量名;
7、例如:例如:char c1,c2;它表示它表示c1和和c2为为字符字符变变量,各存放量,各存放1个字符。可以用下面的个字符。可以用下面的语语句句对对c1、c2赋赋值值:c1=a;c2=b;字符字符变变量的量的长长度是度是1字字节节(byte)即)即8位。位。这这很适合于很适合于8051单单片机,因片机,因为为8051单单片机每次可以片机每次可以处处理理8位数据位数据。变量的量的类型是位,位型是位,位变量的量的值可以是可以是1(true)或)或0(false)。)。与与8051硬件特性操作有关的位硬件特性操作有关的位变量必量必须定位在定位在8051单片机片内存片机片内存储区区(RAM)的可位)的
8、可位寻址空址空间中。中。3有符号/无符号问题说明(1)尽量使用无符号)尽量使用无符号变变量量(2)在)在编编程程时时,为为了了书书写方便,写方便,经经常使用常使用简简化的化的缩缩写形式来定写形式来定义义变变量的数据量的数据类类型:型:#define uchar unsigned char#define uint unsigned int3.1.3 数据存储类型 数据数据时时存放在存放在51单单片机的存片机的存储储器中的,因此要器中的,因此要规规定数据的定数据的存存储类储类型。型。P53 表表3-4 常用:常用:data、xdata、code 另外:另外:bdata(1)DATA区区data区的
9、区的寻寻址是最快的,所以址是最快的,所以应该应该把把经经常使常使用的用的变变量放在量放在data区,但是区,但是data区的空区的空间间是是有限的,有限的,data区除了包含程序区除了包含程序变变量外,量外,还还包包含了堆含了堆栈栈和寄存器和寄存器组组。data区声明中的存区声明中的存储类储类型型标标式符式符为为data,通,通常指片内常指片内RAM的低的低128字字节节的内部数据存的内部数据存储储的的变变量,可直接量,可直接寻寻址。址。声明声明举举例如下:例如下:unsigned char data system_status=0;unsigned int data unit_id2;cha
10、r data inp_string16;bdata实际实际是是data中的位中的位寻寻址区,在址区,在这这个区中声个区中声明明变变量就可以量就可以进进行位行位寻寻址。位址。位变变量的声明量的声明对对状状态态寄存器来寄存器来说说是十分有用的,因是十分有用的,因为为它可能它可能仅仅仅仅需要某一位,而不是整个字需要某一位,而不是整个字节节。bdata区声明中的存区声明中的存储类储类型型标识标识符符为为bdata,指,指内部可位内部可位寻寻址的址的16字字节节存存储储区(区(20H到到2FH),),数据数据类类型是可位型是可位寻寻址址变变量的数据量的数据类类型。型。(2)BDATA区区以下是在BDAT
11、A区中声明的位变量和使用位变量的例子:unsigned char bdata status_byte;unsigned int bdata status_word;unsigned long bdata status_dword;sbit stat_flag=status_byte4;if(status_word15)stat_flag=1;(3)IDATA区idata区也可以存放使用比区也可以存放使用比较频较频繁的繁的变变量,使用寄存器作量,使用寄存器作为为指指针进针进行行寻寻址。址。idata区声明中的存区声明中的存储类储类型型标识标识符符为为idata,指内部的,指内部的256字字节节的
12、存的存储储区,区,但是只能但是只能间间接接寻寻址,速度比直接址,速度比直接寻寻址慢。址慢。声明声明举举例如下:例如下:unsigned char idata system_status=0;unsigned int idata unit_id2;char idata inp_string16;float idata out_value;pdata区和区和xdata区属于外部数据存区属于外部数据存储区,外部数据区是可区,外部数据区是可读可写的可写的存存储区,最多可以有区,最多可以有64KB。在在这两个区,两个区,变量的声明与在其他区的量的声明与在其他区的语法是一法是一样的,但的,但pdata区只
13、区只有有256字字节而而xdata区可达区可达65 536字字节。声明举例如下:unsigned char xdata system_status=0;unsigned int pdata unit_id2;char xdata inp_string16;float pdata out_value;外部地址段中除了包含存外部地址段中除了包含存储储器地址外,器地址外,还还包含包含I/O器件的地址器件的地址。对对外部器件外部器件寻寻址可以通址可以通过过指指针针或或C51提供的宏,使用宏提供的宏,使用宏对对外部器件外部器件I/O口口进进行行寻寻址更具可址更具可读读性。性。(5)程序存)程序存储储区区
14、CODE 程序存程序存储储区的数据是不可改区的数据是不可改变变的,跳的,跳转转向量和状向量和状态态表表对对code段段访问访问和和对对xdata区区访问访问的的时间时间是一是一样样的。的。编译编译的的时时候要候要对对程序存程序存储储区中的区中的对对象象进进行初始行初始化,否化,否则则就会就会产产生生错误错误。程序存。程序存储储区区code声明的声明的标标识识符符为为code,在,在C51语语言言编译编译器中可以用器中可以用code存存储储区区类类型型标识标识符来符来访问访问程序存程序存储储区。下面是程序存区。下面是程序存储储区声明的例子:区声明的例子:unsigned char code a=
15、0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08,0 x09,0 x10,0 x11,0 x12,0 x13,0 x14,0 x15;变量存储类型定义举例:char data var1;bit bdata flags;float idata x,y,z;unsigned int pdata dimension;unsigned char xdata vector1044;3.1.4 局部局部变变量与全局量与全局变变量量 从从变变量的作用范量的作用范围围来区分,来区分,变变量可以被分量可以被分为为全局全局变变量和局部量和局部变变量量;某些
16、某些变变量在程序运行量在程序运行过过程中是始程中是始终终存在的存在的-全局全局变变量量。某些某些变变量只是在量只是在进进入某个函数入某个函数时时才开始存在才开始存在-局部局部变变量。量。1局部变量局部局部变变量量是在某个函数中存在的是在某个函数中存在的变变量,也可以称量,也可以称为为内部内部变变量,它只在量,它只在该该函数内部有效。函数内部有效。局部局部变变量可以分量可以分为为动态动态局部局部变变量量和和静静态态局部局部变变量量,使用关,使用关键词键词auto定定义义动态动态局部局部变变量(量(auto可以省略),使用关可以省略),使用关键词键词static定定义义静静态态局部局部变变量,量,
17、例如例如:auto int a;static unsigned char j;动态局部局部变量量在程序在程序执行完行完毕后其存后其存储空空间被被释放,而放,而静静态局部局部变量量在在程序程序执行完成后其存行完成后其存储空空间并不并不释放,而且其放,而且其值保持不保持不变。如果如果该函数再次被函数再次被调用,用,则该函数初始化后其初始函数初始化后其初始值为上次的数上次的数值。动态局部局部变量和静量和静态局部局部变量的区量的区别如下:如下:动态动态局部局部变变量在函数被量在函数被调调用用时时分配存分配存储储空空间间和和初始化,每次函数初始化,每次函数调调用用时时都需要初始化;静都需要初始化;静态态
18、局部局部变变量在量在编译编译程序程序时时分配存分配存储储空空间间和初始化,和初始化,仅仅初始化一次。初始化一次。动态动态局部局部变变量存放在量存放在动态动态存存储储区,在每次退出区,在每次退出所属函数所属函数时释时释放;静放;静态态局部局部变变量存放在静量存放在静态态存存储储区,每次区,每次调调用后函数不用后函数不释释放,保持函数放,保持函数执执行行完完毕毕之后的数之后的数值值到下一次到下一次调调用。用。如果在建立如果在建立时动态时动态局部局部变变量不初始量不初始为为一个不确一个不确定的数,静定的数,静态态局部局部变变量不初始化,量不初始化,则则它它们们的的值值为为0或者是空字符。或者是空字符
19、。2全局全局变变量量 全局全局变变量是在整个源文件中都存在的量是在整个源文件中都存在的变变量,又称量,又称为为外部外部变变量。全局量。全局变变量的有效区量的有效区间间是从定是从定义义点开始到源文件点开始到源文件结结束,其中的所有函数都可束,其中的所有函数都可以直接以直接访问该变访问该变量,如果定量,如果定义义点之前的函数需要点之前的函数需要访问该变访问该变量,量,则则需要需要使用使用extern关关键词对该变键词对该变量量进进行声明,如果全局行声明,如果全局变变量声明文件之外的量声明文件之外的源文件需要源文件需要访问该变访问该变量,也需要使用量,也需要使用extern关关键词进键词进行声明。行
20、声明。全局变量有以下特点:全局全局变量是整个文件都可以量是整个文件都可以访问的的变量,可以用于在函数之量,可以用于在函数之间共享共享大量的数据,存在周期大量的数据,存在周期长,在程序,在程序编译时就存在,如果两个函数需要就存在,如果两个函数需要在不互相在不互相调用用时共享数据,共享数据,则可以使用全局可以使用全局变量量进行参数行参数传递;C51语言程序的函数只支持一个函数返回言程序的函数只支持一个函数返回值,如果一个函数需要返回,如果一个函数需要返回多个多个值,除了使用指,除了使用指针外,外,还要使用全局要使用全局变量;量;使用全局使用全局变量量进行参数行参数传递可以减少从可以减少从实际参数向
21、形式参数参数向形式参数传递时所必需的堆所必需的堆栈操作;操作;在一个文件中,如果某个函数的局部在一个文件中,如果某个函数的局部变量和全局量和全局变量同名,量同名,则在在这个局部个局部变量的作用范量的作用范围内局部内局部变量不起作用,全局量不起作用,全局变量起作用;量起作用;全局全局变量一直存在,占用了大量的内存量一直存在,占用了大量的内存单元,并且加大了程序的耦元,并且加大了程序的耦合性,不利于程序的移植或复用。合性,不利于程序的移植或复用。静静态态局部局部变变量的作用范量的作用范围仅仅围仅仅是在定是在定义义的函数内,不的函数内,不能被其他的函数能被其他的函数访问访问,全局,全局变变量的作用范
22、量的作用范围围是整个程序,是整个程序,静静态态全局全局变变量的作用范量的作用范围围是是该变该变量定量定义义的文件;的文件;静静态态局部局部变变量是在函数内部定量是在函数内部定义义,全局,全局变变量是在所有量是在所有函数外定函数外定义义;静静态态局部局部变变量量仅仅仅仅在第在第1次次调调用用时时被初始化,再次被初始化,再次调调用用时时使用上次使用上次调调用用结结束束时时的数的数值值,全局,全局变变量在程序运行量在程序运行时时建立,建立,值为值为最近一条最近一条访问该访问该全局全局变变量的量的语语句句执执行的行的结结果。果。另外,另外,main函数函数虽虽然是然是.c文件的主文件,但也是一个文件的
23、主文件,但也是一个函数,在其内部定函数,在其内部定义义的的变变量也属于局部量也属于局部变变量。全局量。全局变变量量一般在一般在.c文件的开始部分定文件的开始部分定义义或在或在.h文件中定文件中定义义,由,由.c文件引用。文件引用。C51语语言程序多使用全局言程序多使用全局变变量量传递传递参数,因参数,因为这样为这样可以降低程序可以降低程序处处理的理的难难度,加快程序度,加快程序执执行的速度,行的速度,提高程序的提高程序的时时效性。效性。3.2 C51对单对单片机片机资资源的控制源的控制3.2.1 特殊功能寄存器的特殊功能寄存器的C51语语言定言定义义3.2.2 绝对绝对地址的地址的访问访问3.
24、2.3 位位变变量的量的C51语语言定言定义义3.2.1 特殊功能寄存器的特殊功能寄存器的C51定定义义21个特殊功能寄存器。两种方式:个特殊功能寄存器。两种方式:1使用关使用关键键字字sfr定定义义 sfr 特功器名字特功器名字=特功器地址特功器地址;sfr SCON=0 x98;/*串口控制寄存器地址串口控制寄存器地址98H*/sfr TMOD=0X89;/*定定时时器器/计计数器方式控制寄存器地址数器方式控制寄存器地址9H*/2通通过头过头文件文件访问访问SFR#include/使用的使用的单单片机片机为为Intel公司的公司的MCS-51void main(void)TL0=0 xb0
25、;TH0=0 x3c;TR0=1;/启启动动定定时时器器0.3SFR中位定义3种方式(1)第)第1种方法种方法sbit 位名位名=特殊功能寄存器名特殊功能寄存器名位置位置;(2)第)第2种方法种方法sbit 位名位名=字字节节地址地址位置位置;(3)第)第3种方法种方法sbit 位名位名=位地址位地址;例:例:unsigned char bdata flag;sbit flag0=flag0;sfr P1=0 x90;sbit P1_0=P10;sbit P1_1=P11;sbit P1_6=P16;sbit P1_7=P17;P60 例例3-3 sbit型型变量的定量的定义P60 例例3-4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 语言程序设计 基础
限制150内