C51程序的一般结构
- 格式:doc
- 大小:22.00 KB
- 文档页数:1
c51程序的基本结构一、简介c51程序是指在C语言编写的基于8051单片机的程序。
c51程序的基本结构是指程序的框架和组成部分。
在本文中,我们将深入探讨c51程序的基本结构,包括程序的主要组成部分、编译和连接过程、初始化和中断处理等方面。
二、程序的主要组成部分c51程序的主要组成部分包括以下几个部分:1. 头文件包含在c51程序的开头,需要包含一些常用的头文件,以便在程序中使用一些常用的函数和宏定义。
常见的头文件包括reg51.h、intrins.h等。
2. 函数声明在程序的主体之前,需要进行函数的声明。
函数的声明包括函数的返回类型、函数名和参数列表。
通过函数声明,我们可以通过函数名在程序中调用相应的函数。
3. 全局变量定义在程序的主体之前,可以定义一些全局变量。
全局变量可以在程序的任意位置访问,因此非常适合用来存储一些需要在不同函数间共享的数据。
4. 主函数在c51程序中,主函数是程序的入口。
主函数中包含程序的主要执行逻辑。
在主函数中,可以调用其他函数、执行一些初始化操作以及进行一些逻辑判断和循环等操作。
5. 其他函数除了主函数外,c51程序中还可以定义其他函数。
这些函数可以在主函数中调用,也可以在其他函数中调用。
通过将程序的不同功能模块封装成独立的函数,可以提高程序的可读性和易维护性。
三、编译和连接过程c51程序的编译和连接过程主要包括以下几个步骤:1. 预处理在预处理阶段,编译器将对程序进行宏替换和文件包含操作。
通过宏替换,程序中的宏定义将被替换为相应的代码;通过文件包含,程序中包含的头文件将被插入到相应的位置。
2. 编译在编译阶段,编译器将把预处理后的代码转换成汇编语言。
在这个阶段,编译器将对代码进行词法分析和语法分析,生成汇编语言代码。
3. 汇编在汇编阶段,汇编器将把汇编语言代码转换成机器语言代码。
这个阶段主要涉及符号和地址的分配,以及生成可重定位的目标文件。
4. 链接在链接阶段,链接器将把多个目标文件和库文件合并成一个可执行文件。
C51的程序语句1表达式语句在表达式的后面加一个分号“;”,构成表达式语句;一行可以放一个表达式语句,也可放多个表达式语句,每个表达式后面须用“;”分隔;一行还可以仅由一个“;”占一行形成一个表达式语句,即空语句2复合语句由若干条语句组合而成的一种语句,用大括号“{ }”将若干条语句包括在一起就形成了一个复合语句。
复合语句最后不需要以分号“;”结束,但它内部的各条语句仍需以分号“;”结束。
复合语句的一般形式如下:{局部变量定义<程序体>}3顺序、选择和循环结构选择结构可以用if/else, if/else if等语句实现;多分支结构,通过if和else if 语句嵌套实现,也可用switch/case语句实现;循环结构通过while、do while、for、goto等语句实现。
4条件、分支和循环语句4.1 if语句――基本条件选择语句,一般有三种格式4.2 switch/case语句――处理多分支结构的语句4.3 while—循环语句While do语句:先判断,后执行。
While (表达式)[do] {语句;} /*循环体*/先计算表达式的值,为真时,执行循环体内的语句,否则,不执行循环体中的语句,中止循环,执行循环体后的下一条语句。
表达式的值可以在循环体内改变。
Do{语句;} /*循环体*/While (表达式);/*先执行,后判断表达式的值,表达式的值为真,则再执行循环体,然后再判断。
循环体的内容至少执行一次*/4.4 for 语句――循环For 语句是C51中使用最灵活、最频繁的循环控制语句,可以完全代替while语句,功能最强大,格式如下:For (表达式1;表达式2;表达式3){语句;} /*循环体*/4.5 循环的嵌套4.6 break和continue语句4.7 return语句5 C51的函数方法5.1 函数的定义格式函数类型函数名(形式参数表) [reentrant] [interrupt m] [using n] 形式参数说明{ 局部变量定义函数体}函数类型说明了函数的返回值的类型函数名是用户为自定义函数取的名字,以便于调用函数时使用形式参数用于列举在主调函数与被调函数之间进行数据传递的形式参数Reentrant 修饰符Interrupt m修饰符Using n用于指定本函数内部使用的工作寄存器组,其中n的取值为0~3,表示寄存器组号。
第1章C51数据类型与运算1.1C51数据类型C51的数据类型如下所示:C51编译器支持的数据类型、长度和值域如下表1-1所示。
与面向数学运算的计算机相比,51单片机对变量类型或数据类型的选择更具有关键性意义。
如果在程序设计中使用大量而不必要的变量类型,这会导致C编译器调用库函数的数量,以处理大量的变量类型和数据类型。
所以必须特别慎重地进行变量和数据类型的选择。
1.2C51数据存储类型C51编译器还可以通过将变量、常量定义成不同的存储类型(data,bdata,idata,pdata,xdata,code)的方法,将它们定义在不同的存储区中。
存储类型与51单片机实际存储空间的对应关系如表1-2所示。
储区中。
片内RAM是存放临时性传递变量或使用频率较高变量的理想场所。
访问片内数据存储器(data、bdata、idata)比访问片外数据存储器(xdata、pdata)相对快一些,因此可将经常使用的变量置于片内数据存储器,而将规模较大的或不常使用的数据置于片外数据存储器中。
C51存储类型及其大小和值域如表1-3所示。
例如:表1-3 C51存储类型及其大小和值域char data var1; /*字符变量var1被定义为data存储类型,定位在片内RAM中*/bit bdata flags; /*位变量flags被定义为data存储类型,定位在片内RAM中的位寻址区*//*(20H~2FH)*/float idata x,y,z; /*浮点变量x,y,z被定义为idata存储类型,定位在片内RAM中,并只能用间接寻址的方法进行访问*/unsigned int pdata dimension; /*无符号整型变量dimension被定义为pdata存储类型,定位在片外RAM中,并用MOVX @Ri访问*/ unsigned char xdata vector[10][4][4]; /*无符号字符三维数组变量vector[10][4][4]被定义为xdata存储类型,定位在片外RAM中,占据10×4×4=160个字节空间*/如果在变量定义时省略存储类型标志符,编译器会自动默认存储类型。