教学课件PPT单片机C51语言程序设计基础.ppt
《教学课件PPT单片机C51语言程序设计基础.ppt》由会员分享,可在线阅读,更多相关《教学课件PPT单片机C51语言程序设计基础.ppt(57页珍藏版)》请在三一办公上搜索。
1、第10章 单片机C51语言程序设计基础,学习目标,掌握C51程序设计的基本方法及特点制,掌握C语言在单片机开发中程序的语法规则,了解C语言在单片机开发中程序的结构特点,学习重点,C语言在单片机应用系统中程序设计实例的分析和讨论,“C51”程序设计的特点,C语言程序设计的基本方法,主要内容,任务1:学习C51程序的结构,10 单片机C51语言程序设计基础,任务2:C51数据类型、常量和变量的定义,任务3:C51程序的运算符及其语法规则,任务4:掌握C51程序设计特点,任务5:理解C51程序设计举例,10.1 C51程序的结构,C51与标准c的区别,c51在语法规则、程序结构及程序设计方法等与标准
2、的C语言程序设计相同。主要区别在于:(1)C51语言编写单片机应用程序时,需根据单片机存储结构及内部资源定义相 应的数据类型和变量,而标准的C语言程序不需要考虑这些问题。(2)C51中变量的存储模式是与MCS-51单片机的存储器紧密相关;(3)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对MCS-51单片机特有的数据类型;(4)C51与标准C的输入输出处理不一样,C51中的输入输出是通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。,10.1 C51程序的结构,
3、10.1.1 C51程序的结构特点,C51语言与标准C语言的不同之处在于,C51语言根据单片机存储结构及内部资源定义了相应的C语言中的数据类型和变量,C51程序结构与一般C语言没有什么差别。一个C51程序大体上是一个函数定义的集合,在这个集合中有且仅有一个名为main()函数(主函数)。主函数是程序的入口,主函数中的所有语句执行完毕,则程序执行结束。在C51中,函数定义由类型、函数名、参数表和函数体四部分组合而成函数名是一个标识符,标识符是大小写可区别的,最长为255个字符。参数表是用圆括号括起来的若干参数,项与项之间用逗号隔开。函数体是用大括号括起来的若干C语句,语句与语句之间用分号隔开,最
4、后一个语句一般是return(在主函数中可以省略)。每一个函数都返回一个值,该值由return语句中的表达式指定(省略时为零)。函数的类型就是返回值的类型,函数类型(除整型外)均需在函数名前加以指定。,2.1 C51程序的结构,以87C51单片机最小系统的P1.0口控制一个LED发光管的亮和灭为例来介绍C51程序的一般格式。图10-1为其控制电路图。,图10-1 87C51 P1.0口控制LED灯电路图,10.1 C51程序的结构,#include/包括一个51标准内核的头文件sbit P10=P10;/头文件中没有定义的I/O口就要自己来定义void main()/主程序 unsigned
5、int n;do for(n=0;n20000;n+);/延时 P10=0;/设P1.0口为低电平,点亮LED for(n=0;n20000;n+);/延时 P10=1;/设P1.0口为高电平,熄灭LED while(1);/程序循环,对应的C51控制程序如下:,C51函数的一般格式如下:函数类型 函数名(函数形式参数表/函数说明部分 数据说明部分;/函数体部分 执行语句部分;其中加 时,表示其中的内容可以省略。一个函数在程序中可以以三种形态出现。函数定义、函数调用和函数说明。函数定义相当于汇编中的一般子程序。函数调用相当于汇编中调用子程序的CALL语句,在C语言中,更普遍地规定函数调用可以出
6、现在表达式中。函数定义和函数调用不分先后,但若调用在定义之前,那么在调用前必须先进行函数说明。函数说明是一个没有函数体的函数定义,而函数调用则要求有函数名和实参数表。C51中函数分为两大类。一类是库函数,一类是用户定义的函数。库函数是C51在库文件中已定义的函数,其函数说明在相关的头文件中。对于这类函数,用户在编程时只要用include预处理指令将头文件包含在用户文件中,直接调用即可。用户函数是用户自己定义、自己调用的一类函数。从某种意义上来看,C编程实际上是对一系列用户函数的定义。,10.1 C51程序的结构,10.1.2 C51函数的一般格式,10.2 C51数据类型、常量和变量的定义,1
7、0.2.1 C51数据类型,用C51编写程序,虽不像用汇编语言那样具体地组织、分配存储器资源和处理端口数据,但对数据类型与变量的定义必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。每写一个程序,总离不开数据的应用,在学习C51语言的过程中掌握理解数据类型也是很关键的。,C51的数据类型分为基本数据类型和组合数据类型,情况与标准C中的数据类型基本相同,float型与double型相同,另外,C51中还有专门针对于MCS-51单片机的特殊功能寄存器型和位类型。,表10-1 Keil uVision2 C51 编译器所支持的数据类型,常量是指在程序执行过程中其值不能改变的量。在C51中
8、支持整型常量、浮点型常量、字符型常量和字符串型常量。,整型常量也就是整型常数,根据其值范围在计算机中分配不同的字节数来存放。在C51中它可以表示成以下几种形式:十进制整数。如234、-56、0等。十六进制整数。以0 x开头表示,如0 x12表示十六进制数12H。长整数。在C51中当一个整数的值达到长整型的范围,则该数按长整型存放,在存储器中占四个字节,另外,如一个整数后面加一个字母L,这个数在存储器中也按长整型存放。如123L在存储器中占四个字节。,10.2 C51数据类型、常量和变量的定义,10.2.2常量的定义,浮点型常量也就是实型常数。有十进制表示形式和指数表示形式。十进制表示形式,由数
9、字和小数点组成。如 0.123、34.645等都是十进制数表示形式的浮点型常量,整数或小数部分为 0,能省略但必须有小数点。指数表示形式为:数字.数字 e 数字 例如:123.456e-3、-3.123e2等都是指数形式的浮点型常量,中的内容为可选项,其中内容根据具体情 况可有可无,但其余部分必须有。,字符型常量是用单引号引起的字符,如a、1、F等。可以是可显示的ASCII字符,也可以是不可显示的控制字符。对不可显示的控制字符须在前面加上反斜杠“”组成转义字符。利用它可以完成一些特殊功能和输出时的格式控制。,10.2 C51数据类型、常量和变量的定义,字符串型常量由双引号内的字符组成,如tes
10、t,OK等。当引号内没有字符时,为空字符串。在使用特殊字符时同样要使用转义字符如双引号。在C中字符串常量是做为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上0 转义字符以作为该字符串的结束符。字符串常量A和字符常量A是不同的,前者在存储时多占用一个字节的空间。,它的值是一个二进制数。,10.2 C51数据类型、常量和变量的定义,常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有几种,下面加以说明。#difine False 0 x0;/用预定义语句可以定义常量#difine True 0 x1;/这里定义False为0,True为1在程序中用到/False 编译时
11、自动用0替换,同理True替换为1unsigned int code a=100;/这一句用code把a定义在程序存储器中并赋值const unsigned int c=100;/用const定义c为无符号int 常量并赋值 以上代码中常量的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的,所以如果在这两句后面用了类似a=110,a+这样的赋值语句,编译时将会出错。,10.2 C51数据类型、常量和变量的定义,10.2 C51数据类型、常量和变量的定义,10.2.3 变量的定义,变量是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数
12、据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。在C51中规定变量名可以由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。定义一个变量的格式如下:存储种类 数据类型 存储器类型 变量名表在定义格式中除了数据类型和变量名表是必要的,其他都是可选项。存储种类有四种:自动(Auto);作用范围:在定义它的函数内或复合语句内部。当定义它的函数 或复合语句执行时,C51才为变量分配存储空间,结束时所占用的存储空间释放。外部(Externad);用extern声明的变量为外部变量,是在其它文件定义过的全局变量。用extern声明后,便可以在所声明的文件中使用。静态(Static
13、);在函数内可以任意使用和修改,函数运行结束后会一直存在,但在函数外不可见,即在函数体外得到保护,不能被访问。寄存器(Register)。用register定义的变量为寄存器变量,告诉编译器他所定义的变量使用率较高。寄存器变量存放在CPU的寄存器中,这种变量处理速度快,但数目少。缺省类型为自动(Auto)。,而这里的数据类型则是和前面学习到的各种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表10-2列出了Keil uVision 2所能识别的存储器类型。注意:在87C
14、51芯片中RAM只有低128位,位于80H到FFH的高128 位则在52芯片中才有用,并和特殊寄存器地址重叠。,表10-2 Keil C51能识别的存储器类型,10.2 C51数据类型、常量和变量的定义,10.2 C51数据类型、常量和变量的定义,10.2.4 C51定义SFR字节和位单元,1.对特殊功能寄存器SFR的定义,sfr和sfr16可以直接对51单片机的特殊功能寄存器SFR进行定义,定义方法如下:sfr特殊功能寄存器名=功能寄存器地址常数;sfr用于定义8位的特殊功能寄存器。sfr关键字后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如P1口可以用P
15、1为名,这样便于程序读写。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80HFFH)。例如:sfr P1=0 x90;/定义P1 I/O口,其口地址为90H sfr16特殊功能寄存器名=殊功能寄存器地址常数;sfr16是用来定义16位特殊功能寄存器。例如:sfr16 T2=0 xCC;/这里定义8052定时器T2,地址为/T2L=CCH,T2H=CDH用sfr16 定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。,2.对位地址单元的定义,sbit 定义可位寻址对象。如访问特殊功能寄存器中的某位。如要访问P1
16、口中的第2个引脚P1.1。定义方法有三种:第一种方法:sbit 位变量名位地址。例如:sbit P11=0 x91;这种方法是把位的绝对地址赋给位变量。同sfr一样sbit的位地址必须位于80HFFH之间第二种方法:sbit 位变量名特殊功能寄存器名位位置。例如:sfr P1=0 x90;sbit P11=P11;/先定义一个特殊功能寄存器名再指定位变量名所在的位置 当可寻址位位于特殊功能寄存器中时可采用这种方法。第三种方法:sbit 位变量名字节地址位位置例如:sbit P11=0 x90 1;第三种种方法其实和第二种是一样的,只是把特殊功能寄存器的地址直接用常数表示。通常这些可以直接使用,
17、系统提供的预处理文件里面已定义好各特殊功能寄存器的简单名字,直接引用可以省去一点时间,没有定义的可以自己定义。在C51存储器类型中提供有一个bdata的存储器类型,这个是指可位寻址的数据存储器,位于单片机的可位寻址区中,可以将要求可位寻址的数据定义为bdata,例如:unsigned char bdata ib;/在可位寻址区定义unsigned char类型的变量ib,10.2 C51数据类型、常量和变量的定义,10.3 C51程序的运算符、表达式及其语法规则,10.3.1 C51算术运算符及其表达式,赋值运算符“=”,在C51中,它的功能是将一个数据的值赋给一个变量,如x=10。利用赋值运
18、算符将一个变量与一个表达式连接起来的式子称为赋值表达式,在赋值表达式的后面加一个分号“;”就构成了赋值语句,一个赋值语句的格式如下:变量=表达式;执行时先计算出右边表达式的值,然后赋给左边的变量。例如:x=8+9;/*将8+9的值赋绐变量x*/x=y=5;/*将常数5同时赋给变量x和y*/在C51中,允许在一个语句中同时给多个变量赋值,赋值顺序自右向左。,1.运算符,(1)赋值运算符,(2)算术运算符,C51中支持的算术运算符有:+加或取正值运算符-减或取负值运算符*乘运算符/除运算符%取余运算符(定时器赋初值)(1)加、减、乘运算相对比较简单,而对于除运算,如相除的两个数为浮点数,则运算的结
19、果也为浮点数,如相除的两个数为整数,则运算的结果也为整数,即为整除。如25.0/20.0结果为1.25,而25/20结果为1。(2)对于取余运算,则要求参加运算的两个数必须为整数,运算结果为它们的余数。例如:x=5%3,结果x的值为2。,(3)算术运算符,算术表达式用算术运算符和括号将运算对象连接起来的式子称为算术表达式,其中的运算对象包括常量、变量、函数、数组、结构等等。例如:a+b;a+b*cd;a*(b+c)-(d-e)f;a+bc-2.5+b:,10.3 C51程序的运算符、表达式及其语法规则,(4)算术运算符的优先级和结合性,优先级:指当运算对象两侧都有运算符时,执行运算的先后次序。
20、按运算符优先级别的高低顺序执行运算。结合性:指一个运算对象两侧的运算符优先级别相同时的运算顺序。算术运算符的优先级规定为:先乘除模,后加减,括号优先。即在算术运算符中,乘、除、模运算符的优先级相同,并高于加减运算符。在表达式中若出现括号,则括号中的内容优先级最高。例如:a+b/c;这个表达式中除号的优先级高于加号,故先运算b/c所得的结果再与a相加。例如:(a+b)*(c-d)-e;在这个表达式中括号的优先级最高,*次之,减号优先级最低,故先运算(a+b)和(c-d),然后再将两者的结果相乘,最后再与e相减。算术运算符的结合性规定为自左至右方向,又称为“左结合性”。即当一个运算对象两侧的算术运
21、算符优先级别相同时,运算对象先与左面的运算符结合。例如:a+b+c;b两边是“+”、“-”,运算符优先级别相同,故按左结合性先执行a+b再与c相减。,10.3 C51程序的运算符、表达式及其语法规则,10.3 C51程序的运算符、表达式及其语法规则,10.3.2 C51关系运算符、表达式及优先级,1.关系运算符,C51中有6种关系运算符:大于=大于等于3,结果为真(1),而10=100,结果为假(0)。注意:关系运算符等于“=”是由两个“=”组成。,10.3 C51程序的运算符、表达式及其语法规则,2.关系运算符的优先级,图10-4 各种运算符优先级规则图,前四种关系运算符(,=)优先级相同,
22、后两种也相同;前四种优先级高于后两种。关系运算符的优先级低于算术运算符。关系运算符的优先级高于赋值运算符。各种运算符的优先级规则如图10-4所示。【例10.1】c a+b 等效于c(a+b)a b!=c 等效于(ab)!=ca=bc 等效于a=(bc)关系运算符的结合性为左结合。关系表达式:用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式及字符表达式等)连接起来的式子,称为关系表达式。关系表达式的结果:由于关系运算符总是二目运算符,它作用在运算对象上产生的结果为一个逻辑值(即真或假)。C语言以“1”代表真,以“0”代表假。,10.3 C51程序的运算符、表达式及其语法规则,10.3
23、.3 C51逻辑运算符、表达式及优先级,1.逻辑运算符,&:逻辑与(AND);:逻辑或(OR);!:逻辑非(NOT)。“&”和“”是双目运算符,要求有两个运算对象;而“!”是单目运算符,只要求一个运算对象。C51逻辑运算符与算术运算符、关系运算符、赋值运算符之间的关系:其中“!”运算符优先级最高,算术运算符次之,关系运算符再次之,之后是&和,赋值运算符最低。,2.逻辑表达式,用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。逻辑表达式的值应该是一个逻辑量“真”或“假”。逻辑表达式的结合性为自左向右。逻辑表达式的值与关系表达式的值相同,以0代表假,以1代表真。,10.3 C51程序的
24、运算符、表达式及其语法规则,【例10.2】若a=4,b=5,则:因为a=4为真,所以!a为假(0)。因为a、b为真,两者相或也为真。a&b为真(1)。!a&b为假(0)。因为!优先级高于&,故先执行!a,值为假(0),而0&b为0,故结果为假(0)。通过上面的例子可以看出,系统给出的逻辑运算结果不是0就是1,不可能是其他值。这与后面讲到的位逻辑运算是截然不同的,应该注意区别逻辑运算与位逻辑运算这两个不同的概念。在由多个逻辑运算符构成的逻辑表达式中,并不是所有逻辑运算符都被执行,只是在必须执行下一个逻辑运算符后才能求出表达式的值时,才执行该运算符。由于逻辑运算符的结合性为自左向右,所以对于&(逻
25、辑与)运算符来说,只有左边的值不为假(0)才继续执行右边的运算。对于(逻辑或)运算符来说只有左边的值为假才继续进行右边的运算。【例10.3】若a=1,b=2,c=3,d=4;m,n原值为1,则求表达式(m=a b)&(n=c d)由于a b为假(0),即m=0,故无须再执行右边的&(n=cd)运算,即可确定表达式值为假(0);而表达式(m=a b)(n=c d)由于a d为假(0),即m=0,故需继续向右执行,又由于c d为假(0),即n=0,两者相或()结果为0,故表达式值为0。,10.3 C51程序的运算符、表达式及其语法规则,10.3.4 C51位操作及其表达式,1.位操作运算符,&:按
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学 课件 PPT 单片机 C51 语言程序设计 基础
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-2932465.html