您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > C语言设计基础Microsoft PowerPoint 演示文稿
C51概述C语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,位操作能力强,适用于各种应用的程序设计。使用C语言进行单片机应用系统开发,具有编程灵活、调试方便、目标代码编译效率高的特点。C语言也是目前使用最广的单片机应用系统编程语言。由C语言编程的单片机应用程序,称为单片机C语言程序。MCS-51系列单片机开发系统的编译软件可以对51单片机C语言源程序进行编译,称为C51编译器。在C51编译软件中可进行51单片机C语言程序的调试。1)扩展了专门访问MCS-51单片机硬件的数据类型;2)存储类型按MCS-51单片机存储空间分类;3)存储模式遵循存储空间选定编译器模式;4)指针分为通用指针和存储器指针;5)函数增加了中断函数和再入函数。C51特点C51编译器针对MCS-51单片机硬件在下列几方面对ANSIC进行了扩展。C51编程具有以下特点。1)可管理内部寄存器和存储器的分配,编程时,无需考虑不同存储器的寻址和数据类型等细节问题;2)程序由若干函数组成,具有良好的模块化结构、可移植性好、便于项目维护管理;3)有丰富的子程序库可直接引用,从而大大减少用户编程工作量,提高编程效率;4)与汇编语言交叉编程。用汇编语言编写与硬件有关的程序,用C51编写与硬件无关的运算程序,充分发挥两种语言的长处,提高开发效率。C51特点C51编程和汇编语言编程过程一样。单片机C语言源程序经过编辑、编译、连接后生成目标程序(.BIN和.HEX)文件,然后运行即可。调试51单片机C语言程序可用KeilC51编译器。注意,使用C51编程可以取代繁琐的汇编语言编程,但仍需要了解MCS-51单片机的硬件结构。所以对于单片机系统的开发应采用汇编语言与C51混合编程的方法更为有效。C51特点C51和汇编程序的比较由汇编程序编制的流水灯程序占用存储器空间为00H~18H由C51编制的流水灯程序占用的存储器空间为00H~48H,是汇编的三倍。标识符用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。标识符由字符串、数字和下划线等组成,应该注意的是第一个字符必须是字母或下划线,不能用数字开头,如“1_a”是错误的,编译时会有错误提示。在C51编译器中,只支持标识符的前32位为有效标识。C51语言是区分大小写的一种高级语言,如“a_1”和“A_1”是两个完全不同的标识符。标识符和关键字C51中有些库函数的标识符是以下划线开头的,所以一般不要以下划线开头命名用户自定义标识符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。关键字则是编程语言保留的特殊标识符,它们具有固定的名称和含义,在程序编写中不允许将关键字另做他用。C51中的关键字除了有ANSIC标准的32个关键字外,还根据MCS-51单片机的特点扩展了相关的关键字。C51关键字如表5-1所示。在C51的文本编辑器中编写C程序,系统可以把保留关键字以不同颜色显示,如int关键字的默认颜色为天蓝色。标识符和关键字标识符和关键字标识符和关键字标识符和关键字C51的数据类型C51具有ANSIC的所有标准数据类型。其基本数据类型包括:char、int、short、long、float和double。对C51编译器来说,short类型和int类型相同,double类型和float类型相同。C51的数据类型C51增加的特殊数据类型指针型指针型本身就是一个变量,在这个变量中存放着指向另一个数据的地址。这个指针变量要占据处理器长度也不尽相同,在C51中它的长度一般为1~3个字节。C51的数据类型sfr特殊功能寄存器利用它可以访问MCS-51单片机内部的所有特殊功能寄存器。如用sfrP1=0x90定义一个特殊功能寄存器变量“P1”,变量P1即指51单片机的P1端口。sbit以访问芯片内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。定义方法有如下三种:(1)sbit位变量名=位地址位地址必须位于80H~FFH之间。(2)sbit位变量名=特殊功能寄存器名^位位置当可寻址位位于特殊功能寄存器中时,可采用这种方法。位位置是一个0~7之间的常数。(3)sbit位变量名=字节地址^位位置sbit可寻址位C51的数据类型sbit和bit的区别:sbit定义特殊功能寄存器中的可寻址位;而bit则定义了一个普通的位变量,一个函数中可包含bit类型的参数,函数返回值也可为bit类型。MCS-51单片机中的特殊功能寄存器及其可寻址位,已被预先定义放在文件reg51.h头文件中,在程序的开头只需加上#includereg51.h或#includereg52.h即可。C51的数据类型结合性:自左至右方向。优先级:先乘除,后加减,先括号内,再括号外。模运算即求余数,如7%3,结果是7除以3所得余数1。自增、自减运算符可以在变量的前面或后面使用。如,++i或--i,意为在使用i之前,先使i值加1或减1。如,i++或i--,意为在使用变量i之后,再使i值加1或减1。C51的算术运算符C51算术运算符有七种C51关系运算符有六种。优先级:前四个高,后两个“==”和“!=”级别低。结合性:自左至右方向。关系表达式的结果是逻辑值“真”或“假”,C51中以“1”代表真,“0”代表假。C51关系运算符C51按位操作运算符有六种。注:移位操作为补零移位。位运算符只能对整形和字符型运算,不能对实型数据运算。如:chara=0x0f;表达式a=~a值为0xf0。如:chara=0x22;表达式a2值为0x88,即a值左移两位,移位后空白位补0。位操作运算符Reg52.h头文件该头文件定义了52内核的单片机内部所有的功能寄存器。右击#includereg52.h在点击Opendocumentreg52.h可以打开头文件:Reg52.h头文件右图是部分头文件的宏定义:例如:“SfrP0=0x80;”语句的含义把单片机内部的80H地址的寄存器重新起名P0。加入头文件有两种方法,用reg52.h和“reg52.h”两种方法有点区别,一般采用。今后凡是编写单片机程序,我们在程序中的第一行就包含头文件。#define宏定义第02句“#defineuintunsignedint”是将uintunsigned重新命名为int。定义int以后,后面的语句只出现int:在12句中“uinti;”Main()主函数的写法格式Voidmain()注意:后面没有分号无返回值,无参数。Void表示“空”,即无返回值。我们只写()就可以了,也可以写voidmain(void)。后面接两个花括号,主程序从这里开始执行。所有的代码都写在这个花括号内,每条语句结束后,都要加上分号“;”。例如:#includereg52.hviodmain(){P1=0xaa;//将10101010送给P0I/O口}注释的写法在C语言中,注释有两种写法:1.//……这种注释只能注释一行。2./*……*/这种注释可以注释多行。格式:for(表达式1;表达式2;表达式3)for循环语句的执行过程如下:1)先求解表达式1。2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3步;若其值为假(0),结束循环。for循环语句3)求解表达式3。4)转回上面第2步继续执行。5)循环结束,执行for语句体后面的一个语句。例:unsignedchari;for(i=2;i0;i--)for(;;)/*无循环条件,无穷循环*/for循环语句不带参数函数的写法与调用如果一些语句不止一次使用,而且这些语句都相同,我们就可以把这样的一些语句写成一个不带参数的子函数。用for设计一个让P1.1口的LED闪亮的程序#include“reg51.h”#defineuintunsignedintsbitp1_1=P1^1;uinti,j;voidmain(){while(1){led1=0;for(i=1000;i0;i--)for(j=110;j0;j--);//点亮LED1sled1=1;for(i=1000;i0;i--)for(j=110;j0;j--);//关闭LED1s}}注意这里没有“;”号编译器将第二个for默认是第一个for的内部语句,i每减1,j将减110。不带参数函数的写法与调用voiddelay(){uinti;for(i=0;i34530;i++);}调用:写法:……while(1){……led1=0;delay();……}在上面的子函数中,如果i=500时,延时500ms,就需要在子函数把i再赋值,使用不方便。采用带参子函数解决了此问题。vioddelayms(unsignedintxms){uniti,j;for(i=xms;i0;i--)//i=xms即延时约xms毫秒for(j=110;j0;j--);}带参数函数的写法带参数函数的调用调用:……while(1){……led1=0;//点亮LEDdelayms(1000);//延时1sled1=1;//关闭LEDdelayms(500);//延时500ms……}用for语句实现例5-16#include“reg51.h”voidmain(){chara;for(;;)/*无循环条件,无穷循环*/{a=P1;/*读P1口的值*/a=a&0x03;/*屏蔽高6位*/switch(a){case0:P1=0x7F;break;case1:P1=0xBF;break;case2:P1=0xDF;break;case3:P1=0xEF;}}}4.break语句break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句。当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环结构后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。
本文标题:C语言设计基础Microsoft PowerPoint 演示文稿
链接地址:https://www.777doc.com/doc-4941444 .html