第五章 单片机地C语言编程.ppt

  1. 1、本文档共101页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 单片机地C语言编程

向一个库中添加目标文件模块的命令为: lib51 add 模块文件名 to 库文件名 若库中已存在同名文件,则出错。假设上面给出的加法小程序经编译后生成目的文件为add.obj。则示例如下图所示。 若要替换库文件中的模块,使用的命令为: lib51 replace 新模块文件 in 库文件 示例如下图所示。 如果将库中的模块删去,则可使用命令: lib51 delete 库文件名模块名 如果库中不存在指定的模块,则出错。示例如下图。 10.10.3 用户库函数的使用 为了使用已经制作好的用户库中的模块,在Keil uVision2集成开发环境中,只需要在其工程文件窗口中将用户自定义好的库文件加入工程即可。库中的函数原型一般单独在一个头文件中声明,余下的工作如同使用C51的标准函数一样简单,此处不再重述。 由于库管理程序是以模块为单元来进行管理的。因此,在制作用户函数库的时候,最好是一个函数为一个模块文件。这样制作库时文件虽多,但管理和使用起来灵活方便高效。此外,如果想要改动C51原有的库函数(如_getkey和putchar),其方法同自建用户库完全一样,但需要主要的是它的输入输出参数及该函数所在的库文件(会与存储模式相关)。 10.11 小结 本章介绍了C51的基本数据类型、存贮类型及对C51对单片机内部部件的定义,并介绍了C语 言 基础知识,最后通过编程实例介绍了各种结构的程序设计,以上是利用C语言编单片机程序 的基础,都应该掌握并灵活应用,只有多编程,多上机才能不断提高编程的能力。如何编写高效的C语言程序,通常应注意以下问题: 1. 定位变量 经常访问的数据对象放入在片内数据RAM中,这可在任一种模式(COMPACT/LARGE)下用输入 存贮器类型的方法实现。访问片内RAM要比访问片外RAM快得多。在片内RAM由寄存器组、位 数据区、栈和其它由用户用“data”类型定义的变量共享。由于片内RAM容量的限制(128 ~256字节,由使用的处理器决定),必须权衡利弊以解决访问效率和这些对象的数量之间的矛盾。 2. 尽可能使用最小数据类型 MCS-51系列单片机是8位机,因此对具有“char”类型的对象的操作比“int”或“long”类型的对象方便得多。建议编程者只要能满足要求,应尽量使用最小数据类型。 C51编译器直接支持所有的字节操作,因而如果不是运算符要求,就不作“int”类型的转换,这可用一个乘积运算来说明,两“char”类型对象的乘积与8XX51操作码“MUL AB”刚好相符。如果用整型完成同样的运算,则需调用库函数。 3.只要有可能,使用“unsigned”数据类型 8XX51单片机的CPU不直接支持有符号数的运算。因而C51编译必须产生与之相关的更多的 代码以解决这个问题。如果使用无符号类型,产生的代码要少得多。 4.只要有可能,使用局部函数变量 编译器总是尝试在寄存器里保持局部变量。 这样,将索引变量(如FOR和WHILE循环中计数变 量)声明为局部变量是最好的,这个优化步骤只为局部变量执行。使用“unsigned char/int ”的对象通常能获得最好的结果。 各可选项的意义如下: using m 定义函数使用的工作寄存器组,m的取值范围为0~3,可缺省。它对目标代码的影响是:函数入口处将当前寄存器保存,使用 m 指定的寄存器组,函数退出时 原寄存器组恢复。选不同的工作寄存器组,可方便实现寄存器组的现场保护。 再入属性关键字reentrant将函数定义为再入的,在C51中,普通函数(非再入的)不能递归调用, 只有再入函数才可被递归调用。 中断服务函数不允许用于外部函数,它对目标代码影响如下: ①当调用函数时,SFR中的ACC、B、DPH、DPL和PSW当需要时入栈。 ②如果不使用寄存器组切换,中断函数所需的所有工作寄存器Rn都入栈。 ③函数退出前,所有工作寄存器都出栈。 ④函数由“RETI”指令终止。 下面示例说明C语言的编程方法。 例 要求每中断一次,发光二极管显示开关状态 用C语言编程 #includereg51.h int0() interrupt 0 /*INT0中断函数*/ {  P1=0x0f; /*输入端先置1,灯灭*/ P=4; /* 读入开关状态,并左移四位, 使开关反映在发光二极管上*/  }  main() {  EA=1; /*开中断总开关*/ EX0=1; /*

您可能关注的文档

文档评论(0)

jyf123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档