第5章 80C51的C语言程序设计基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章80C51的C语言程序设计基础主要内容:C51程序设计的基本知识C51中的数据类型C51中的常量C51中的变量及其存储模式C51中的中断函数典型设计要求的C语言实现方法由汇编语言到C语言的移植方法及过程教学建议重点介绍:5.4节C51中的变量及其存储模式5.5节中的中断函数一般性介绍:5.1节C51程序设计的基本知识5.2节C51中的数据类型5.3节C51中的常量5.6节典型设计要求的C语言实现方法5.7节由汇编语言到C语言的移植方法及过程教学目的通过本章学习,使学生:理解单片机上的C语言和普通C语言的区别熟悉C51种关于中断函数和变量的存储类型、存储模式的特殊性掌握单片机实际应用过程中,将原来汇编语言写的源程序改写成C的源程序,最后能到自己用C语言独立完成实际任务的程序设计。第5章80C51的C语言程序设计基础单片机设计语言有:机器语言汇编语言高级语言机器语言特点:单片机能直接识别面向机器的硬件不同厂家、不同系列的单片机其指令系统也不同;汇编语言特点:是一种用文字助记符来表示机器指令的符号语言最接近机器码的一种语言优点:•利于初学者掌握微机的硬件资源•占用资源少、程序执行效率高、容易优化•直接操作机器的硬件•指令的执行速度快缺点:•不易移植,可读性不强,不易于维护。高级语言特点:它兼顾了多种高级语言的特点,并具备汇编语言的功能。有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。编译器丰富•典型的是美国Franklin软件公司推出的FranklinC51就是专为MCS-51系列单片机设计的C编译器。第5章80C51的C语言程序设计基础5.1C51程序设计的基础知识FranklinC51编译器是标准的FranklinC语言编译器专门为MCS-51系列的单片机量身定做的一套精简的编译器,这就是通常所说的C51。它为C语言在嵌入式系统上的应用,提供了一种用编程的方法和途径。而这种简化的C语言又完全符合C语言的ANSI标准。5.1.1C51的特点可以直接操作微机硬件程序可读性好,易于维护编程效率高目标代码质量高可移植性好模块化的程序设计在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。开发工具齐全5.1.2C51中的标识符和关键字1标识符标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、常量、数组等等。标识符由字符串,数字和下划线等组成。2关键字关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键字相同。在KEILuVision2中的关键字除了有ANSIC标准的32个关键字外(见表5-1),根据51单片机的特点,又扩展了如表5-2所列举的13个特殊关键字。其实在KEILuVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,缺省颜色为天蓝色。标识符建立和定义的时候,要注意以下四点:标识符的长度最长可以达到255个字符尽量要做到见名思义严格区分大小写第一个字符必须是字母或下划线C51编译器中能识别的扩展关键字关键字用途说明bit位标量声明声明一个位标量或位类型的函数sbit位标量声明声明一个可位寻址变量Sfr特殊功能寄存器声明声明一个8位的特殊功能寄存器Sfr16特殊功能寄存器声明声明一个16位的特殊功能寄存器data存储器类型说明说明一个变量在直接寻址的内部数据存储器bdata存储器类型说明说明一个变量在可位寻址的内部数据存储器idata存储器类型说明间接寻址的内部数据存储器pdata存储器类型说明分页寻址的外部数据存储器xdata存储器类型说明说明一个变量在外部数据存储器code存储器类型说明程序存储器interrupt中断函数说明定义一个中断函数reentrant再入函数说明定义一个再入函数using寄存器组定义定义80C51芯片的工作寄存器5.2C51中的数据类型char字符类型nt整型long长整型float浮点型指针型bit位标量sfr特殊功能寄存器sfr1616位特殊功能寄存器sbit特殊功能位5.2C51中的数据类型数据类型名称长度值域unsignedchar无符号字符单字节0~255signedchar有符号字符单字节-128~+127unsignedint无符号整型双字节0~65535signedint有符号整型双字节-32768~+32767unsignedlong无符号长整型四字节0~4294967295signedlong有符号长整型四字节-2147483648~+2147483647float浮点型四字节±1.175494E-38~±3.402823E+38*一般指针1~3字节对象的地址bit位型位0或1sfr8位特殊功能寄存器单字节0~255sfr1616位特殊功能寄存器双字节0~65535sbit可编程的位位0或15.2.1、char字符类型长度:一个字节功能:定义处理字符数据的变量或常量分类:无符号字符类型unsignedchar有符号字符类型signedchar默认值为signedchar类型注意:当定义一个变量为字符数据类型时,在程序使用该变量不应使它的值超过它的值域不能赋超出0~2555.2.2int整型长度:两个字节功能:存放一个双字节数据分类:符号整型signedint无符号整型unsignedint默认值为signedint类型。5.2.2int整型(续)范围:signedint:-32768~+32767•字节中最高位表示数据的符号,“0”表示正数,“1”表示负数unsignedint:范围是0~65535。注意:如果C51的程序,出现延时或循环体次数的错误,都可能是因为字符型和整型的数据类型运用得不恰当,解决的办法是可以把变量的类型由原来的字符型或整型换成另外一种。关于整型和字符型,可以通过下面的程序继续得以区分:main(){chari;//char和int这里的时间延时是不一样的P1=0X55;while(1){P1=~P1;for(i=0;i1000;i++);}}char类型下面的for语句执行一次循环要3个机器周期int类型则要5个机器周期5.2.3long长整型长度:四个字节功能:存放一个四字节数据分类:有符号长整型signedlong无符号长整型unsignedlong默认值为signedlong类型分为:signedint:-2147483648~+2147483647,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数unsignedlong:0~42949672955.2.4float浮点型长度:四个字节•依次存放数的–符号(占用1位)–阶码(占用8位)–尾码(占用23位)功能:存放一个4字节的数据float浮点数据类型在内存中具体的存放格式如下:字节地址+3+2+1+0浮点数内容格式SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMMS代表数的符号位“1”表示负“0”表示正E代表阶码占用8个位,E大于127,则将结果减127作为2的指数,若小于127,则用127减结果然后作为2的指数;M代表精度为23位的尾数5.2.5指针型长度:一般为1~3个字节特点:指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占据一定的内存单元分类:一般指针(GenericPointer)存储器指针(Memory_SpecificPointer)1一般指针特点:一般指针的声明和使用均与标准C相同,不过同时还可以说明指针的存储类型一般指针本身用3个字节存放,分别存放:•存储器类型•高位偏移•低位偏移量例句:long*state;为一个指向long型整数的指针,而state本身则依存储模式存放。2存储器指针特点:利用存储类型的关键字指定存储类型指针本身只需一个字节或2个字节存放偏移量例如:chardata*str;str指向data区中char型数据intxdata*pow;pow指向外部RAM的int型整数。char*xdataptr;ptr为一个指向char数据的指针,而ptr本身放于外部RAM区。5.2.6bit位标量长度:一个二进制位范围:只有两个结果:不是“0”就是“1”功能:存储一些单片机的中间位处理结果注意:bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。5.2.7sfr特殊功能寄存器长度:一个字节范围:是0~255功能:利用sfr可以访问51单片机内部的所有特殊功能寄存器5.2.7sfr特殊功能寄存器(续)具体格式为:sfr特殊功能寄存器名=特殊功能寄存器地址常数;特点:这种数据类型通常用在C51的头文件中,用来定义特殊功能寄存器,这样在C的源程序中,就可以直接引用这些特殊功能寄存器了。表5-451系列单片机的特殊功能寄存器符号地址注释*ACCE0H累加器*BF0H乘法寄存器*PSWD0H程序状态字SP81H堆栈指针DPL82H数据存储器指针低8位DPH83H数据存储器指针高8位*IEA8H中断允许控制器*IPD8H中断优先控制器*P080H端口0*P190H端口1*P2A0H端口2*P3B0H端口3PCON87H电源控制及波特率选择*SCON98H串行口控制器SBUF99H串行数据缓冲器*TCON88H定时器控制TMOD89H定时器方式选择TL08AH定时器0低8位TL18BH定时器1低8位TH08CH定时器0低8位TH18DH定时器1高8位5.2.8sfr1616位特殊功能寄存器长度:占用两个内存单元范围:是0~65535功能:定义两个字节长度的特殊功能寄存器具体格式为:sfr16特殊功能寄存器名=特殊功能寄存器地址常数;5.2.9sbit特殊功能位长度:一个二进制位功能:访问芯片内部RAM中可寻址的空定义单片机某些I/O引脚,以完成对单片机的I/O控制例句:sbitkey=P1^0;if(key)……便可对P1端口的P1.1引脚进行直接操作5.3C51中的常量定义:常量是在程序执行过程中其值不能改变的量。分类:整型常量浮点型常量字符串型常量位标量5.3.1整型常量表示方法:八进制用0开头十六进制则以0x开头而默认的格式是十进制数在C51中不能直接处理二进制常量。例句:十进制数100,表示成•十六进制是0x64•八进制就应该写成01445.3.2浮点型常量分类:十进制基本型•组成:–数字–小数点–如0.888,3345.345,0.0等•特点:–整数或小数部分为0,可以省略但必须有小数点。指数标准形式•[±]数字[.数字]e[±]数字•如125e3,7e9,-3.0e-3。5.3.3字符型常量特点:单引号内的字符不可以显示的控制字符,可以在该字符前面加一个反斜杠“\”,组成专用转义字符,进而使之显示,常用转义字符表请看表5-5所示。例句:如‘a’,‘d’表5-5常用转义字符转义字符含义ASCII码(16/10进制)\o空字符(NULL)00H/0\n换行符(LF)0AH/10\r回车符(CR)0DH/13\t水平制表符(HT)09H/9\b退格符(BS)08H/8\f换页符(FF)0CH/12\'单引号27H/39\双引号22H/34\\反斜杠5CH/925.3.4字符串型常量特点:由双引号内的字符组成引号内的没有字符时,为空字符串在C中字符串常量是字符串常量A和字符常量'A'是不同的,前者在存储时多占用两个字节的空间,而后者只占用一个字节的空间。功能:做为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上\o转义字符,以作为该字符串的结束符。例句:如“test”,“OK”等,都属于字符串类型的常量5.3.5位标量取值:位标量的值是一个二进制数。定义的语法结构:bit标量名作用:是定义一个标量,用来表示某个二进制位的值例句:bitflag//定义一个位标量flag,作为程序中的一个标志位5.3.6常量的定义常量的定义最常使用的方式有以下两种:1、用宏定义语句#difineFalse0x0;

1 / 86
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功