单片机C51语言设计基础.ppt

上传人:小飞机 文档编号:5937812 上传时间:2023-09-06 格式:PPT 页数:20 大小:297.50KB
返回 下载 相关 举报
单片机C51语言设计基础.ppt_第1页
第1页 / 共20页
单片机C51语言设计基础.ppt_第2页
第2页 / 共20页
单片机C51语言设计基础.ppt_第3页
第3页 / 共20页
单片机C51语言设计基础.ppt_第4页
第4页 / 共20页
单片机C51语言设计基础.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《单片机C51语言设计基础.ppt》由会员分享,可在线阅读,更多相关《单片机C51语言设计基础.ppt(20页珍藏版)》请在三一办公上搜索。

1、单片机C语言设计基础,第5讲,#include/包含特殊功能 寄存器库#include/包含I/O函数库void serial_initial();void main(void)int a,b;serial_initial();scanf(“please input a,b:%d,%d”,预处理命令 include功能子函数1 delay()函数体 功能子函数2 light1()函数体 主函数 main()主 函数体,C语言程序组成结构,C程序组成部分,1.C语言程序是由函数构成的,一个C源程序至少包括一个函数(主函数),一个C源程序有且只有一个名为main()的函数,也可能包含其它函数,函数

2、是C程序的基本单位。2.函数后面一定有一对大括号.”,在大括号里书写程序。C语言程序总是从main主函数开始执行的。而不管物理位置上这个main()放在什么地方。主函数通过直接书写语句和调用其它功能子函数来实现有关功能,这些功能子函数可以是由C语言本身提供给的库函数,也可以是用户自己编写的函数。,3.库函数和用户自定义子函数有什么区别?简单地说,库函数就是针对一些经常使用的算法,经前人开发、归纳、整理形成的通用功能子函数集供大家使用。而自己编写的功能子函数则称用户自定义功能子函数,显然,用户自定义功能子函数是用户根据自己需要而编写的。可以看出,使用C语言开发产品,可以大量使用库函数而减少用户自

3、己编写程序的工作量。这样,产品开发的速度和质量是汇编语言绝对不能相比的。Keil C51内部有数百个库函数可供我们使用。调用Keil C51的库函数时只需包含具有该函数说明的相应的头文件即可。,C是模块化设计语言,C程序结构,C是函数式语言必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用,模块化,函数,函数分类,从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式无参函数有参函数,使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件,函数定义格

4、式,函数类型 函数名(形参类型说明表)语句部分/*说明部分*/,/*函数名称:函数功能:参数说明:输出说明:设计人:设计时间:*/,中断服务程序,函数名()interrupt n using m函数内部实现.,I/O口定义,sbit beep=P23;,对被调用函数的要求,、必须是已存在的函数、库函数:#include、用户自定义函数:函数类型说明,宏定义、文件包含,作用:对源程序编译之前做一些处理,生成扩展C源程序种类宏定义#define文件包含#include条件编译#if-#else-#endif等格式:“#”开头占单独书写行语句尾不加分号,宏定义,不带参数宏定义一般形式:#define

5、 宏名 宏体功能:用指定标识符(宏名)代替字符序列(宏体),宏展开:预编译时,用宏体替换宏名-不作语法检查,宏体可缺省,表示宏名定义过或取消宏体,定义位置:任意(一般在函数外面)作用域:从定义命令到文件结束#undef可终止宏名作用域 格式:#undef 宏名,宏定义可嵌套,不能递归,例#define MAX MAX+10(),引号中的内容与宏名相同也不置换,宏定义中使用必要的括号(),文件包含,功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include,处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译,

6、直接按标准目录搜索“”先在当前目录搜索,再搜索标准目录可指定路径,被包含的文件内容,源文件(*.c)头文件(*.h),宏定义数据结构定义函数说明等,文件包含可嵌套,1、字符处理库 ctype.h2、字符串处理库 cstring.h3、标准函数stdlib.h4、数学函数math.h5、绝对地址访问函数absacc.h6、内部函数intrins.h7、变量参数stdarg.h8、全程跳转setjmp.h9、计算结构体成员的偏移量stddef.h,库文件介绍,头文件:reg51.h,/*BYTERegister*/sfrP0=0 x80;sfrP1=0 x90;sfrP2=0 xA0;sfrP3=

7、0 xB0;sfrPSW=0 xD0;sfrACC=0 xE0;sfrB=0 xF0;sfrSP=0 x81;sfrDPL=0 x82;sfrDPH=0 x83;sfrPCON=0 x87;sfrTCON=0 x88;sfrTMOD=0 x89;sfrTL0=0 x8A;sfrTL1=0 x8B;sfrTH0=0 x8C;sfrTH1=0 x8D;sfrIE=0 xA8;sfrIP=0 xB8;sfrSCON=0 x98;sfrSBUF=0 x99;,/*IE*/sbitEA=0 xAF;sbitES=0 xAC;sbitET1=0 xAB;sbitEX1=0 xAA;sbitET0=0 xA

8、9;sbitEX0=0 xA8;/*IP*/sbitPS=0 xBC;sbitPT1=0 xBB;sbitPX1=0 xBA;sbitPT0=0 xB9;sbitPX0=0 xB8;/*P3*/sbitRD=0 xB7;sbitWR=0 xB6;sbitT1=0 xB5;sbitT0=0 xB4;sbitINT1=0 xB3;sbitINT0=0 xB2;sbitTXD=0 xB1;sbitRXD=0 xB0;,/*SCON*/sbitSM0=0 x9F;sbitSM1=0 x9E;sbitSM2=0 x9D;sbitREN=0 x9C;sbitTB8=0 x9B;sbitRB8=0 x9A;

9、sbitTI=0 x99;sbitRI=0 x98;,/*BITRegister*/*PSW*/sbitCY=0 xD7;sbitAC=0 xD6;sbitF0=0 xD5;sbitRS1=0 xD4;sbitRS0=0 xD3;sbitOV=0 xD2;sbitP=0 xD0;/*TCON*/sbitTF1=0 x8F;sbitTR1=0 x8E;sbitTF0=0 x8D;sbitTR0=0 x8C;sbitIE1=0 x8B;sbitIT1=0 x8A;sbitIE0=0 x89;sbitIT0=0 x88;,新关键词,sfr,sbitKeil为能直接仿问51系列单片机而设的新关键词。使

10、用方法sfr 变量名=地址值sbit 位变量名 地址值 sbit 位变量名 SFR名称变量位地址值 sbit 位变量名 SFR地址值变量位地址值,一个小例子:如定义PSW中的OV可以用以下三种方法:sbitOV=0 xd2(1)说明:0 xd2是OV的位地址值sbitOV=PSW2(2)说明:其中PSW必须先用sfr定义好sbitOV=0 xD02(3)说明:0 xD0就是PSW的地址值,用typedef定义类型,功能:用自定义名字为已有数据类型命名 类型定义简单形式:typedef type name;,例 typedef int INTEGER;,类型定义语句关键字,已有数据类型名,用户定

11、义的类型名,例 typedef float REAL;,类型定义后,与已有类型一样使用,例 INTEGER a,b,c;REAL f1,f2;,说明:1.typedef 没有创造新数据类型2.typedef 是定义类型,不能定义变量3.typedef 与 define 不同,define typedef预编译时处理 编译时处理简单字符置换 为已有类型命名,按定义变量方法先写出定义体 如 int i;将变量名换成新类型名 如 int INTEGER;最前面加typedef 如 typedef int INTEGER;用新类型名定义变量 如 INTEGER i,j;,typedef定义类型步骤,例 定义数组类型 int a100;int ARRAY100;typedef int ARRAY100;ARRAY a,b,c;,例 定义指针类型 char*str;char*STRING;typedef char*STRING;STRING p,s10;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号