第10章--单片机高级语言C51程序设计解析_第1页
第10章--单片机高级语言C51程序设计解析_第2页
第10章--单片机高级语言C51程序设计解析_第3页
第10章--单片机高级语言C51程序设计解析_第4页
第10章--单片机高级语言C51程序设计解析_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、笔十克単Ft机 级语吉C53程序识计10.1C51语言的特点及其程序结构10. 2C51语言的标识符和关键字10.3 C51语言的数据类型及运算符10.4 C51语言的程序流程控制2.5函 数10.6编译预处理命令10.7 C51程序设计举例教学目的和要求本章主要介绍单片机高级语言C51的语法、 数据结构、语句函数的分类以及简单的C51程序 设计。重点要求掌握C51的语法、数据结构、语句 函数等,以达到设计简单的应用程序的目的。C语言是一种通用的计算机程序设计语言, 在国际上十分流行,它既可用来编写计算机的系统程序,也可用来编写一般的应用程序。以前计算机的系统软件主要是用汇编语言 编写的,对于

2、单片机应用系统来说更是如此。由于汇编语言程序的可读性和可移植性都较差,采用汇编语言编写单片机应用系统程序的周期长,而且调试和排错也比较困难。 C语言具有以下一些特点:1、语言简洁,使用方便灵活。2、可移植性好。3、表达能力强。4、表达方式灵活。5、可进行结构化程序设计。6、可以直接操作计算机硬件。生成的目标代码质量高。第十章单片机高级语言C51程序设计 尽管C语言具有很多的优点,但和其它任 何一种程序设计语言一样也有其自身的缺点, 如不能自动检查数组的边界、各种运算符的优 先级别太多、某些运算符具有多种用途等。 C语言程序是由若干个函数单元组成的, 每个函数都是完成某个特殊任务的子程序段。第十

3、章单片机高级语言C51程序i殳计例:已知xhO, y=20f计算z=x+y的结果。一个C语言程序必须有而且只能有一个名 为main()的函数,它是一个特殊的函数,也 称为该程序的主函数,程序的执行都是从 main。函数开始的。C语言源程序文件的扩展名为M.CM ,如EX1_1.C, EX1_2.C等。mai n ()/*主函数名*/*主函数体开始水/int x. yf z;/*主函数内部变量类型说明*/x=10;y=20;/*变量赋值*/z=x+y;/*计算z二x+y的值*/*程序结束*/第十章单片机高级语言C51程序设计组成一个程序的若干个函数可以保存在 一个源程序文件中,也可以保存在几个源

4、程序 文件中,最后再将它们连接在一起。本例的程序是很简单的,它只有一个主函数 ma in() o-般情况下,一个C语言程序除了必须 有一个主函数之外,还可能有若干个其它的功 能函数。第十章单片机高级语言C51程序设计例10-2:求最大值。# include/*预处理命令*/# includema i n ()/水主函数名*/*主函数体开始水/int a,A,c; /*主函数的内部变量类型说明*/int max(int xf int y);/*功能函数max及其形式参数说明*/C5 1语t的M占一凰SC0N=0x52;/*8051单片机串行口初始化#/TM0D=0x20;TC0N=0x69;TH

5、1=0x0f3;TL1=0x0f3;scanf( M%d%dM,&a,&A); /*输入变量a和A的值*/ c=max (a, A) ;/*调用 max 函数*/pr i ntf( max=%d , c);/*输出变量c的值*/*主程序结束* /第十章单片机高级语言C51程序设计i nt max (int xf int y);/*定义max函数,x、y为形式参数*/ *max函数体开始*/int z;/ *max函数内部变量类型说明水/if (xy) z =x;/*计算最大值* /eIse z=y;return (z);/*将计算得到的最大值返回到调用处* / *max函数结束* /第十章单片

6、机高级语言C51程序设计第十章单片机高级语言C51程序i殳计预处理命令# include函数说明long fun1 ();功能函数1float fun2 0 ; fun1 () 1函数体ij主函数mainOf主函数体i功能函数2fun2 ()f函数体i一般c语言程序具有如下的结构:C语言的标识符是用来标识源程序中某个对象名字的。这些对象可以是函数、变量、常量、数组、数据类型、存储方式和语句等。一个标识符由字符串、数字和下划线等组成,第一个字符必须是字母或下划线。名不要与关键字相同。关键字是一类具有固定名称和特定含义的特殊标识符,有时又称为保留字。在编写c语言源程序时一般不允许将关键字另作别用,

7、换句话说,就是对于标识符的命与其它计算机语言相比,C语言的关键字是比较少的,ANSIC标准一共规定了32个关键字,表10T按用途列出了ANSIC标准的关键字。第十章单片机高级语言C51程序设计关键才用途说明工auto存储类型说明用以说明局部变量break程序语句退出最内层循环体case程序语句sw i tch语句中的选择项char数据类型说明单字节整型数或字符型数据const存储类型说明在程序执行过程中不可修改的变值cont i nue程序语句1转向下一次循环default程序语句swijch语句中的失败选择项do程序语句构成dowhi le循环结构double数据类型说明双精度浮点数else

8、程序语句构成i fe 1 se选择结构enum数据类型说明枚举extern f I oat存储类型说数据类型说明在其他程序模块中说明的全局变量 单精度浮点数for程序语句表10T ANSIC标准的关键字第十章单片机高级语言C51程序设计(goto葩语句构成gqlp转移结构if程序语句构成ifBMo 1 “转移结构int数据类型说明基本轄型数long数据类型说明长整型数register存储类型说明使用CPU内部寄存器的变量return程序语句函数返回short数据类型说明崩整型数signed数据类型说明有符号数,二进制数据的最高位为符号位s i zeof运算符计算表达式或数据类型的字节数stat

9、 i c存储类型说明静态变量struct数据类型说明结构类型数据switch程序语句构成sw i tch选择结构typedef数据类型说明数据类型定义union数据类型说明联合类型数据unsigned数据类型说明无符号数据void数据类型说明无类型数据vo1 at i1e数据类型说明说明该变在程序执行中可被隐含地改变while程序语句构成while和dowhi le循环结构第十章单片机高级语言C51程序设计(C51编译器除了支持ANS IC标准的关键字以外,还扩展 Q了如表10-2所示的关键字:匸丿表10-2 C51编译器的扩展关键字关键字n用途说明 bit位变量说明声明一个位变或位类型的函数

10、sb i t位变量说明声明一个可位寻址的变量8位特殊功能寄存器声明声显t盛抹話囂猛)sf r 1616位特殊功能寄存器声明声明一个特殊功能寄存器(16位)data存储器类型说明直接專址的8051内部数据存储器bdata存储器类型说明可位寻址的8051内部数据存储器i data存储器类型说明间接寻址的8051内部数据存储器pdata存储器类型说明“分页寻址的8061外部数据存储8xdata存储器类型说明8051外部数据存储器code存储器类型说明8051程序存储器interrupt中断函数声明启义一个中断函数reentrant再入函数声明定义_个再入函数using寄存器组定义定义一个8051的工

11、作寄存器组第十章单片机高级语言C51程序设计C语言中的基本数据类型有第十章单片机高级语言C51程序设计数据类型1位数字节数j值域bit101s i gned char81-128+127unsigned char810 255enum162-32768+32767signed short162-32768令32767unsigned short162065535signed int162-32768+32767unsigned int162065535signed long324-21474836482147483647unsigned long32404294967295float13240

12、.1754946-380. 402823E*38sb it101sfr810 255sf r16I162065535表基本数据类型的长度:C51语言的数据类型:任何程序设计都离不开对数据的处理。数 据在计算机内存中的存放情况由数据结构决定。 C语言的数据结构是以数据类型出现的,数据 类型可分为基本数据类型和复杂数据类型,复 杂数据类型由基本数据类型构造而成。1v基本数据类型char, int, short, I ong, f I oat等。数组是一组有序数据的集合,数组中的每一个 数据元素都JH于同一个数据类型。数组中的各个元素可以用数组名和下标来唯一 确定。一维数组只有一个下标,多维数组有两

13、个以 上的下标。在c语言中,数组必须先定义,然后才能使用。第十章单片机高级语言C51程序设计一维数组的定义形式如下:数据类型 数组名常量表达式;其中,数据类型”说明了数组中各个元素的类 型。数组名是整个数组的标识符,它的命名方法 与变量的命名方法一样。“常表达式”说明了该数组的长度,即该数组 中的元素个数。常数表达式必须用方括号”括起来,而且其 中不能含有变量。下面是几个定义一维数组的例子。char xx15;/定义字符型数组xx,它有15个 兀素int yy20;/定义整型数组yy,它有20个元素float zz i 5 ; /定义浮点型数组zz,它有15个 元素定义多维数组时,只要在数组名

14、后面増加相应 于维数的常量表达式即可。对于二维数组的定义形 式为:数据类型数组名常量表达式常量表达 式;需要指出的是,C语言中数组的下标是从0开始 的。在引用数值数组时,只能逐个引用数组中的各 个元素,而不能一次引用整个数组;但如果是字符数 组则可以一次引用整个数组。#includeextern ser ial_initial();mai n ()char *s1;char xdata *s2;char code str = How are you?”第十章单片机高级语言C51程序设计s1=str;s2=0x1000;serial_initial ();whiIe(*s2=*s1) !=f 0

15、)s2+;s1+;s1=str;s2=0x1000;printf ( %sn%sn” ,s1,s2); whi le(1);1执行程序结果:How are you?How are you?第十章单片机高级语言C51程序设计(2)指针类型指针类型数据在C语言程序中的使用十分普 遍。正确地使用指针类型数据,可以有效地表 示复杂的数据结构,直接访问内存地址,而且 可以更为有效地使用数组。指针和地址指针变量的定义:指针变量定义的一般格式:数据类型存储器类型水标识符;其中,“标识符”是所定义的指针变量名。第十章单片机高级语言C51程序设计第十章单片机高级语言C51程序设计指针变的引用:指针变量是含有一个

16、数据对象地址的有关的运算符有两个,它们是地址运算符和间接访问运算符。例如:&a为变量a地址严p为指针变量p第十章单片机高级语言C51程序设计例10-4:输入两个整数x和y,经比较后 按大小顺序输出。#i ncIude extern serial_initial ();main()int x, y;int *p, *p1, *p2;serial_initial();printf( Input x and y :n); scanf ( %d %d,&x, &y);第十章单片机高级语言C51程序设计p1=&x;p2=&y;i f (xy) (p1=p2;p2=p;)pr i ntf ( max=%d

17、, mi n=%dn,1 , *p1, *p2); while(1);1程序执行结果:Input x and y:4 8(回车)max=8, mi n=4(2)结构类型结构是一种构造类型的数据,它是将若干不同C51语t类型的数据变有序地组合在一起而形成的一种数 据的集合体。组成该集合的各个数据变量称为结构成员,整 个集合体使用一个单独的结构变量名。结构变量的定义:有三种定义结构变量的方法,分述如下。struct结构名结构元素表;定义好一个结构类型之后,就可以用它 来定义结构变量。般格式为:struct结构名结构变量名1,结构变名2, 结构变量名3t.结构变量名n;第十章单片机高级语言C51程序

18、设计 在定义结构类型的同时定义结构变量名般格式为:struct结构名结构元素表结构变量名1,结构变量名2, 结构变量名3, 结构变量名n; 直接定义结构变量一般格式为:struct结构元素表结构变量名1,结构变量名2, 结构变量名3,结构变量名n;进行引用,即可以进行赋值、存取和运算。一般情况下,结构变量的引用是通过对其结构元素的引用来实现的。引用结构元素的一般格式为=结构变量名结构元素其中M是存取结构元素的成员运算符。第十章单片机高级语言C51程序设计例10-5:给外部结构变量赋初值。#i ncIude extern serial_initial ();struct mepoi ntunsi

19、gned char name11;unsigned char pressure;uns igned char temperature;po1 = afirstpointM , 0x99, 0x64;void main(void)serial_initial ();printf ( uname:%snressure:%bxn temperature:%bxnM.po1. name, po1. pressure, po1. temperature); whi le(1);程序执行结果:name:f i rstpoi nt pressure:99 temperature:64第十章单片机高级语言C5

20、1程序设计(4)联合类型联合也是C语言中一种构造类型的数据结构。在一个联合中可以包含多个不同类型的数 据元素,例如可以将一个fl oat型变量、一个 i nt型变量和一个char型变量放在同一个地址开始的内存单元中,如以上三个变量在内存中的字节数不同,但 却都从同一个地址开始存放,即采用了所谓“覆盖技术” O覆盖技术可使不同的变量分时使用同一个内存空间,提高内存的利用效率。起始地址图10T联合中变量的存储方法第十章单片机高级语言C51程序设计联合的定义:联合类型变量的一般定义方法为 union联合类型名成员表列变量表列;例如:定义一个data联合。 union datafloat i;int

21、j;char k;a, b, c;联合变量的引用:与结构变量类似,对联合变量的引用也是通过对其联合元素的引用来实现的。引用元素的一般格式为:联合变名.联合元素或联合变量名- 联合元素注意:引用联合元素时,要注意联合变量 用法的一致性。第十章单片机高级语言C51程序设计例10-6:利用联合将整型数转变成两个字节输出. include extern serialinitial0: unionint i:struct unsigned char high, unsigned char lowjbytes: word:mainOint k:k=0x67ab;serial_initial();word

22、i二k;printf(uThe high is :nw word, bytes, high); printf (ttThe low is :word, bytes, low);程序执行结果:The high is 0x67The low is Oxab第十章单片机高级语言C51程序设计个在程序中作为标志使用的变量,赋予了除True或False 以外的值。启外,这些变量通常被定义成int数据类型, 从而使他们在程序中的作用模糊不清。如果我们可以定义 标志类型的数据变量,然后指定这种被说明的数据变量只 能赋值True或False,不能赋予其它值,就可以避免上述 情况的发生。枚举数据类型正是因这种需

23、要而产生的。第十章单片机高级语言C51程序设计枚举的定义枚举数据类型是一个有名字的某些整数型常数的集合。这些 整数型常数是该类型变最可取的所有合法值.枚举定义应当列出 该类型变量的可取值。枚举定义说明语句的一般格式:enum枚举名枚举值列表变量列表;枚举的定义和说明也可以分成两句完成:enum枚举名枚举值列表;enum枚举名变量列表;枚举变量的取值枚举列表中,每一项符号代表一个整数值。在默认情况下. 第一项符号取值为0,第二项符号取值为1,第三项符号取值为 2,依次类推。此外,也可以通过初始化,指定某些项的 符号值。某项符号初始化后,该项后续各项符号值随之依次递增。switch (lp)casecasecasecase第十章单片机高级语言C51程序i殳计n=n+l; printf (M%-4dw,n);for (lp=l; lp3; lp+)C51语t的敌据类型2迄第符例10-7:将颜色为红.绿.蓝的三个球作全排列,共有几种排法?打印出 每种组合的三种颜色。include include extern serialinitial(); mainO enum color red, green, blue;/定义枚举类型 Aniun color i, j, k, st:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论