您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第3章C51程序设计基础
1第3章C51程序设计基础主要介绍了C51程序设计基础知识,包括C语言的数据类型、运算符、各种语句、数组与函数等知识,使大家具有单片机C语言程序设计的能力。学习目的及要求:内容提要1单片机编程语言简介2单片机程序结构3C51程序分析1.1C语言编程的优势在编程方面,使用C51较汇编语言有诸多优势:1)编程容易2)容易实现复杂的数值计算3)容易阅读与交流4)容易调试与维护程序5)容易实现模块化开发6)程序可移植性好1.单片机编程语言简介1.2C语言与ANSI的区别用汇编语言编写单片机程序时,必须要考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,以及按照实际地址端口数据的处理。用C51编写程序,虽然不像汇编语言那样需要具体地组织、分配存储器资源,但是C51对数据类型和变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。C51单片机软件系统结构Project(可包含若干程序文件)C51(库函数)LIB(库函数)(头文件)KeilC51(μVionsion4)Main(函数)File_1(*.c)Func_k(函数)…….………File_n(*.*)Func_1(函数)Func_n(函数)…….用户编程编译系统2.C51的程序结构组成6KeilC51下的程序结构Project(工程)C51(库函数)LIB(库函数)(头文件)KeilC51main(函数)File_1(*.c)Func1-n(函数)……Func1-1(函数)File_n(*.c)Funcn-n(函数)……Funcn-1(函数)File_1(*.asm)……sub1(子程序)subn(子程序)File_n(*.asm)……sub1(子程序)subn(子程序)…………7预处理命令---------子函数说明------------主函数------------延时子函数------------主函数81.编译预处理部分和声明部分程序的第一行是一个“文件包含”处理。程序中包含reg51.h文件的目的是为了要使用P1这个符号,即通知C51编译器,程序中所写的P1是指80C51单片机的P1端口而不是其他变量。可根据不同的编程需要选择不同的头文件,一般情况下若只用简单控制,只需要下面3个头文件:#includereg51.h/*寄存器说明头文件*/#includestdio.h/*输入/输出说明头文件*/#includeintrins.h/*部分特殊指令说明头文件*/C51程序结构组成9在C语言里,我们采用模块化的程序设计思路,为了每个功能模块我们采用采用一个子函数的形式进行包装,如上面的延时等待程序我们做了一个子函数。2主函数函数是C51程序的基本单位,一个C51程序至少有一个主函数main(),也可以由一个主函数main()和若干个其他函数构成。函数由函数说明部分和函数体两部分构成。3子函数C51程序结构组成标示符+运算符------------------------字+词表达式-----------------------------------短语语句------------------------------------一句话函数--------------------------------------段落文件---------------------------------------文章系统----------------------------------------书C51程序层次分析11*3.1C51程序设计基础知识*3.2C51预处理*3.3C51的函数3.单片机C语言分析123.1C51程序设计基础知识3.1.1C51的标识符和保留字3.1.2C51的数据类型3.1.3C51的常量3.1.4C51的常量3.1.5C51的常用运算符3.1.6C51的基本语句13C51语言与ANSIC的对比C51与标准C语言对比相同之处:语法规则、程序结构、编程方法差异之处:数据类型、存储模式、中断处理本章教学内容:①C51的数据结构②C51编程实践与KeilC使用方法143.1.3C51的标识符和保留字标识符用于标识语句、数据类型、函数、变量、数组、存储方式等对象,也就是这些对象的名字。在C语言中,标识符严格区分大小写。在C51编译器中,支持标识符的前32位为有效标识,如果超长,则超长部分被舍弃。注意:变量名只能由字母、数字、下划线组成,且只能由字母和下划线开头。变量不能是C语言的保留字(或称关键字),即不能使用C语言系统已经有固定含义的单词。15表2-1C语言32个保留字表2-2C51扩展13个保留字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedstaticsizofstructswitchtypedefunionunsignedvoidvolatilewhilebitsbitsfrsfr16databdataxdatacodeinterruptreentranusingidatapdata3.1.3C51的标识符和保留字163.1.4C51的数据类型数据在计算机内存中的存放情况由数据结构决定。C语言的数据结构是由数据类型决定的,C51的数据类型分为基本数据类型和组合数据类型,组合数据类型是由基本数据类型构造而成的。组合数据类型有数组类型、结构体类型、共同体类型、枚举类型、指针类型和空类型。172.1.4C51的数据类型基本数据类型长度取值范围unsignedchar1B0~255signedchar1B-128~+127unsignedint2B0~65535signedint2B-32768~+32767unsignedlong4B0~4294967295signedlong4B-2147483648~+2147483647float4B1.176E-38~3.40E+38(6位数字)*1~3B对象的地址bit1b0或1sbit1b0或1sfr1B0~255sfr162B0~6553518float浮点型:float型数据的长度为4字节,格式符合IEEE—754标准的单精度浮点型数据,包含指数和尾数两部分,最高位为符号位,“1”表示负数,“0”表示正数,其次的8位为阶码,最后的23位为尾数的有效数位,由于尾数的整数部分隐含为“1”,所以尾数的精度为24位。3.1.4C51的数据类型19*指针型:指针变量本身也是一个变量,在这个变量中存放的是指向另一个数据的地址。这个指针变量要占用一定的内存单元,对不同的处理器其长度不一样,在C51中它的长度一般为1~3个字节。3.1.4C51的数据类型20C51扩充数据类型:bit、sfr或sfr16、sbitbit型关键词bit用于定义一个位变量,语法规则:bitbit_name[=0或1];例如:bitdoor=0;//定义一个叫door的位变量且初值为0注意:上述变量的物理地址是由编译器分配的21sfr或sfr16型关键词sfr或sfr16用于定义SFR字节地址变量,语法规则:sfr或sfr16sfr_name=字节地址常数;51MCU中有21个SFR,如何定义与这些单元相关的变量?22例如,sfrP0=0x80;//定义P0口地址80HsfrPCON=0x87;//定义PCON地址87Hsfr16DPTR=0x82;//定义DPTR的低端地址82H注意:SFR字节地址变量的物理地址是由MCU资源决定的23sbit型部分SFR具有位地址,如何定义与这些位地址相关的变量?CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PD0^7D7HD6HD5HD4HD3HD2HD1HD0HD0HPSWD0^6D0^5D0^4D0^3D0^2D0^1D0^0绝对位地址相对位地址字节地址两种位地址表达形式:绝对位地址、相对位地址241)将SFR的绝对位地址定义为位变量名sbitbit_name=位地址常数;例如,sbitCY=0xD7;3)将SFR的相对位位置定义位变量名sbitbit_name=sfr_name^位位置;例如,sbitCY=PSW^7;2)将SFR的相对位地址定义为位变量名sbitbit_name=sfr字节地址^位位置;例如,sbitCY=0xD0^7;关键词sbit用于定义SFR位地址变量,三种定义形式:采用这种方式定义的位地址或字节地址必须在80H~FFH之间。25应用举例:26C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。用一条预处理命令#includeREG51.H把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。27以上所述的数据类型中只有bit与unsignedchar两种数据类型可以直接转换成机器指令。所以C语言中使用的其他数据类型,虽然语句上很简单,但都要C51编译器用一系列机器指令处理这些数据类型。特别是对浮点数,处理起来更加复杂,将明显增加程序的长度与执行时间。因此应该避免使用复杂的数据类型。在编制C51程序时,应该尽可能使用无符号字符变量和位变量。3.1.4C51的数据类型283.1.5C51的常量常量是指在程序执行过程中其值不能改变的量。在C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。整型常量也就是整型常数,根据其值范围在计算机中分配不同的字节数来存放。在C51中它可以表示成以下几种形式:(1)十进制数。如123、-45、0等。(2)十六进制数。以0x开头表示,如0x12、-0x3B等。1.整型常量292.浮点型常量浮点型常量也就是实型常数。有十进制表示形式和指数表示形式。十进制表示形式又称定点表示形式,由数字和小数点组成,如3.14159、0.36。指数表示又称科学记数法,常用于表示较大、较小的实型常量,指数形式为:[]数字[.数字]e[]整数如:6.02×1023,可表示成6.02e+23或6.02e23。-1.6×10-19,可表示成:-1.6e-19。30字符型常量是用单引号括起的字符,如'2'、'A'、'\n'等。可以是可显示的ASCII字符,也可以是不可显示的控制字符。。3.字符型常量314.字符串型常量字符串型常量由一对双引号括起来的零个或多个字符组成,双引号仅起定界作用,本身并不是字符串中的内容。如“0123”、“Hello!”、“Iamastudent.”、“”等。注意:字符串常量与字符常量是不一样的,一个字符常量在计算机内只用一个字节存放,而一个字符串常量在内存中存放时不仅双引号内的每个字符占一个字节,而且系统会自动的在后面加一个转义字符“\0”作为字符串结束符。“\0”代表空操作字符,它不引起任何操作,也不会显示到屏幕上。如字符串student在内存中的存储形式如下:student\0325.符号常量#difineFalse0x0;//用预定义语句可以定义常量#difineTrue0x1;//这里定义False为0,True为1//在程序中用到False编译时自动用0替换,同理True替换为1#difinePI3.1415926;C51允许将程序中的常量定义为一个标示符,称为符号常量。333.1.6变量在程序执行过程中,数值可以发生改变的量称为变量。变量名与存储单元地址相对应,变量值与存储单元的内容相对应。例如在哈佛结构的存储空间中如何建立变量概念?343.1.6变量【存储种类】数据类型【存储类型】变量名(标准C)(标准C)*括号项——可以缺省(但需有缺省值)C51变量定义的四要素:(C51特有)(标准C+C51)35【存储种类】数据类型【存储类型】变量名共有四个说明符:1、auto(自动型)——变量的作用范围在定义它的函数体或语句块内
本文标题:第3章C51程序设计基础
链接地址:https://www.777doc.com/doc-2155531 .html