您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第3章 单片机C51程序设计
第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum3.1单片机C语言程序设计概述1、常用开发语言比较汇编语言:代码执行效率高;占用存储空间少;可读性差,调试、维护困难;可移植性差。C语言:可读性强;编程及调试效率高;函数结构的程序,结构规范易于移植;库函数包含许多标准子程序,可直接调用,开发周期缩短;寄存器的分配、存储器的寻址以及数据类型等细节可由编译器来管理。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum2、KEILC51开发环境简介Keilsoftware公司提供的KeilC集成开发环境是目前较为流行的单片机开发平台;软件集编辑、编译、汇编、连接、仿真和调试等功能于一体,可覆盖整个程序开发过程。软件可支持多种公司开发的仿真器等硬件开发平台,支持纯模拟仿真和软硬件联机仿真。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum菜单栏、工具栏工程窗口编辑窗口输出窗口(1)软件安装和启动主界面主要包括菜单栏、工具栏、工程窗口、编辑窗口和输出窗口,第一次启动时,窗口显示为空白。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(2)新建工程点击“Project→NewProject…”菜单,在弹出对话窗口中选择工程保存的路径,输入工程名称,如图3-2所示为新建工程对话框。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum点击“保存”后,弹出如图3-3所示的CPU选择对话框,进行CPU型号选择。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum在“Target1”前面的“+”,找到下一层“SourceGroup1”,单击鼠标右键选择“AddfiletoGroup‘SourceGroup1’”,为工程添加相关文件。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(3)工程设置通过“Project→OptionsforTarget‘Target1’”菜单,对工程进行设置。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(4)编译连接工程的编译和连接可以通过如图所示为编译连接工具栏和系统菜单实现。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum3.2C51程序设计基础1、C51中的数据类型(1)字符型char数据长度一个字节,定义字符数据的变量或常量。无符号字符类型unsignedchar:数值范围是0~255。有符号字符类型signedchar:最高位表示符号,负数用补码表示,数值范围是-128~+127,第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(2)整型(int)int类型数据长度两个字节,通常用于定义处理双字节的变量或常量:无符号整型unsignedint:用两字节中所有的位来表示数值,表达的数值范围是0~65535。有符号整型signedint:字节中最高位表示数据的符号,负数用补码表示,表示的数值范围是-32768~+32767,该类型为默认类型。(3)长整型(long)该类型数据长度4个字节,其他合整型数据类似。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(4)浮点型(float)float类型数据长度是四个字节,通常用于定义需要进行复杂的数学计算的变量或常量。浮点类型带有小数位。(5)指针型(*)指针本身是一个变量,其内容为数据在存储器中的存储地址。C51中,指针长度一般为1~3个字节。(6)位类型(bit)bit类型是C51的扩展类型,可定义位变量,取值是1个二进制位,不是“1”就是“0”。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(7)特殊功能寄存器(sfr)sfr类型是C51的扩展类型,占用1个内存单元,值域为0~255。使用它能访问51单片机内部的所有特殊功能寄存器。例如:sfrP0=0x80;//定义P0口,端口地址为80HP0=0xff;//P0口输出逻辑“1”(8)16位特殊功能寄存器(sfr16)sfr16类型是C51的扩展类型,用于描述16位的特殊功能寄存器。例如:sfr16DPTR=0x82;//定义DPTR地址为82HDPTR=0x1234;//给DPTR赋值第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(9)特殊功能位(sbit)sbit类型是C51的扩展类型,占用1个二进制位,值为“0”或“1”,使用sbit能声明可位寻址的特殊功能寄存器中的位,注意不要和bit功能混淆。如:sbitP0_0=0x80;//定义P0.0的位地址为80H以上为C51中最常用的基本数据类型,除此之外,还有数组结构以及枚举等扩展数据类型,由于篇幅限制,不再一一介绍第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum2、C51中常量和变量(1)常量(不需要改变大小的场合)常用整型、浮点型、字符型、字符串型和位型。常量的定义宏定义(#definePORTA0x7E;不占用任何存储空间)const关键字定义(constbitds=1;RAM中)code关键字定义(codeunsignedcharb=‘b’;ROM中)第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(2)变量变量值会不断变化,必须先用标识符定义变量名,指出数据类型和存储模式,以便分配相应的存储空间。格式[存储种类]数据类型[存储器类型]变量名四种存储种类:缺省为自动自动(auto)外部(extern)静态(static)寄存器(register)。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum六种存储器类型:第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum定义数据存储类型的一般原则:尽量选择内部直接寻址的存储类型data,然后选择内部间接寻址的存储类型idata。对于经常用到的变量要使用内部数据存储器,只有当内部数据存储器不能满足要求的情况下才使用外部数据存储器。选择外部数据存储器可先选择pdata类型,最后选用xdata类型。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum3、C51中的运算符第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum3.3单片机硬件资源的C51访问1、存储器的访问可以利用绝对地址访问头文件“absacc.h”中的函数来对不同的存储区进行访问。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum#includeabsacc.h//包含头文件,不可缺少#definePort1XBYTE[0xffd0]//定义外部I/O口Port1的地址为xdata区的0xffd0#definedram1XBYTE[0x1000]//定义dram1的地址为外部RAM的1000H#definedcode1CBYTE[0x0100]//定义dcode1的地址为code区的0100H#defineram1DBYTE[0x20]//定义ram1的地址为data区的20H地址第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum2、特殊功能寄存器的访问sfr特殊功能寄存器名=特殊功能寄存器地址常数;sfrP0=0x80;//定义P0端口,其地址为80Hsfr16特殊功能寄存器名=特殊功能寄存器地址常数;Sfr16DPTR=0x82;//定义DPTR,低8位地址为82H,高8位83H第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum3、可寻址位的访问(1)sbit位变量名=位地址;sbitP0_1=0x81;(2)sbit位变量名=特殊功能寄存器名^位位置;sfrP0=0x80;sbitP0_1=P0^1;(3)sbit位变量名=字节地址^位位置;sbitP1_1=0x90^1;第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum(4)访问一般位变量(位寻址区)用bit定义位变量要求存储器类型限制为data,bdata或idata;bit定义位变量时,不需要指定地址,编译器会自动的将位地址分配在00H~7FH区域中。4、并行I/O口的访问4个并行口采用定义SFR的方法进行访问。外部I/O接口采用外部RAM方法访问。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum3.4C51和汇编语言混合编程可通过语句“#pragmaasm”和“#pragmaendasm”包含嵌入的汇编语言程序段。例如:#includereg51.hbitled;main(){while(1){led=!led;#pragmaasmnopnop#pragmaendasm}}第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum“GenerateAssemblerSRCFile”和“AssembleSRCFile”分别选中,“LinkPublicOnly”选项取消。第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum3.5知识与拓展1、C51延时时间计算方法外部函数调用方法_nop_();指令直接延时方法for(i=0;i20;i++)嵌套汇编程序方法#pragmaasm…….#pragmaendasm2、C51访问连续外部RAM区域的方法通过关键字来定义不同变量类型指针的方式来访问外部RAM,并进行连续区域的操作。如:unsignedcharxdata*addr1;unsignedchardata*addr2;第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum例:用C51编程实现将外部RAM4000H开始连续的8个单元数据依次存入内部RAM30H开始的单元中。unsignedcharxdata*addr1;unsignedchardata*addr2;unsignedchari,x;addr1=0x2000;addr2=0x30;for(i=0;i8;i++){x=*addr1;;将外部RAM中数据读入*addr2=x;;数据写入内部RAM中addr1++;;指针加1addr2++;;指针加1}第3章单片机C51程序设计ShengliCollegeChinaUniversityofPetroleum
本文标题:第3章 单片机C51程序设计
链接地址:https://www.777doc.com/doc-3201616 .html