单片机原理与实践C语言版高卫东第三章C5程序设计基础

上传人:人*** 文档编号:592339703 上传时间:2024-09-20 格式:PPT 页数:86 大小:1.90MB
返回 下载 相关 举报
单片机原理与实践C语言版高卫东第三章C5程序设计基础_第1页
第1页 / 共86页
单片机原理与实践C语言版高卫东第三章C5程序设计基础_第2页
第2页 / 共86页
单片机原理与实践C语言版高卫东第三章C5程序设计基础_第3页
第3页 / 共86页
单片机原理与实践C语言版高卫东第三章C5程序设计基础_第4页
第4页 / 共86页
单片机原理与实践C语言版高卫东第三章C5程序设计基础_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《单片机原理与实践C语言版高卫东第三章C5程序设计基础》由会员分享,可在线阅读,更多相关《单片机原理与实践C语言版高卫东第三章C5程序设计基础(86页珍藏版)》请在金锄头文库上搜索。

1、单片机与接口技术单片机与接口技术任课教师:任课教师:郑旭丹郑旭丹第第三三章章 C51C51程序设计基础程序设计基础3.1 C3.1 C语言与语言与MCS-51MCS-51单片机单片机3.2 3.2 C51C51的数据类型和存储模式的数据类型和存储模式3.3 3.3 C51C51对单片机内部资源的控制对单片机内部资源的控制3.4 3.4 C51C51的基本运算和控制语句的基本运算和控制语句主要内容主要内容3.5 3.5 C51C51的构造数据类型的构造数据类型3.7 3.7 C51C51的其他问题的其他问题3.6 3.6 C51C51函数函数3.1 C51特点特点3.1.1 C513.1.1 C

2、51语言概述语言概述 随着单片机硬件性能的不断提高和应随着单片机硬件性能的不断提高和应用技术的不断发展,开发者越来越注重用技术的不断发展,开发者越来越注重目标系统的开发成效,而开发成效在很目标系统的开发成效,而开发成效在很大程度上取决于程序本身的编写效率。大程度上取决于程序本身的编写效率。为了适应这种要求,出现了单片机高级为了适应这种要求,出现了单片机高级语言语言C语言。语言。3.1 C51特点特点3.1.1 C513.1.1 C51语言概述语言概述使用使用C C语言进行语言进行5151单片机编程是单片机系统开发的发展方单片机编程是单片机系统开发的发展方向,向,C C语言是通用计算机程序设计语

3、言,但现在也广泛用于单片语言是通用计算机程序设计语言,但现在也广泛用于单片机开发,机开发,C C语言与汇编语言相比具有使用容易、可移植性好、可语言与汇编语言相比具有使用容易、可移植性好、可以直接操作硬件的特点,特别是在单片机上采用操作系统,则必以直接操作硬件的特点,特别是在单片机上采用操作系统,则必须采用须采用C C语言编程。语言编程。对于初学单片机来说,采用对于初学单片机来说,采用C C语言入门单片机也是一个好的语言入门单片机也是一个好的选择,使用选择,使用C C语言可以避免汇编语言需要记忆大量指令的缺点,语言可以避免汇编语言需要记忆大量指令的缺点,快速学会单片机。快速学会单片机。KeilK

4、eil软件是一个简单易学的单片机软件是一个简单易学的单片机C C语言开发工具,语言开发工具,KeilKeil软软件具有使用简单,功能强的特点。件具有使用简单,功能强的特点。KeilKeil软件加上软件加上C C语言,是开发语言,是开发5151单片机的利器,也是初学单片机必须掌握的单片机开发手段。单片机的利器,也是初学单片机必须掌握的单片机开发手段。3.1 C51特点特点3.1.1 C513.1.1 C51与标准与标准C C的差别的差别(1 1)C51C51中定义的库函数和标准中定义的库函数和标准C C语言定义的语言定义的库函数不同库函数不同。标准。标准的的C C语言定义的库函数是按通用微型计算

5、机来定义的,而语言定义的库函数是按通用微型计算机来定义的,而C51C51中的库中的库函数是按函数是按MCS-51MCS-51单片机相应情况来定义的;单片机相应情况来定义的;(2 2)C51C51中的数据类型与标准中的数据类型与标准C C的数据类型也有一定的区别,在的数据类型也有一定的区别,在C51C51中还增加了几种针对中还增加了几种针对MCS-51MCS-51单片机单片机特有的数据类型特有的数据类型;(3 3)C51C51变量的存储模式与标准变量的存储模式与标准C C中变量的中变量的存储模式不一样存储模式不一样,C51C51中变量的存储模式是与中变量的存储模式是与MCS-51MCS-51单片

6、机的存储器紧密相关;单片机的存储器紧密相关;(4 4)C51C51与标准与标准C C的输入输出处理不一样,的输入输出处理不一样,C51C51中的输入输出是通中的输入输出是通过过MCS-51MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;行初始化;(5 5)C51C51与标准与标准C C在函数使用方面也有一定的区别,在函数使用方面也有一定的区别,C51C51中有中有专门专门的中断函数的中断函数。3.1 C3.1 C语言与语言与MCS-51MCS-51单片机单片机3.2 C513.2 C51的数据类型和存储模式的数据类型和存

7、储模式3.3 3.3 C51C51对单片机内部资源的控制对单片机内部资源的控制3.4 3.4 C51C51的基本运算和控制语句的基本运算和控制语句主要内容主要内容3.5 3.5 C51C51的构造数据类型的构造数据类型3.7 3.7 C51C51的其他问题的其他问题3.6 3.6 C51C51函数函数3.2.1 C513.2.1 C51的数据类型的数据类型c语言中数据有常量和变量之分。语言中数据有常量和变量之分。在程序运行过程中,数值不改变的量称为常量。在程序运行过程中,数值不改变的量称为常量。包括:整型常量、字符型常量、字符串型常量、符包括:整型常量、字符型常量、字符串型常量、符号常量。号常

8、量。符号常量的定义:符号常量的定义: #difine False 0x0; /用预定义语句可以定义常量用预定义语句可以定义常量 #difine TRUE 0x1; /这里定义这里定义TRUE为为1, False为为03.2.1 C513.2.1 C51的数据类型的数据类型 变变量量在程序执行过程中,数值可以发生改变的量称为在程序执行过程中,数值可以发生改变的量称为变量变量。 例如例如变量名与存储单元地址相对应,变量值变量名与存储单元地址相对应,变量值与存储单元的内容相对应。与存储单元的内容相对应。3.2.1 C513.2.1 C51的数据类型的数据类型 变变量量的定义格式的定义格式【存储种类存

9、储种类】数据类型数据类型【存储类型存储类型】变量名变量名作用范围(标准作用范围(标准C C)* * 方括号项方括号项可以缺省可以缺省存储空间存储空间 (C51(C51特有特有) )数据格式数据格式(C51(C51扩充扩充) )3.2.1 C513.2.1 C51的数据类型的数据类型【存储种类】数据类型【存储种类】数据类型【存储类型】【存储类型】变量名变量名变变量量名名可可以以由由字字母母、数数字字和和下下划划线线三三种种字字符符组组成成,且且第第一一个个字符必须为字母或下划线字符必须为字母或下划线,变量名长度随编译系统而定。,变量名长度随编译系统而定。 变变量量名名具具有有字字母母大大小小写写

10、的的敏敏感感性性,如如SUMSUM和和sumsum代代表表不不同同的的变变量。量。强调:强调:头文件中定义的变量都是大写的头文件中定义的变量都是大写的3.2.1 C513.2.1 C51的数据类型的数据类型 自动变量自动变量(autoauto)在函数在函数内部内部定义的变量,退出函数定义的变量,退出函数后,分配给该变量的存储单元即自行消失(局部变量)。后,分配给该变量的存储单元即自行消失(局部变量)。【存储种类存储种类】数据类型【存储类型】变量名数据类型【存储类型】变量名 外部变量(外部变量(externextern)在函数在函数外部外部定义的变量,可始定义的变量,可始终保持变量的数值(全局变

11、量)。终保持变量的数值(全局变量)。 【强调】一个外部变量只能被定义一次,在定义文件之【强调】一个外部变量只能被定义一次,在定义文件之外的地方使用时需用外的地方使用时需用externextern进行声明。进行声明。 静态变量(静态变量(staticstatic)静态局部变量静态局部变量/ /静态全局变量静态全局变量 寄存器变量(寄存器变量(registerregister)以寄存器为存储空间的变量以寄存器为存储空间的变量* * 若省略存储种类选项,则变量默认为自动变量若省略存储种类选项,则变量默认为自动变量 3.2.1 C513.2.1 C51的数据类型的数据类型 【存储种类】【存储种类】数据

12、类型数据类型【存储类型】变量名【存储类型】变量名3.2.1 C513.2.1 C51的数据类型的数据类型u charchar类型的长度是一个字节,通常用于定义处理字符数据的类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。变量或常量。分无符号字符类型分无符号字符类型unsigned charunsigned char和有符号字符类和有符号字符类型型signed charsigned char,默认值为,默认值为signed charsigned char类型。类型。u signed charsigned char类型用字节中最高位字节表示数据的符号,类型用字节中最高位字节表示数据的符

13、号,00表示正数,表示正数,11表示负数,负数用补码表示。所能表示的数值范表示负数,负数用补码表示。所能表示的数值范围是围是128128+127+127。unsigned charunsigned char常用于处理常用于处理ASCIIASCII字符或用于字符或用于处理小于或等于处理小于或等于255255的整型数。的整型数。u unsigned charunsigned char类型用字节中所有的位来表示数值,所可表达类型用字节中所有的位来表示数值,所可表达的数值范围是的数值范围是0 0255255;非常适合;非常适合5151单片机使用,因为单片机使用,因为5151单片机每单片机每次处理次处理

14、8 8位数据。位数据。(1 1)charchar字符型字符型3.2.1 C513.2.1 C51的数据类型的数据类型 整型长度为两个字节,用于存放一个双字节数据整型长度为两个字节,用于存放一个双字节数据。分有符号。分有符号intint整型数整型数signed intsigned int和无符号整型数和无符号整型数unsigned intunsigned int,默认值为,默认值为signed intsigned int类型。类型。signed intsigned int表示的数值范围是表示的数值范围是3276832768+32767+32767,字节中最高位表示数据的符号,字节中最高位表示数据

15、的符号,00表示正数,表示正数,11表示表示负数。负数。unsigned intunsigned int表示的数值范围是表示的数值范围是0 06553565535。(2 2)int int 整型整型 长整型长度为四个字节,用于存放一个四字节数据。长整型长度为四个字节,用于存放一个四字节数据。分有符分有符号号longlong长整型长整型signed longsigned long和无符号长整型和无符号长整型unsigned longunsigned long,默认,默认值为值为signed longsigned long类型。类型。signed intsigned int表示的数值范围是表示的数

16、值范围是21474836482147483648+2147483647+2147483647,字节中最高位表示数据的符号,字节中最高位表示数据的符号,00表示正数,表示正数,11表示负数。表示负数。unsigned longunsigned long表示的数值范围是表示的数值范围是0 042949672954294967295。(3 3)long long 长整型长整型3.2.1 C513.2.1 C51的数据类型的数据类型 浮点型符合浮点型符合IEEEIEEE754754标准的单精度浮点型数据,占用四个标准的单精度浮点型数据,占用四个字节(字节(3232位二进制数)。位二进制数)。 (4 4

17、)float float 浮点型浮点型 指针型本身就是一个变量,在这个变量中存放指向另一个数指针型本身就是一个变量,在这个变量中存放指向另一个数据的地址。据的地址。这个指针变量要占据一定的内存单元,对不同的处理这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同,在器长度也不尽相同,在C51C51中它的长度一般为中它的长度一般为1 13 3个字节。指针变个字节。指针变量也具有类型。量也具有类型。 (5 5)指针型)指针型3.2.1 C513.2.1 C51的数据类型的数据类型 位标量是位标量是C51C51编译器的一种扩充数据类型,利用编译器的一种扩充数据类型,利用它可定义一它可定义一

18、个位标量个位标量,但不能定义位指针,也不能定义位数组。,但不能定义位指针,也不能定义位数组。它的值是一它的值是一个二进制位个二进制位,不是,不是0 0就是就是1 1,类似一些高级语言中的,类似一些高级语言中的BooleanBoolean类型类型中的中的TrueTrue和和FalseFalse。与。与5151单片机有关的位操作必须定位在片内单片机有关的位操作必须定位在片内RAMRAM中的位寻址空间。中的位寻址空间。(6 6)bit bit 位变量位变量 特殊功能寄存器也是一种扩充数据类型,占用一个内存单元,值特殊功能寄存器也是一种扩充数据类型,占用一个内存单元,值域为域为0 0255255。利用

19、它可以访问。利用它可以访问5151单片机内部的所有特殊功能寄存器。单片机内部的所有特殊功能寄存器。 例如例如sfr P1= 0x90sfr P1= 0x90这一语句定义这一语句定义P1P1标识符代表单片机标识符代表单片机P1P1端口在片端口在片内的寄存器(地址内的寄存器(地址0x900x90),在后面的语句中可以用),在后面的语句中可以用P1= 255P1= 255(对(对P1P1端端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。 用法:用法:sfr sfr 特殊功能寄存器名特殊功能寄存器名 = = 地址常数;地址常数;(7 7)s

20、fr sfr 特殊功能寄存器特殊功能寄存器3.2.1 C513.2.1 C51的数据类型的数据类型 sbitsbit是是C51C51中的一种扩充数据类型,利用它可以访问中的一种扩充数据类型,利用它可以访问芯片内芯片内部的部的RAMRAM中的可寻址位或特殊功能寄存器中的可寻址位中的可寻址位或特殊功能寄存器中的可寻址位。 例如,例如,sfr P0 = 0x80; /sfr P0 = 0x80; /因因P0P0端口的寄存器是可端口的寄存器是可位寻址的,所以我们可以定义位寻址的,所以我们可以定义 sbit P0_1 = P0sbit P0_1 = P01;1; /P0_1 /P0_1为为P0P0口中的

21、口中的P0.1P0.1引脚引脚 同样我们可以用同样我们可以用P1.1P1.1的地址去写的地址去写, ,如如sbit P1_1 = 0x91;sbit P1_1 = 0x91;这样在以后的程序语句中就可以用这样在以后的程序语句中就可以用P1_1P1_1来对来对P1P1口的引脚口的引脚1 1进行读进行读写操作了。写操作了。 以上所述的数据类型中,只有以上所述的数据类型中,只有bitbit与与unsigned charunsigned char两种数据两种数据类型可以直接转换成机器指令。在编写类型可以直接转换成机器指令。在编写C51C51程序时,应尽可能使程序时,应尽可能使用无符号字符变量,以及位变

22、量。用无符号字符变量,以及位变量。(8 8)sbit sbit 可寻址位可寻址位3.2.2 3.2.2 存储类型及存储区存储类型及存储区5151系列单片机有三个逻辑存储空间:系列单片机有三个逻辑存储空间:片内数据存储器,片外数据存储器和程序存储器。片内数据存储器,片外数据存储器和程序存储器。80HFFH8052【存储种类】数据类型【存储种类】数据类型【存储类型】【存储类型】变量名变量名3.2.2 3.2.2 存储类型及存储区存储类型及存储区【存储种类】数据类型【存储种类】数据类型【存储类型】【存储类型】变量名变量名3.2.2 3.2.2 存储类型及存储区存储类型及存储区【存储种类】数据类型【存

23、储种类】数据类型【存储类型】【存储类型】变量名变量名data区区xdata区区code区区bdata区区80HFFH8052idata区区256B256B256B256B每一个每一个256字节字节都是都是pdata区区3.2.3 3.2.3 存储模式存储模式v如果在变量声明时未声明变量的存储器类型,则该变量的存如果在变量声明时未声明变量的存储器类型,则该变量的存储器类型,由程序的储器类型,由程序的存储模式存储模式来决定。来决定。小模式(小模式(small modelsmall model):默认):默认datadata区区紧凑模式(紧凑模式(compact modelcompact model

24、):默认):默认pdatapdata区区大模式(大模式(large modellarge model):默认):默认xdataxdata区区v注意:除非应用在特殊的场合,否则注意:除非应用在特殊的场合,否则SMALLSMALL存储模式可以提存储模式可以提供最快和最有效的代码。供最快和最有效的代码。 【存储种类】数据类型【存储种类】数据类型【存储类型】【存储类型】变量名变量名3.1 C3.1 C语言与语言与MCS-51MCS-51单片机单片机3.2 C513.2 C51的数据类型和存储模式的数据类型和存储模式3.3 C513.3 C51对单片机内部资源的控制对单片机内部资源的控制3.4 3.4

25、C51C51的基本运算和控制语句的基本运算和控制语句主要内容主要内容3.5 3.5 C51C51的构造数据类型的构造数据类型3.7 3.7 C51C51的其他问题的其他问题3.6 3.6 C51C51函数函数3.3 C513.3 C51对对5151单片机内部资源的控制单片机内部资源的控制1 1、 sfrsfr:定义定义8 8位特殊功能寄存器位特殊功能寄存器usfrsfr可以用来定义可以用来定义80518051单片机的单片机的8 8位特殊功能寄存器。位特殊功能寄存器。sfrsfr占用一个字节内存单元,取值范围是占用一个字节内存单元,取值范围是0 2550 255。usfrsfr定义特殊功能寄存器

26、定义特殊功能寄存器SFRSFR,语法规则如下:,语法规则如下: sfrsfr 或或 sfr16sfr16 sfr_name = sfr_name = 字节地址常数字节地址常数; ;uP0P0,P1P1,P2P2,P3P3是是sfrsfr声明的特殊功能寄存器的名称。声明的特殊功能寄存器的名称。特殊功能寄存器名称是一个合法的特殊功能寄存器名称是一个合法的C C标识符。等号后标识符。等号后的地址必须是的地址必须是数值常量数值常量,不允许使用带运算符的表不允许使用带运算符的表达式达式。3.3 C513.3 C51对对5151单片机内部资源的控制单片机内部资源的控制reg51.h和和reg52.h是定义

27、是定义51单片机和单片机和52单片机特殊功单片机特殊功能寄存器和位寄存器的,这两个头文件大部分内容一样,能寄存器和位寄存器的,这两个头文件大部分内容一样,52单片机比单片机比51多一个定时器多一个定时器T2,所以,所以reg52.h也多几也多几行定义行定义T2寄存器的内容。寄存器的内容。3.3 C513.3 C51对对5151单片机内部资源的控制单片机内部资源的控制80518051芯片可以将两个芯片可以将两个8 8位位SFRSFR作为一个作为一个1616位寄存器来访问。条件位寄存器来访问。条件是这两个是这两个SFRSFR必须处在相邻地址上,并且是低字节在高字节必须处在相邻地址上,并且是低字节在

28、高字节地址的前面。地址的前面。C51C51提供了提供了sfr16sfr16数据类型来进行数据类型来进行1616位特殊功能寄存器的声明,位特殊功能寄存器的声明,声明时声明时低字节地址被用来作为低字节地址被用来作为sfr16sfr16的地址的地址。例如例如:sfr16 T2 = 0xCC; sfr16 T2 = 0xCC; /* Timer 2: T2L 0CCh, T2H 0CDh */* Timer 2: T2L 0CCh, T2H 0CDh */sfr16 RCAP2 = 0xCA;/* RCAP2L 0CAh, RCAP2H 0CBh */sfr16 RCAP2 = 0xCA;/* RCA

29、P2L 0CAh, RCAP2H 0CBh */在这个例子中,在这个例子中,T2T2和和RCAP2RCAP2被声明为被声明为1616位的特殊功能寄存器。位的特殊功能寄存器。sfr16sfr16声明和声明和sfrsfr声明的规则相同。声明的规则相同。2 2、sfrsfr1616:定义定义1616位特殊功能寄存器位特殊功能寄存器3.3 C513.3 C51对对5151单片机内部资源的控制单片机内部资源的控制3 3、特殊功能寄存器中特定位的定义、特殊功能寄存器中特定位的定义usbitsbit用来访问用来访问SFRSFR中的可寻址位和其它可位寻址对象的可中的可寻址位和其它可位寻址对象的可寻址位。寻址位

30、。u在在80518051应用中,经常需要对应用中,经常需要对SFRSFR中的可寻址位(特殊功能中的可寻址位(特殊功能位)进行独立访问。可以用位)进行独立访问。可以用sbitsbit数据类型来将数据类型来将SFRSFR中的可中的可寻址位声明为特殊功能位。寻址位声明为特殊功能位。 sbit EA = 0xAF;sbit EA = 0xAF; 上例中将上例中将EAEA定义为地址定义为地址0XAF0XAF,对,对80518051而言这是中断使而言这是中断使能寄存器(能寄存器(IEIE)的中断许可位。)的中断许可位。s sbitbit:定义定义特殊功能位特殊功能位3.3 C513.3 C51对对5151

31、单片机内部资源的控制单片机内部资源的控制v有三种方法来声明位地址:有三种方法来声明位地址:方法方法一一: 用字节地址位定义用字节地址位定义 该地址必须可以被该地址必须可以被8 8整除,整除, 符号后的表达式定义符号后的表达式定义了可寻址位的位地址。位地址必须是了可寻址位的位地址。位地址必须是0-70-7之间的数。之间的数。sbit CY = 0xD0 7;sbit CY = 0xD0 7;sbit EA = 0xA8 7;sbit EA = 0xA8 7;sbit OV = 0xD0 2;sbit OV = 0xD0 2;方法方法二二:用寄存器名位定义,用寄存器名位定义,即即SFRSFR寄存器

32、名寄存器名 整形常量整形常量 这种方法使用已经定义的这种方法使用已经定义的sfrsfr作为作为sbitsbit的基地址。的基地址。如:如: sfr PSW = 0xD0;sfr PSW = 0xD0;/声明寄存器名声明寄存器名sfr IE = 0xA8;sfr IE = 0xA8;sbit CY = PSW 7;sbit CY = PSW 7; /声明特殊功能位声明特殊功能位sbit EA = IE sbit EA = IE 3.3 C513.3 C51对对5151单片机内部资源的控制单片机内部资源的控制v有三种方法来声明位地址:有三种方法来声明位地址:方法方法三三: 用直接位地址定义用直接位

33、地址定义 sbit OV = 0xD2;sbit OV = 0xD2;sbit CY = 0xD7;sbit CY = 0xD7;sbit EA = 0xAF;sbit EA = 0xAF;方法方法四四: 使用头文件,再直接用位名称使用头文件,再直接用位名称 例如:例如: #include #include TR0=1; TR0=1; EA=1 EA=13.3 C513.3 C51对对5151单片机内部资源的控制单片机内部资源的控制 程序的第一行是一个程序的第一行是一个“文件包含文件包含”处理。程序中包含处理。程序中包含reg5reg51 1.h.h文件的目的是为了要使用文件的目的是为了要使用

34、P1P1这个符号,即通知这个符号,即通知C51C51编译编译器,程序中所写的器,程序中所写的P1P1是指是指80C580C51 1单片机的单片机的P1P1端口而不是其他变端口而不是其他变量。量。 可根据不同的编程需要选择不同的头文件,一般情况下若可根据不同的编程需要选择不同的头文件,一般情况下若只用简单控制,只需要下面只用简单控制,只需要下面3 3个头文件:个头文件:#include reg5#include .h /* /*寄存器说明头文件寄存器说明头文件*/*/#include #include /* /*输入输入/ /输出说明头文件输出说明头文件*/*/#include #include

35、 /* /*部分特殊指令说明头文件部分特殊指令说明头文件*/*/编译预处理部分编译预处理部分3.3 C513.3 C51对对5151单片机内部资源的控制单片机内部资源的控制 sbit led0=P00; sbit led0=P00; 在在C C语言里,如果直接写语言里,如果直接写P P0 0.0.0,C C编译器并不能识编译器并不能识别,而且别,而且P1.0P1.0也不是一个合法的也不是一个合法的C C语言变量名,所以语言变量名,所以需给它另起一个名字,这里使用了需给它另起一个名字,这里使用了Keil CKeil C的关键字的关键字sbitsbit来定义。来定义。3.3 C513.3 C51对

36、对5151单片机内部资源的控制单片机内部资源的控制3.3.3 3.3.3 对一般位变量的定义对一般位变量的定义v位变量(位变量(Bit TypesBit Types)是指用一个二进制位表示的变量。位是指用一个二进制位表示的变量。位数据类型可以用来说明变量,参数表,函数返回值等。位数据类型可以用来说明变量,参数表,函数返回值等。位数据变量声明和基本的数据类型声明一样。数据变量声明和基本的数据类型声明一样。v所有的位变量都存储在所有的位变量都存储在内部数据区的位寻址段内部数据区的位寻址段中。因为该中。因为该段只有段只有1616个字节长,所以在一个作用域内最多只能声明个字节长,所以在一个作用域内最多

37、只能声明128128个位变量。个位变量。v注意:由于位变量只能存储在内部数据存储区的位变量区注意:由于位变量只能存储在内部数据存储区的位变量区内,因此只能使用内,因此只能使用data data 和和idataidata两种存储器类型修饰符,两种存储器类型修饰符,其它存储器类型是非法的。其它存储器类型是非法的。3.1 C3.1 C语言与语言与MCS-51MCS-51单片机单片机3.2 3.2 C51C51的数据类型和存储模式的数据类型和存储模式3.3 3.3 C51C51对单片机内部资源的控制对单片机内部资源的控制3.4 C513.4 C51的基本运算和控制语句的基本运算和控制语句主要内容主要内

38、容3.5 3.5 C51C51的构造数据类型的构造数据类型3.7 3.7 C51C51的其他问题的其他问题3.6 3.6 C51C51函数函数3.4.1 C513.4.1 C51基本运算基本运算运算符运算符是表示特定的算术或逻辑运算的符号,也是表示特定的算术或逻辑运算的符号,也称称操作符操作符。把需要进行运算的各个量通过运算符连接起来,便构把需要进行运算的各个量通过运算符连接起来,便构成成表达式表达式。算术运算符、关系运算符、算术运算符、关系运算符、逻辑运算符、赋值运算符逻辑运算符、赋值运算符位运算符位运算符3.4.1 C513.4.1 C51基本运算基本运算1 1、算术运算符和算术表达式、算

39、术运算符和算术表达式3.4.1 C513.4.1 C51基本运算基本运算2 2、关系运算符和关系表达式、关系运算符和关系表达式 关系运算用于比较两个数的大小,用关系运算关系运算用于比较两个数的大小,用关系运算符将两个表达式连接起来形成的式子,称为关系表符将两个表达式连接起来形成的式子,称为关系表达式。达式。 关系运算的结果为逻辑量,成立为真关系运算的结果为逻辑量,成立为真(1)(1),不成立,不成立为假为假(0)(0)。3.4.1 C513.4.1 C51基本运算基本运算3 3、逻辑运算符和逻辑表达式、逻辑运算符和逻辑表达式 逻辑运算符则用于求条件式的逻辑值。用逻辑逻辑运算符则用于求条件式的逻

40、辑值。用逻辑运算符将关系表达式或逻辑量连接起来的式子就是运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式。3.4.1 C513.4.1 C51基本运算基本运算4 4、赋值运算符和赋值表达式、赋值运算符和赋值表达式 格式:格式:变量变量= =表达式表达式; ; 执行时先计算出右边表达式的值,然后赋给执行时先计算出右边表达式的值,然后赋给左边的变量。左边的变量。a = 0xFF;a = 0xFF;b = c = 33;b = c = 33;d = e;d = e; f = a+b;f = a+b;3.4.1 C513.4.1 C51基本运算基本运算4 4、复合赋值运算符、复合赋值

41、运算符v例如:a+=b/a=(a+b)x*=a+b/x=(x*(a+b)a=4/a=(a4)3.4.1 C513.4.1 C51基本运算基本运算3.3.5 3.3.5 位运算符和位运算位运算符和位运算1、C51中的操作符,每执行一次右移指令,被操作数将最低位移到PSW寄存器中的CY中,最高位补0,其他位依次右移一位。3.4.1 C513.4.1 C51基本运算基本运算3.4.1 C513.4.1 C51基本运算基本运算3.3.5 3.3.5 位运算符和位运算位运算符和位运算若若a=11000011Bb=a2b=00110000Bc=a=1) c=10; else if (a=2) c=20;

42、else if (a=3) c=30; else if (a=4) c=40; else c=0; 3.4.2 3.4.2 选择结构选择结构关于程序中的分界符关于程序中的分界符和和3.4.2 3.4.2 选择结构选择结构使用使用ifif语句的注意事项语句的注意事项v先处理正常情况,再处理异常情况先处理正常情况,再处理异常情况 把把正正常常情情况况的的处处理理放放到到ifif后后面面,把把异异常常情情况况的的处处理放到理放到elseelse后面。后面。 因因为为ifif语语句句总总是是需需要要做做判判断断,而而正正常常情情况况一一般般比比异异常常情情况况发发生生的的概概率率更更大大,如如果果把把

43、执执行行概概率率更更大大的的语语句放到后面,意味着句放到后面,意味着ifif语句将进行多次无谓的比较。语句将进行多次无谓的比较。v确保确保ifif和和elseelse子句没有弄反子句没有弄反3.4.2 3.4.2 选择结构选择结构 单片机单片机P1P1口的口的P1.0P1.0和和P1.1P1.1各接一个开关各接一个开关K1K1、K2K2,P1.4P1.4、P1.5P1.5、P1.6P1.6和和P1.7P1.7各接一只发光二极管。有各接一只发光二极管。有K1K1和和K2K2的不同状态来确定哪个发光二极管被点亮。的不同状态来确定哪个发光二极管被点亮。3.4.2 3.4.2 选择结构选择结构方法一:

44、用方法一:用if语句实现语句实现#include “reg51.h”void main()char a;a=P1;a=a&0x03;/*屏蔽高屏蔽高6位位*/if (a=0) P1=0x83; else if (a=1) P1=0x43; else if (a=2) P1=0x23; else P1=0x13;3.4.2 3.4.2 选择结构选择结构2.switch2.switch语句语句Switch(表达式表达式) case 常量表达式常量表达式1: 动作动作1; break; case 常量表达式常量表达式2: 动作动作2; break; case 常量表达式常量表达式n: 动作动作n;

45、break; default: 动作动作n+1; break;常量常量D1动作动作1常量常量D2动作动作2常量常量Dn动作动作n表达式表达式default动作动作n+13.4.2 3.4.2 选择结构选择结构switch使用规则使用规则v每每个个casecase语语句句的的结结尾尾不不要要忘忘了了加加breakbreak,否否则则将将导导致致多个分支重叠。(除非有意使多个分支重叠)多个分支重叠。(除非有意使多个分支重叠)v最后必须使用最后必须使用defaultdefault语句语句。即使程序不需要,也应。即使程序不需要,也应该保留语句:该保留语句: default: default: brea

46、k;break; 这这样样做做并并非非画画蛇蛇添添足足,可可以以避避免免让让人人误误以以为为你你忘忘了了defaultdefault处理处理vcasecase后面只能是整型或字符型的常量或后面只能是整型或字符型的常量或常量表达式。常量表达式。3.4.2 3.4.2 选择结构选择结构方法二:用方法二:用switch/case语句实现语句实现#include “reg51.h”void main()char a;a=P1;a=a&0x03;/*屏蔽高屏蔽高6位位*/switch (a) case0:P1=0x83;break; case1:P1=0x43;break; case2:P1=0x23;

47、break;case3:P1=0x13;break; default: break; 3.4.3 3.4.3 循环结构循环结构 3.4.1 3.4.1 顺序结构顺序结构 3.4.2 3.4.2 选择结构选择结构3.4 C513.4 C51控制语句和结构化程序设计控制语句和结构化程序设计3.4.3 3.4.3 循环结构循环结构1、for语句语句C C语言中有三种循环语句:语言中有三种循环语句:whilewhile、forfor和和do whiledo while语句。语句。for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3 3) ) 处理程序;处理程序; 表达式表达式1

48、1表达式表达式2 2为真为真处理程序处理程序表达式表达式3 3N NY Y注意:注意: 处理程序可以为空操作;处理程序可以为空操作; forfor语句的各表达式都可以省,而语句的各表达式都可以省,而分号不能省,在省略各表达式时要特分号不能省,在省略各表达式时要特别小心分析,防止造成无限死循环。别小心分析,防止造成无限死循环。 3.4.3 3.4.3 循环结构循环结构1、for语句语句void Delay(uint del)uint i,j;for(i=0; idel; i+)for(j=0; j1827; j+) ;3.4.3 3.4.3 循环结构循环结构2、while语句语句whilewhi

49、le语句常用来实现语句常用来实现“当型当型”循环结构。其一般格式如下:循环结构。其一般格式如下:注意:注意:当循环体包含一个以上的语句时,应该用花括号当循环体包含一个以上的语句时,应该用花括号“”括起来。括起来。一般情况下,在循环体中应该有让循环最终能结束的语句,否则将造成一般情况下,在循环体中应该有让循环最终能结束的语句,否则将造成死循环。死循环。while(表达式表达式) 循环体;循环体; 表达式为真处理程序NY3.4.3 3.4.3 循环结构循环结构 求求1到到100的和的和Void main(void) unsigned char i,sum; i=1, sum=0; While (i

50、=100) sum=sum+1; i+; While (表达式)(表达式) 循环体语句循环体语句 (内部也可为空)(内部也可为空) ;2、while语句语句3.4.3 3.4.3 循环结构循环结构3、do _while语句语句 常用来实现常用来实现“直到型直到型”循环结构。其一般形式为:循环结构。其一般形式为:do 处理程序;处理程序; while(表达式表达式);表达式为真处理程序NY特点特点:先执行语句,后判断表达式。先执行语句,后判断表达式。执行过程执行过程:先执行一次指定的内嵌语句,然后判断表达式,当表达式的值为先执行一次指定的内嵌语句,然后判断表达式,当表达式的值为非非0 0时,返回

51、重新执行该语句;如此反复,直到表达式的值等于时,返回重新执行该语句;如此反复,直到表达式的值等于0 0为止,此为止,此时循环结束时循环结束。3.4.3 3.4.3 循环结构循环结构循环语句的注意点循环语句的注意点v在多层循环中,如果有可能,应当在多层循环中,如果有可能,应当将最长的循环放到将最长的循环放到内层,最短的循环放到最外层内层,最短的循环放到最外层,以减少,以减少CPUCPU跨切循环跨切循环层的次数。层的次数。3.4.3 3.4.3 循环结构循环结构循环语句的注意点循环语句的注意点vforfor语句的循环控制变量的取值采用语句的循环控制变量的取值采用“半开半闭区间半开半闭区间”。“半开

52、半闭区间”写法和“闭区间”写法功能相同,但前者更加直观。3.4.3 3.4.3 循环结构循环结构循环语句的注意点循环语句的注意点v不能在不能在forfor循环体内修改循环变量,防止循环失控。循环体内修改循环变量,防止循环失控。for(n=0;n10;n+)for(n=0;n10;n+) n=8; / n=8; /不可,很可能违背了你的原意不可,很可能违背了你的原意 3.4.3 3.4.3 循环结构循环结构循环语句的注意点循环语句的注意点v循环要尽可能的短循环要尽可能的短,要使代码清晰,一目了然。,要使代码清晰,一目了然。v把循环嵌套控制在把循环嵌套控制在3 3层以内层以内。 解决方法:解决方法

53、:重新设置循环或把循环内容写成一重新设置循环或把循环内容写成一个子函数。个子函数。3.4.3 3.4.3 循环结构循环结构5. break 5. break 语句语句 在循环语句中,在循环语句中,breakbreak语句的作用是在循环体中测试到应立语句的作用是在循环体中测试到应立即结束循环条件时,控制程序立即跳出循环结构,转而执行循即结束循环条件时,控制程序立即跳出循环结构,转而执行循环语句后的语句。环语句后的语句。6. continue 6. continue 语句语句 continue continue 语句只能用于循环结构中,作用是结束本次循语句只能用于循环结构中,作用是结束本次循环。一

54、旦执行了环。一旦执行了continuecontinue语句,程序就跳过循环体中位于该语语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新一轮循环。句后的所有语句,提前结束本次循环周期并开始新一轮循环。3.6 C513.6 C51语言的函数语言的函数3.6.3 库函数库函数必须调用必须调用#include_crol_-将将char型变量循环左移指定位数后返回。型变量循环左移指定位数后返回。_cror_-将将char型变量循环右移指定位数后返回。型变量循环右移指定位数后返回。3.6 C513.6 C51语言的函数语言的函数_crol_-最高位移入最低位,其他各位一次向左移

55、动最高位移入最低位,其他各位一次向左移动一位。一位。_cror_-最低位移入最高位,其他各位一次向右移动一位。最低位移入最高位,其他各位一次向右移动一位。3.6 C513.6 C51语言的函数语言的函数3.2.1 3.2.1 编程例子编程例子 程序程序由由函数函数组成(一个主函数,组成(一个主函数,或一个主函数和若干自定义函或一个主函数和若干自定义函数);数); 利用利用预处理预处理命令对变量或函数命令对变量或函数进行进行集中定义或说明集中定义或说明; 函数和变量都需遵循函数和变量都需遵循先定义后先定义后使用使用的基本原则;的基本原则; 主函数中的所有语句执行完毕主函数中的所有语句执行完毕,

56、,则程序结束。则程序结束。 C51C51与标准与标准C C程序结构完全相同程序结构完全相同1 1. .程序结构程序结构3.2.1 3.2.1 编程例子编程例子2 2. .举例:举例:LEDLED闪烁灯控制闪烁灯控制3.2.1 3.2.1 编程例子编程例子#include/51#include/51头文件头文件void delay();void delay();/延时函数声明延时函数声明sbit p1_0=P10;sbit p1_0=P10;/输出端口定义输出端口定义void main()void main()/主函数主函数 while(1) while(1)/无限循环体无限循环体 p1_0=0

57、; p1_0=0;/P1.0=“0”/P1.0=“0”,LEDLED亮亮 delay(); delay();/延时延时 p1_0=1; p1_0=1; /P1.0=“1” /P1.0=“1”,LEDLED灭灭 delay(); delay(); / /延时延时 void delay()void delay()/延时函数延时函数 unsigned int i; unsigned int i; /整型变量整型变量i i for(i=20000;i0;i-);/ for(i=20000;i0;i-);/循环延时循环延时 预处理命令预处理命令-函数说明函数说明-全局变量定义全局变量定义- 主函数主函数

58、-函数定义函数定义-局部变量定义局部变量定义- 函数体函数体 函数体函数体-3.2.1 3.2.1 编程例子编程例子 程序的第一行是一个程序的第一行是一个“文件包含文件包含”处理。程序中包含处理。程序中包含reg5reg51 1.h.h文件的目的是为了要使用文件的目的是为了要使用P1P1这个符号,即通知这个符号,即通知C51C51编译编译器,程序中所写的器,程序中所写的P1P1是指是指80C580C51 1单片机的单片机的P1P1端口而不是其他变端口而不是其他变量。量。 可根据不同的编程需要选择不同的头文件,一般情况下若可根据不同的编程需要选择不同的头文件,一般情况下若只用简单控制,只需要下面

59、只用简单控制,只需要下面3 3个头文件:个头文件:#include reg5#include .h /* /*寄存器说明头文件寄存器说明头文件*/*/#include #include /* /*输入输入/ /输出说明头文件输出说明头文件*/*/#include #include /* /*部分特殊指令说明头文件部分特殊指令说明头文件*/*/编译预处理部分编译预处理部分3.2.1 3.2.1 编程例子编程例子说明和定义部分说明和定义部分 在在C C语言里,如果直接写语言里,如果直接写P1.0P1.0,C C编译器并不能识编译器并不能识别,而且别,而且P1.0P1.0也不是一个合法的也不是一个合

60、法的C C语言变量名,所以语言变量名,所以需给它另起一个名字,这里使用了需给它另起一个名字,这里使用了Keil CKeil C的关键字的关键字sbitsbit来定义。来定义。 函数是函数是C51C51程序的基本单位,一个程序的基本单位,一个C51C51程序至少程序至少有一个主函数有一个主函数main()main(),也可以由一个主函数,也可以由一个主函数main()main()和若干个其他函数构成。函数由函数说明部分和函和若干个其他函数构成。函数由函数说明部分和函数体两部分构成。数体两部分构成。函数函数3.2.2 C513.2.2 C51的标识符和关键字的标识符和关键字标识符标识符用用来表示组

61、成来表示组成C51C51程序的常量、变量、程序的常量、变量、标识语标识语句、数据类型、存储方式等对象,也就是这些对象的名字。句、数据类型、存储方式等对象,也就是这些对象的名字。 标识符必须符合以下规则:标识符必须符合以下规则:(1 1)标识符只能是字母(标识符只能是字母(A AZ,aZ,az z)、数字)、数字0 09 9和下划和下划线线“”“”组成的字符串组成的字符串。(2 2)标识符号的第一个字母必须是下划线或是英文字母标识符号的第一个字母必须是下划线或是英文字母。(3 3) 标识符大小写敏感标识符大小写敏感,就是大写与小写代表的对象是不,就是大写与小写代表的对象是不同的。同的。(4 4)

62、标识符不能使用)标识符不能使用C51C51的关键字。的关键字。 3.2.2 C513.2.2 C51的标识符和关键字的标识符和关键字关键字关键字是具有固定名称与特定含义的特殊标识符,也称是具有固定名称与特定含义的特殊标识符,也称为保留字,在为保留字,在C C语言中不允许用户自定的标识符与关键字相同。语言中不允许用户自定的标识符与关键字相同。 C C语言中的关键字如下:语言中的关键字如下: atuo break case const atuo break case const等等 C51C51关键字如下:关键字如下: bit sbit sfr sfr16 data bdata idata pdata bit sbit sfr sfr16 data bdata idata pdata 等共等共3232个。个。 3.2.2 C513.2.2 C51的标识符和关键字的标识符和关键字3.2.2 C513.2.2 C51的标识符和关键字的标识符和关键字

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号