您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 80C51单片机的C51程序设计.ppt
学习目的(1)理解C语言程序在结构上的特点和书写格式上的要求。(2)掌握数据类型的概念,了解C51语言能够处理的数据类型。(3)了解C51语言基本运算符及其特点,掌握运算符的优先级和结合性。(4)理解算术表达式、关系表达式、逻辑表达式的特点,能熟练计算表达式。(5)掌握if语句swith语句的语法。掌握for语句、while语句、do-while语句的使用语法及方法,能进行循环程序设计。(6)理解数组的概念,能定义、初始化一维数组、二维数组及字符数组,进行相关程序设计。(7)理解函数的概念,能根据需要定义一个函数,能正确调用一个函数。(8)理解指针的概念。(9)理解80C51内部资源(端口、中断、定时/计数器、串行口)的应用。8.1单片机的C语言8.1.1C51程序开发概述1、采用C51的优点采用C51进行单片机应用系统的程序设计,编译器能自动完成变量的存储单元的分配,编程者可以专注于应用软件的设计,可以对常用的接口芯片编制通用的驱动函数,对常用的功能模块和算法编制相应的函数,可以方便的进行信号处理算法和程序的移植,从而加快单片机应用系统的开发过程。2、C51程序的开发过程C51程序的开发过程如图8-1所示图8-1C51程序开发过程示意图8.1.2C51程序结构C51程序结构同标准C一样,是由若干个函数构成的,每个函数即是完成某个特殊任务的子程序段。组成一个程序的若干个函数可以保存在一个或几个源文件中,最后再将它们连接在一起。C语言程序的扩展名为“.c”,如my_test.c。C语言程序的组成结构如下(主函数可以放在功能子函数说明之后的任意位置):C语言的语句规则:1、每个变量必须先说明后引用,变量名英文大小写是有差别的。2、C语言程序一行可以书写多条语句,但每个语句必须以“;”结尾,一个语句也可以多行书写。3、C语言的注释用/*……*/表示。4、“{”花括号必须成对,位置随意,可在紧挨函数名后,也可另起一行,多个花括号可以同行书写,也可逐行书写,为层次分明,增加可读性,同一层的“{”花括号对齐,采用逐层缩进方式书写。预处理命令include功能子函数1说明……功能子函数n说明功能子函数1fun1(){函数体……}……功能子函数nfun(){函数体……}main(){函数体……}8.2C51的数据类型8.2.1C51的标识符、关键字标识符是一种单词,它用来给变量、函数、符号常量、自定义类型等命名。用标识符给C语言程序中各种对象命名时,要用字母、下划线和数字组成的字符序列,并要求首字符是字母或下划线,不能是数字。字母的大小写是有区别的。关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。见表8-1表8-1ANSIC语言的关键字关键字用途说明auto存储种类说明用以说明局部变量,缺省值为此break程序语句退出最内层循环case程序语句Switch语句中的选择项char数据类型说明单字节整型数或字符型数据const存储种类说明在程序执行过程中不可更改的常量值continue程序语句转向下一次循环default程序语句Switch语句中的失败选择项do程序语句构成do…while循环结构double数据类型说明双精度浮点数else程序语句构成if…else选择结构enum数据类型说明枚举类型extern存储种类说明在其他程序模块中说明了的全局变量float数据类型说明单精度浮点数for程序语句构成for循环结构goto程序语句构成goto转移结构if程序语句构成if…else选择结构int数据类型说明基本整型数long数据类型说明长整型数register存储种类说明使用CPU内部寄存器的变量return程序语句函数返回short数据类型说明短整型数signed数据类型说明有符号数,二进制数据的最高位为符号位sizeof运算符计算表达式或数据类型的字节数static存储种类说明静态变量struct数据类型说明结构类型数据switch程序语句构成Switch选择结构typedef数据类型说明重新进行数据类型定义union数据类型说明联合类型数据unsigned数据类型说明无符号数数据void数据类型说明无类型数据volatile数据类型说明该变量在程序执行中可被隐含地改变while程序语句构成while和do…while循环结构KeilC51编译器除了有ANSIC标准的32个关键字外,还根据51单片机的特点扩展了相应的关键字。在KeilC51开发环境的文本编辑器中编写C程序,系统可以把保留字以不同的颜色显示,缺省颜色为蓝色。表8-2为KeilC51编译器扩展的关键字。表8-2KeilC51编译器扩展关键字关键字用途说明bit位标量声明声明一个位标量或位类型的函数sbit位变量声明声明一个可位寻址变量sfr特殊功能寄存器声明声明一个特殊功能寄存器(8位)sfr16特殊功能寄存器声明声明一个16位的特殊功能寄存器data存储器类型说明直接寻址的8051内部数据存储器bdata存储器类型说明可位寻址的8051内部数据存储器idata存储器类型说明简洁寻址的8051内部数据存储器pdata存储器类型说明“分页”寻址的8051外部数据存储器xdata存储器类型说明8051外部数据存储器code存储器类型说明8051程序存储器interrupt中断函数声明定义一个中断函数reetrant再入函数声明定义一个再入函数using寄存器组定义定义8051的工作寄存器组8.2.2数据与数据类型数据----具有一定格式的数字或数值。数据是计算机的操作对象。不管使用任何语言,任何算法进行程序设计,最终在计算机中运行的只有数据流。数据类型——数据的不同格式叫数据类型。数据结构——数据按一定的数据类型进行排列、组合及架构称为数据结构。程序设计中用到的数据都存储在存储单元中,在汇编语言中我们可以用DB或DW伪指令来定义存放数据的存储单元;在C51中,编译系统要根据定义的数据类型来预留存储单元,这就是定义数据类型的意义。C51提供的数据数据结构是以数据类型的形式出现的,C51的数据类型如表8-3所示。表8-3C51的数据类型数据类型长度(位)取值范围字符型signedchar8-128~127unsignedchar80~255整型signedint16-32768~32767unsignedint160~65535长整型signedlong32-21474883648~21474883647unsignedlong320~4294967295浮点型float32±1.75494E-38~±3.402823E+38位型bit10,1sbit10,1访问SFRsfr80~255sfr16160~655358.2.3C51数据的存储类型C51是面向80C51系列单片机的程序设计语言,应用程序中使用的任何数据(变量和常数)必须以一定的存储类型定位于单片机相应的存储区域中。C51编译器支持的存储类型如表8-4所示。表8-4C51的存储类型与8051存储空间的对应关系存储器类型长度(位)对应单片机存储器bdata1片内RAM,位寻址区,共128位。(也能字节访问)data8片内RAM,直接址区,共128字节。idata8片内RAM,间接址区,共256字节。pdata8片外RAM,分页间址,共256字节(MOVX@Ri)。xdata16片外RAM,间接寻址,共64K字节(MOVX@DPTR)。code16ROM区域,间接寻址,共64K字节(MOVC@DPTR)对于80C51系列单片机来说,访问片内的RAM比访问片外的RAM的速度要快得多,所以对于经常使用的变量应该置于片内RAM,即用bdata、data、idata来定义;对于不常使用的变量或规模较大的变量应该置于片外RAM中,即用pdata、xdata来定义。例如:bitbdatamy_flag;/*item1*/chardatavar0;/*item2*/floatidatax,y,z;/*item3*/unsignedintpdatatemp;/*item4*/unsignedcharxdataarray[3][4];/*item5*/item1:位变量my_flag被定义为bdata存储类型,C51编译器将把该变量定义在8051片内数据存储区(RAM)中的位寻址区(地址:20H~2FH)。item2:字符变量var0被定义为data存储类型,C51编译器将把该变量定位在8051片内数据存储区中(地址:00H~FFH)。item3:浮点变量x、y、z被定义为idata存储类型,C51编译器将把该变量定位在8051片内数据区,并只能用间接寻址的方式进行访问。item4:无符号整型变量temp被定义为pdata存储类型,C51译器将把该变量定位在8051片外数据存储区(片外RAM),并用操作码movx@ri进行访问。item5:无符号字符二维数组unsignedchararray[3][4]被定义为xdata存储类型,C51编译器将其定位在片外数据存储区(片外RAM),并占据3x4=12字节存储空间,用于存放该数组变量。8.2.480C51硬件结构的C51定义C51是适合于80C51单片机的C语言。它对标准C语言(ANSIC)进行扩展,从而具有对80C51单片机硬件结构的良好支持与操作能力。1、特殊功能寄存器的定义80C51单片机内部RAM的80H~FFH区域有21个特殊功能寄存器,为了对它们能够直接访问,C51编译器利用扩充的关键字SFR和SFR16对这些特殊功能寄存器进行定义。SFR的定义方法:sfr特殊功能寄存器名=地址常数例如:sfrP0=0x80;/*定义P0口,地址为0x80*/sfrTMOD=0x89;/*定时/计数器方式控制寄存器地址89H*/注意:关键字sfr后面必须跟一个标识符作为特殊功能寄存器名称,名称可以任意选取,但要符合人们的一般习惯。等号后面必须是常数,不允许有带运算符的表达式,常数的地址范围与具体的单片机型号相对应,通常的80C51单片机为0x80~0xFF。2、特殊功能寄存器中特定位的定义在C51中可以利用关键字sbit定义可独立寻址访问的位变量,如定义80C51单片机SFR中的一些特定位。定义的方法有3种:1)sbit位变量名=特殊功能寄存器名^位的位置(0~7)例如:sfrPSW=0xD0;/*定义PSW寄存器地址为0xd0h*/sbitOV=PSW^2;/*定义OV位为PSW.2,地址为0xd2*/sbitCY=PSW^7;/*定义Cy位为PSW.7,地址为0xd7*/2)sbit位变量名=字节地址^位的位置例如:sbitOV=0xd0^2;/*定义OV位的地址为0xd2*/sbitCF=0xd0^7;/*定义CF位的地址为0xd7*/注意:字节地址作为基地址,必须位于0x80~0xff之间。3)sbit位变量名=位地址例如:sbitOV=0xd2;/*定义OV位的地址为0xd2*/sbitCF=0xd7;/*定义CF位的地址为0xd7*/注意:位地址必须位于0x80~0xFF之间。3、8051并行接口及其C51定义1)对于8051片内I/O口用关键字sfr来定义。例sfrP0=0x80;/*定义P0口,地址为80h*/sfrP1=0x90;/*定义P1口,地址为90h*/2)对于片外扩展I/O口,则根据其硬件译码地址,将其视为片外数据存储器的一个单元,使用define语句进行定义。例:#includeabsacc.h#definePORTAXBYTE[0x78f0];/*将PORTA定义为外部口,地址为78f0,长度为8位*/一旦在头文件或程序中对这些片内外的I/O口进行定义以后,在程序中就可以就可以自由使用这些口了。定义口地址的目的是为了便于C51编译器按8051实际硬件结构建立I/O口变量名与其实际地址的联系,以便使程序员能用软件模拟8051硬件操作。4、位变量(bit)及其定义C51编译器支持bit数据类型:1)位变量的C51定
本文标题:80C51单片机的C51程序设计.ppt
链接地址:https://www.777doc.com/doc-3882873 .html