- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章基本输入输出接口技术 第10章 80C51单片机的C语言程序设计 10.1单片机C语言概述10.1.1 C51的程序结构 3.分号是C51语句的重要组成部分,每个语句和数据定义(函数除外)的最后必须有一个分号。 4.可以用//在每一行进行注释 可以用/*……*/对C51程序中的任何部分作注释。 10.1.2 C51编译器介绍 单片机不能直接执行C51程序,执行前必须经过编 译,形成相应的可执行代码,目前开发的编译器种 类繁多,并非所有的C51编译器产生高效代码。 KEIL编译器:KEIL编译器效率很高。 它支持浮点和长整数、重入和递归,支持DOS和Window环境, 但它不提供库源代码,只能产生混合代码,若使用单片模式,它是最好的选择。 10.1.3 C51的特点 (1) C语言采用与人的思维更接近的关键字和操作函数。 (2) C语言提供了大量的标准库文件 (3) C语言采用模块化编程思想 (4)C语言可移植性好 (5)通用性好 (6)寄存器分配和寻址方式由编译器进行管理 很多系统特别是实时时钟系统都是用C 语言和汇编语言联合编写的,尤其是对时序要求很严格的驱动程序来说使用汇编语言是唯一的方法。 10.2 C51的数据类型 C51和标准C的区别: 1. C语言的基本数据类型有char、int、short、long、float、double等六种类型。 C51不支持复杂的双精度浮点运算(double)。 2 . float也与标准C一样符合IEEE-754标准,但float的使用和运算,需要调用数学库“math.h”函数的支持。 3 . 布尔处理器是8051单片机的特色,位类型(bit)可以定义一个位变量,由C51编译器在8051内部RAM区20H-2FH的128个位地址中分配一个位地址。 需要注意的是,位类型不能定义指针和数组。 bit型不能访问SFR的可位寻址区 C51和标准C的区别: 4 . 特殊功能寄存器(sfr和sfr16): 8051及其兼容产品的特殊功能寄存器必须采用直接寻址的方式来访问,sfr可以对8051的特殊功能寄存器进行定义,数据占用一个字节。sfr16为16位特殊功能寄存器, 8051及其兼容产品的16位特殊功能寄存器(如DPTR)可以用sfr16来定义,数据占用两个字节。 5. 在C51编译器提供的头文件reg51.h中已经把所有的特殊功能寄存器进行了定义,我们可以直接用include命令使其包括在程序中。注意:在使用时,所有的sfr的名称都必须大写。 10.2.2 C51数据的存储类型 由于单片机的存储结构复杂,在C51中定义变量时,需要指出其保存的位置。具体如下表。 C51对变量定义时,既可以定义数据类型,还可以定义存储类型。其格式为: “数据类型 [存储类型] 变量名”。 例如: char data i; //定义8位变量i,放在片内 //直接寻址区:00-7F区,读取速度快 float idata x ; //定义32位变量x,放在间接寻址区,00FF区。 bit bdata flags; //定义位变量flags,放在位寻址区。 存储类型为可选项,如果不做存储类型的定义,系统将选择默认存储模式来存储,默认类型由编译控制命令指令限制。 10.2.3 8051单片机特殊功能寄存器的C51定义一 、特殊功能寄存器的声明 其定义语法如下: sfr name=adress “sfr”为保留关键字,name为用户定义标示符,但通常用特殊寄存器名称, “=”后面的地址必须是常数,不允许带有运算表达式,其常数值范围必须在特殊功能寄存器地址范围0x80到0xFF之间。 例: sfr SCON=0x90; /*串口控制寄存器地址 90H*/ 特殊功能寄存器位的声明 在8051单片机的应用中,经常需要对SFR进行位操作,特殊位的定义利用关键字sbit进行说明 与sfr定义一样,用关键字“sbit”定义某些持殊位时能接受任何符号名称,这种地址分配有三种方式: 第1种方式: sbit 位变量=特殊功能寄存器名^位位置(0-7有效) 例如:sfr PSW=0xD0;//定义PSW sbit OV=PSW^2;//定义溢出标志位 sfr和sbit只能在函数外进行申明,不能在函数内使用。且只能小写 如以下代码是错误的 main() { sbit LED_EN = P1^4; sbit LED_DIS = 0x88; sfr LED
文档评论(0)