1、7.1 单片机编程语言介绍 7.2 C51的程序结构7.3 C51的数据与运算7.4 单片机的C语言程序设计7.5 汇编语言和C语言的混合编程 小结,第7章 单片机的C语言程序设计,7.1 单片机编程语言介绍,PL/M是Intel从8080微处理器开始为其系列产品开发的编程语言,是一种结构化语言,但它使用关键字去定义结构。但对51系列,PL/M不支持复杂的算术运算、浮点变量,而且无丰富的库函数支持。,对于51系列单片机,现在有4种语言支持,即汇编、PL/M、C和Basic。,Basic通常附在PC上,是初学编程的第一种语言,用于要求编程简单而对编程效率和运行速度要求不高的场合。8052单片机片
2、内就固化了Basic语言解释器。,C语言是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生压缩代码。C语言程序设计是单片机开发、应用的重要趋势之一。,与汇编相比,C语言有以下优点:对单片机的指令系统不要求了解,仅要求对51的存储器结构有初步了解,寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理。既有多种高级语言的特点,又具备汇编语言的功能;有丰富的库函数,运算速度快、编译效率高、可移植性好,而且可以实现对系统硬件的直接控制;提供的库包含许多标准子程序,具有较强的数据处理能力,将已编好的程序可容易地植入新程序,因为它具有方便的模块化编程技术,支持广泛采用的由顶向下结构化程
3、序设计,为软件开发中采用模块化设计方法提供了有效支持;可以大大缩短目标系统软件的开发周期,软件的可读性明显增加,便于改进、扩充,研制规模更大、性能更完备的系统。,C51程序的基本单位是函数。函数由函数说明和函数体两部分组成。一个C源程序至少包含一个主函数,也可以是一个主函数和若干其他函数。主函数是程序的入口;主函数中的所有语句执行完毕,则程序结束。,7.2 C51的程序结构,C51程序的一般格式如下: 类型 函数名(参数表) 参数说明; 数据说明部分;执行语句部分; ,在程序中,函数有3种形态:函数定义、函数调用和函数说明。,函数定义相当于汇编中的一般子程序。函数调用相当于调用了程序的CALL
4、语句,要求有函数名和实参数表。函数说明是一个没有函数体的函数定义。,C51中函数分为两大类:库函数和用户定义函数。 库函数是C51在库文件中已定义的函数,其函数说明在相关的头文件中。用户函数是用户自己定义、自己调用的一类函数。,7.3 C51的数据与运算,7.3.1 数据类型,7.3.2 数据的存储,1、存储类型与存储空间,2、存储模式,例7.2 片内RAM的20H单元存放着一个005H的数,用查表法,求出该数的平方值放入内部RAM的21H单元。,7.4 单片机的C语言程序设计,7.4.1 顺序结构程序的设,C语言的循环语句有以下几种形式: (1) while(表达式)语句; 其中,“表达式”
5、为循环条件,“语句”为循环体。当表达式值为真时,重复执行“语句”。适用于等待中断或查询。 (2) do语句; while(表达式) “表达式”为真时执行循环体“语句”,直至“表达式”为假则退出循环。 (3) for(表达式1;表达式2;表达式3;)语句; 执行“表达式1”后进入循环体,如“表达式2”为真,按“表达式3”修改变量,再执行循环体,直到“表达式2”为假。,7.4.2 循环结构程序的设计,例7.3 编程完成求0+1+2+3+4+5+6+7+8+9+10的和。,C语言的分支选择语句有以下几种形式: (1) if(表达式)语句; “表达式”为真则执行“语句”,否则执行下一条语句。 (2)
6、if(表达式)语句1;else语句2; “表达式”为真则执行“语句1”,否则执行“语句2”,再执行下一条语句。 (3) switch(表达式) case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; case 常量表达式n:语句n; break; default:(语句n+1;),7.4.3 分支结构程序的设计,例7.4 片内RAM的20H单元存放一个有符号数x,函数y与x有以下关系式:试编制程序实现。,混合编程通常是用高级语言C编写主程序,用汇编语言编写硬件有关的程序。,7.5 汇编语言和C语言的混合编程,1、混合编程的方法,传递参数可使用寄存器,或采
7、用固定存储器位置,或使用堆栈。CPU寄存器中最多传递3个函数,参数传递的寄存器选择如表7.6所示。,2、参数传递,3、 编程举例,例7.6 在汇编程序中比较两数大小,将大数放到指定的存储区,由C程序的主调函数取出。,小 结,如何编写高效的C语言程序,通常应注意以下问题。 (1) 定位变量。经常访问的数据对象放入在片内数据RAM中,可在任何一种模式下用输入存储器类型的方法实现。访问片内RAM要比访问片外RAM快得多。 (2) 尽可能使用最小数据类型。MCS-51系列单片机是8位机,因此对具有char类型的对象的操作比具有int或long类型的对象方便得多。建议编程者只要能满足要求,应尽量使用最小数据类型。 (3) 只要有可能,最好使用unsigned数据类型。 (4) 只要有可能,最好使用局部函数变量。,