实验题目:温度采集控制的设计与实现1指导教师:王军现代电子技术综合实验参考内容:KeilC51摘要实验内容1实验平台介绍2基础知识及工具软件介绍3实验内容和步骤4考核办法及成绩构成5C语言与MCS-51单片机简化具体组织、分配存储器资源和处理端口数据;在C语言编程中,根据单片机存储结构及内部资源定义相应的数据类型和变量。C51包含的数据类型、变量存储模式、输入输出处理、函数等方面与标准的C语言有一定的区别。其它的语法规则、程序结构及程序设计方法等与标准的C语言程序设计相同。KEILC51编译器能够识别的基本数据类型:基本数据类型长度取值范围unsignedchar1字节0~255signedchar1字节-128~+127unsignedint2字节0~65535signedint2字节-32768~+32767unsignedlong4字节0~4294967295signedlong4字节-2147483648~+2147483647float4字节1.175494E-38~3.402823E+38bit1位0或1sbit1位0或1sfr1字节0~255sfr162字节0~65535存储器类型存储器类型是用于指明变量所处的单片机的存储器区域情况。存储器类型与存储种类完全不同。C51编译器能识别的存储器类型有以下几种,见表所示。存储器类型描述data直接寻址的片内RAM低128B,访问速度快bdata片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问idata间接寻址访问的片内RAM,允许访问全部片内RAMpdata用Ri间接访问的片外RAM的低256Bxdata用DPTR间接访问的片外RAM,允许访问全部64k片外RAMcode程序存储器ROM64k空间C51运算符算术运算符有:+加或取正值运算符-减或取负值运算符*乘运算符/除运算符%取余运算符关系运算符:大于小于=大于等于=小于等于==等于!=不等于逻辑运算符:||逻辑或&&逻辑与!逻辑非位运算符有:&按位与|按位或^按位异或~按位取反左移右移C51程序基本结构与相关语句if语句if语句是C51中的一个基本条件选择语句,它通常有三种格式:(1)if(表达式){语句;}(2)if(表达式){语句1;}else{语句2;}(3)if(表达式1){语句1;}elseif(表达式2)(语句2;)elseif(表达式3)(语句3;)……elseif(表达式n-1)(语句n-1;)else{语句n}C51程序基本结构与相关语句switch/case语句if语句通过嵌套可以实现多分支结构,但结构复杂。switch是C51中提供的专门处理多分支结构的多分支选择语句。它的格式如下:switch(表达式){case常量表达式1:{语句1;}break;case常量表达式2:{语句2;}break;……case常量表达式n:{语句n;}break;default:{语句n+1;}C51程序基本结构与相关语句for语句for(表达式1;表达式2;表达式3){语句;}/*循环体*/for语句后面带三个表达式,它的执行过程如下:(1)先求解表达式1的值。(2)求解表达式2的值,如表达式2的值为真,则执行循环休中的语句,然后执行下一步(3)的操作,如表达式2的值为假,则结束for循环,转到最后一步。(3)若表达式2的值为真,则执行完循环体中的语句后,求解表达式3,然后转到第四步。(4)转到(2)继续执行。(5)退出for循环,执行下面的一条语句。C51函数的使用函数定义的一般格式如下:函数类型函数名(形式参数表)[reentrant][interruptm][usingn]形式参数说明{局部变量定义函数体}前面部件称为函数的首部,后面称为函数的尾部,格式说明:1.函数类型函数类型说明了函数返回值的类型。2.函数名函数名是用户为自定义函数取的名字以便调用函数时使用。3.形式参数表形式参数表用于列录在主调函数与被调用函数之间进行数据传递的形式参数。C51函数的使用interruptm是C51函数中非常重要的一个修饰符,这是因为中断函数必须通过它进行修饰。在C51程序设计中,当函数定义时用了interruptm修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51系统中断的处理方式自动把它安排在程序存储器中的相应位置。在该修饰符中,m的取值为0~31,对应的中断情况如下:0——外部中断01——定时/计数器T02——外部中断13——定时/计数器T14——串行口中断5——定时/计数器T2其它值预留。C51函数的使用编写MCS-51中断函数注意如下:(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。C51函数的使用一.函数的调用函数调用的一般形式如下:函数名(实参列表);对于有参数的函数调用,若实参列表包含多个实参,则各个实参之间用逗号隔开。按照函数调用在主调函数中出现的位置,函数调用方式有以下三种:(1)函数语句。把被调用函数作为主调用函数的一个语句。(2)函数表达式。函数被放在一个表达式中,以一个运算对象的方式出现。这时的被调用函数要求带有返回语句,以返回一个明确的数值参加表达式的运算。(3)函数参数。被调用函数作为另一个函数的参数。C51函数的使用二.自定义函数的声明在C51中,函数原型一般形式如下:[extern]函数类型函数名(形式参数表);函数的声明是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便调用函数时系统进行对照检查。函数的声明后面要加分号。如果声明的函数在文件内部,则声明时不用extern,如果声明的函数不在文件内部,而在另一个文件中,声明时须带extern,指明使用的函数在另一个文件中。15