C51语言概述及编程基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章C51语言概述及编程基础单片机原理与接口技术授课教师:陈雪娇联系电话:18060969025所在学院:机电工程学院本章内容2.1C语言与51单片机编程2.2C51程序2.3C51语言的数据2.4C51语言对单片机主要资源的控制2.5C51语言的基本运算与流程控制语句2.1C语言与51单片机编程2.1.1单片机的C语言的特点①对硬件知识需求低;②能方便地管理内部寄存器的分配、不同存储器的寻址和数据类型等细节问题;③在小应用程序中产生的代码量大,但在较大的程序中代码效率高;④具有良好的模块化结构,便于改进和扩充;⑤具有良好的可读性和可维护性;⑥有丰富的库函数,可以大大减少用户的编程量,大大提高软件开发效率;⑦能在不同类型的机器上运行,可移植性好。2.1C语言与51单片机编程2.1.1单片机的C语言的特点2.1.2单片机的C语言和标准C语言的比较(1)库函数(2)数据类型(3)变量的存储模式(4)输入/输出(5)函数使用2.1C语言与51单片机编程2.1.3单片机的C语言与汇编语言的优势对比(1)编程调试灵活方便(2)生成的代码编译效率高(3)模块化开发(4)可移植性好(5)便于项目的维护2.1C语言与51单片机编程2.2.1C51的程序结构与ANSIC一样,C51的程序是一个函数定义的集合,可以由任意个函数构成,其中必须有一个主函数main()。程序的执行是从主函数main()开始的,调用其他函数后返回主函数main(),最后在主函数中结束整个程序,而不管函数的排列顺序如何。2.2C51程序2.2C51程序2.2.1C51的程序结构预处理命令自定义函数申明main()主函数自定义函数2.2C51程序2.2.1C51的程序结构项目文件头文件“.h”C源文件“.c”库文件“.lib”编译中间文件可烧录文件“.hex”或“.bin”2.2.2C51编程规范及注意事项1.注释(1)用“//”开头来注释一行(2)用“/*”符号开头,并以“*/”符号结束2.命名(顾名思义,不能冲突)3.格式(顺序,“{”“}”对齐)2.2C51程序标识符用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。标识符由字符串、数字和下划线等组成,应该注意的是第一个字符必须是字母或下划线,不能用数字开头,如“1_a”是错误的,编译时会有错误提示。在C51编译器中,只支持标识符的前32位为有效标识。C51语言是区分大小写的一种高级语言,如“a_1”和“A_1”是两个完全不同的标识符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。----标识符2.2.3C51的标识符与关键字关键字则是编程语言保留的特殊标识符,它们具有固定的名称和含义,在程序编写中不允许将关键字另做他用。C51中的关键字除了有ANSIC标准的32个关键字外,还根据MCS-51单片机的特点扩展了相关的关键字。C51关键字如表1-1所示。在C51的文本编辑器中编写C程序,系统可以把保留关键字以不同颜色显示,如int关键字的默认颜色为天蓝色。----关键字2.2.3C51的标识符与关键字2.3C51语言的数据•C51语言是对数据的处理。•2.3.1数据类型•2.3.2常量与变量•2.3.3存储类型2.3.1数据类型2.3C51语言的数据2.3.2变量与常量1、常量(整型、实型、字符型、字符串、符号)(1)整型十进制:6、89、345十六进制:0x12、0X45AB如果是负值:-0x56、-9(2)实型常量15.75、1.574E1、-0.0025、-2.5e-3、25E-42.3C51语言的数据(3)字符型常量•单引号‘a’、‘9’、‘!’•字符时按其对应的ASCII码值来存储的,一个字符占一个字节•注意:‘9’和9是完全不同的(4)字符串常量•双引号“china”、“123456”•“A”和‘A’不同2.3.2变量与常量1、常量(整型、实型、字符型、字符串、符号)2.3C51语言的数据(5)符号常量•#define标识符常量•如:#definePI3.1415926•#defineSTAR‘*’•(#define是预处理命令)2.3.2变量与常量1、常量(整型、实型、字符型、字符串、符号)2.3C51语言的数据•数据类型变量名;常用变量类型:•int或unsignedint•char或unsignedchar•bit例:inti;unsignedcharnum;bitkey;2.3C51语言的数据2.3.2变量与常量2、变量(整型、长整型、实型、字符、位)MCS-51单片机的存储器分为片内数据存储器、特殊功能寄存器、片外数据存储器、片内程序存储器和片外程序存储器。在C51中访问这些存储器时,是通过定义不同存储类型的变量,以说明该变量所访问的存储器位置。2.3C51语言的数据2.3.3存储类型2.4对单片机主要资源的控制•2.4.1特殊功能寄存器的定义•2.4.2绝对地址的访问•2.4.3位变量的定义1.sfr特殊功能寄存器•sfr是一种C51扩充数据类型,8位,值域为0~255。•利用它可以访问MCS-51单片机内部的所有特殊功能寄存器。•语法:sfr名字=特殊寄存器地址;•例子:sfrP1=0x90;/*定义一个特殊功能寄存器变量“P1”,0x90是指51单片机的P1端口地址90H,变量P1即指51单片机的P1端口。*/P1=255;//对P1端口的所有引脚置高电平。2.4.1特殊功能寄存器的定义2.sfr1616位特殊功能寄存器•sfr16也是一种C51扩充数据类型,用于定义存在于MCS-51单片机内部RAM的16位特殊功能寄存器,如定时器T0和T1。•sfr16型数据占用2个内存单元,取值范围为0~65535。•语法:sfr16名字=特殊寄存器地址;•例子:sfr16T2=0xCC;/*定时器2:T2低8位地址=0CCH,高8位地址=0CDH。*/sfr16DPTR=0x82;/*数据指针DPTR:DPTR低8位地址=82H,高8位地址=83H。*/222.4.1特殊功能寄存器的定义3.通过头文件访问SFR•预处理命令#includereg51.h•例子:#includereg51.h//使用的单片机为Intel公司的MCS-51voidmain(void){TL0=0xb0;//访问定时器0,设置时间常数TH0=0x3c;TR0=1;//启动定时器0...}2.4.1特殊功能寄存器的定义4.SFR中位定义242.4.1特殊功能寄存器的定义sbit也是一种C51扩充数据类型,利用它可以访问芯片内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。定义方法有如下三种:(1)sbit位变量名=位地址将位的绝对地址赋给位变量,位地址必须位于80H~FFH(特殊功能寄存器的位地址)之间。例:sbitOV=0xD2;sbitCY=0xD7;4.SFR中位定义252.4.1特殊功能寄存器的定义(2)sbit位变量名=特殊功能寄存器名^位位置当可寻址位位于特殊功能寄存器中时,可采用这种方法。位位置定义了特殊位的位置,是一个0~7之间的常数。例:sfrPSW=0xD0;//定义PSW寄存器地址位=0xD0sbitOV=PSW^2;//定义OV位为PSW.2,地址为0xD24.SFR中位定义262.4.1特殊功能寄存器的定义(3)sbit位变量名=字节地址^位位置这种方法是以一个常数(字节地址)作为基地址,该常数必须在80H~FFH(特殊功能寄存器的字节地址)之间。位位置是一个0~7之间的常数。例:sbitOV=0xD0^2;//定义OV位地址为0xD2SbitCY=0xD0^7;//定义CY位地址为0xD71、变量的C51定义例1:biti1;//将i1定义为位变量例2:bitmy0;//将my0定义为位变量2.4.2位变量的C51定义sbit和bit的区别:sbit定义特殊功能寄存器中的可寻址位;而bit则定义了一个普通的位变量,一个函数中可包含bit类型的参数,函数返回值也可为bit类型。注意:----sbit和bit2.5基本运算与流程控制•2.5.1基本运算•2.5.2结构化程序设计•2.5.3分支判断-if、switch语句•2.5.4循环控制—while、for语句•2.5.5break、continue、return、goto语句包含:算术、关系、逻辑、赋值、位1、算术运算C51算术运算符有七种:+加法运算符或正号-减法运算符或负号*乘法运算符/除法运算符%模(求余)运算符优先级:先乘除,后加减,先括号内,再括号外。结合性:自左至右方向。求余运算符两侧的操作数均为整型数据。2.5.1基本运算1、算术运算C51算术运算符除以上5种外,还有:++自加运算符--自减运算符只能用于变量,不能用于常量和表达式。可以在变量的前面或后面使用,但意义不同。如,++i或--i,意为在使用变量i之前,先使i值加1或减1如,i++或i--,意为在使用变量i之后,再使i值加1或减1例:定义整型变量:inti=6若有j=++i,则j值为7,i值也为7若有j=i++,则j值为6,i值为72.5.1基本运算2、关系运算(比较运算)、=、、=、==、!=结果:成立为1,不成立为0前四种优先级相同,处于高优先级;后两种优先级相同,处于低优先级。关系运算符的优先级低于算术运算符的优先级;而高于赋值运算符的优先级。结合性:自左至右方向2.5.1基本运算3、逻辑运算:•&&(逻辑与)、||(逻辑或)、!(逻辑非)•结果:成立为1,不成立为0优先级:逻辑非“!”最高,高于算术优先级;逻辑或“||”最低,低于关系运算符,但高于赋值运算符。结合性:“&&”和“||”自左至右方向。“!”自右至左方向。运算符的两边为关系表达式。逻辑表达式和关系表达式的值相同,以“0”代表假,以“1”代表真。例:(1020)&&(26)的返回值为0;a=2;!a的返回值为02.5.1基本运算4、赋值运算:2.5.1基本运算=赋值•将“=”右边的值赋给“=”左边的变量(注:不是相等运算符)•优先级最低。•复合赋值运算符:+=、-=、*=、/=、%=、=、=、&=、^=、|=例:a+=b相当于a=a+b。a=b相当于a=ab5、位运算:2.5.1基本运算C51按位操作运算符有六种:&按位与~按位取反|按位或位左移^按位异或位右移注:移位操作为补零移位。位运算符只能对整形和字符型运算,不能对实型数据运算。例:chara=0x0f;表达式a=~a值为0xf0。例:chara=0x22;表达式a2值为0x88,即a值左移两位,移位后空白位补0。例:a=a&0x03;屏蔽掉高6位。2.5.2结构化程序设计C51程序是一种结构化程序,由若干模块组成,每个模块中包含若干个基本结构,而每个基本结构中可以有若干条语句。基本结构有三种:顺序结构选择结构循环结构362.5.3分支判断-if、switch用if语句可以构成选择结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有三种基本形式。1.单分支语句if(条件表达式){语句组;}其语义是:如果条件表达式的值为真,则执行其后的语句组,否则不执行其后的语句组。----单分支结构例:if(xy){max=x;min=y;}2.双分支语句if(条件表达式){语句组1;}else{语句组2;}----双分支结构其语义是:如果条件表达式的值为真,则执行语句组1,否则执行语句组2。2.5.3分支判断-if、switch例:if(xy){max=x;}else{max=y;}3.多分支语句当有多个分支选择时,可采用if-elseif语句结构,其一般形式为:if(条件表达式1)语句组1;elseif(条件表达式2)语句组2;elseif(条件表达式3)语句组3;…elseif(条件表达式n)语句组n;else语句m;----多分支结构其语义是:依次判断条件表达式的值,当出现某个条件表达式的值为真(非

1 / 64
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功