- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机C51讲述
C和汇编的混合编程 ◆Cx51高级编程技术 通过寄存器传递参数 C和汇编的混合编程 ◆Cx51高级编程技术 参数传递例子 函数返回值 C和汇编的混合编程 ◆Cx51高级编程技术 函数名转换 在混合编程时,互相调用的函数名会发生转换: 对于重入函数加上_?以示区别,表明含栈内参数传递 _?FUNC Void func(void)reentrant 以寄存器传递参数的函数名前加_下划线 _FUNC Void func(char) 无参数传递或以固定存储区传递函数名不做改变,仅变为大写 FUNC Void func(void) 解释 符号名 说明 C和汇编的混合编程 ◆Cx51高级编程技术 一个简单的C调用汇编的例子 51单片机的C程序设计 ◆Cx51基础 ◆ Cx51的语言扩展 ◆ Cx51高级编程技术 ◆ Cx51运行库 ◆ 51资源的C编程 内联函数 ◆Cx51运行库 一般来说,库函数都是经过了长期的正确性和可移植性验证,因此程序设计时尽量的采用库函数来完成所需要的功能。 Cx51 编译器支持许多内联函数。内联函数编译时生成内嵌代码而不是一次函数调用来完成库函数,这样可以更高效更快速的运行函数。 Cx51 编译器支持以下几种内联函数: _crol_ _iror_ _nop_ _cror_ _lrol_ _testbit_ _irol_ _lror_内联函数在头文件INTRINS.H中声明。 _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回。 _iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回。 _lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回。 _nop_:相当于直接在汇编中插入NOP。 _testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。 _chkfloat_:测试并返回源点数状态。 内联函数 ◆Cx51运行库 库文件 ◆Cx51运行库 Cx51 库包括六个不同的编译库,针对不同的功能要求进行了优化。这些库支持大多数的ANSI C函数调用。 库文件说明 SIGNETICS 8xC751 和派生系列库 80C751.LIB LARGE 模式浮点运算库 C51FPL.LIB LARGE 模式库没有浮点运算 C51L.LIB COMPACT 模式浮点运算库 C51FPC.LIB COMPACT 模式库没有浮点运算 C51C.LIB SMALL 模式,浮点运算库 C51FPS.LIB SMALL 模式库,没有浮点运算 C51S.LIB Cx51 编译器还以源代码的形式提供了几个库模块,主要包括基本的输入输出函数和内存分配函数。用户可以自行修改以适合自己的需求,比如把默认的串口输出改写为LCD输出,把默认的输入改写为键盘输入。 绝对变量定位和绝对存储器访问宏 ◆Cx51运行库 ANSI C不支持直接指定一个变量的存储地址,但在嵌入式系统中可能需要指定变量的存储地址,有3种方法来实现:第一,连接器定位控制;(比较烦琐,一般不用)第二,_at_关键词;第三,绝对存储器访问宏。 _at_关键词:类型 [存储类型] 变量名 _at_ 地址可选的存储类型指示变量的存储空间,若省略则采取缺省的空间;地址为变量定位的地址,必须位于物理存储空间范围内。绝对变量不可初始化,也不能定位位型变量和函数。 注意:在使用_at_ 关键字访问XDATA变量时需要使用关键字volatile来防止编译器对存储器的访问优化。(例子) ◆Cx51运行库 绝对存储器访问宏:可以使用Cx51库提供的部分绝对存储访问宏访问显式的存储地址。这些宏在头文件ABSACC.H中定义。 CBYTE FCVAR CWORD DBYTE FVAR DWORD FARRAY PBYTE PWORD FCARRAY XBYTE XWORD这些宏用法相似,以DBYTE为例,DBYTE宏允许访问单片机片内数存的某一字节: val = DBYTE[0x0021]; DBYTE[0x0021] = 7。XWORD宏允许访问单片机片外数存的某一字: val = XWORD[0x0002];XWORD[0x0002] = 7。 注意XWORD宏中地址并不表示整型存储器地址(需乘2) 绝对变量定位和绝对存储器访问宏 重要库函数头文件 ◆Cx51运行库 1、8051 特殊功能寄存器包含文件Cx51 编译器包许多包含文件定义许多8051 派生系的特殊功能寄存器的明显常数这些文件在目录KEIL\C51\INC 和子目录下。REG51.H 2、ABSACC.HABSACC. H 文件包含允许直接访问8051
文档评论(0)