C51与标准C的比较.pptx

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

C51与标准C的比较北京信息职业技术学院|刘蕊

C51与标准C的比较1.变量2.资源映射3.用C语言处理中断4.标准C库5.C语言入口6.程序链接与定位1单片机技术与应用

2单片机技术与应用各种类型的数据占的字节数,在不同的系统中有所不同。1.变量

3单片机技术与应用16位微控制器内部的数据长度是16位(2字节),所以首选的数据类型是“int”。16位机处理16位数据比8位数据的效率更高。对于C51单片机来说,16位数据类型效率最高,因此在使用中,尽量选择int类型数据。若可能,则选用无符号类型。以下关键字用于声明变量,以指定特定需要或内存中变量存储的相关条件。static(静态变量)volatile(可变变量)const(只读变量)Constvolatile1.变量

4单片机技术与应用1.1volatile变量volatile变量的本意是“易变的”,?就是该变量会以编译器无法预知的方式发生变化。所有的编译器的优化均假设编译器知道变量的变化规律,请编译器不要做优化。也就是说是其值在正常程序流程以外可能改变的变量。在嵌入式系统中,这种情况通过两种主要途径发生:一是中断服务程序,二是硬件动作。中断服务程序中修改的供其它程序检测的变量需要加volatile。存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义。1.变量

5单片机技术与应用1.2const变量关键字“const”:并不表示恒量,而是代表“只读”。Const声明可用于任何变量,它告诉编译器将其存储在ROM区。编译器保留了那个位置程序存储器地址。由于位于ROM中,其值不能改变。constunsignedshorta;unsignedshortconsta;constunsignedshort*a;unsignedshort*consta;1.变量

6单片机技术与应用1.3Constvolatile变量Constvolatile变量:这个修饰符应该用于能出乎意料地改变的任何存储器位置,因此需要volatile限定语,由于const该变量是只读的。最明显的例子是硬件状态寄存器,像SCI状态寄存器SCS1。这个寄存器包含信号状态标志,如发送空、发送完成、接收满以及其它。这是一个可变寄存器由于这些标志的改变依赖于串行通信的状态。这也是只读,由于标志不能被程序直接改写,它们只对模块的状态作出响应。这个状态寄存器最佳声明方法是:constvolatileunsignedcharSCS1@0x00161.变量

7单片机技术与应用2.1访问固定的内存位置与PC机不同,嵌入式系统通常的特点是需要编程者访问一个指定的存储器位置。(1)在某个项目中需要将绝对地址0x2FFA处整型变量的值设为0xAA55。完成这个任务的代码是:int*ptr;ptr=(int*)0x2FFA;*ptr=0xAA55;(2)在某个项目中需要将绝对地址0x2FFA处整型变量的值设为0xAA55。完成这个任务的代码是:intptr@0x2FFA;ptr=0xAA55;2.资源映射

8单片机技术与应用2.2访问I/O寄存器一个方法是使用如下的#define指示:#definePortA(*(volatileunsignedchar*)0x0000)这种情况下,PortA为地址0x0000处字符型变量。在codewarrior中的头文件中已经给出了寄存器的宏定义。例如:mc9s12dg128.hunsignedcharpta;pta=PORTA; 或PORTA=pta;另一种方法是在变量声明中使用符号“@”:constvolatileunsignedcharSCS1@0x00162.资源映射

9单片机技术与应用ANSIC里并没有定义如何用C写中断服务程序;表达式以interrupt关键字开始,接着是中断向量号,最后是函数原型。以下定义了中断向量号为7的实时中断:interrupt7voidRTI_ISR(void) { /*RTI_ISRFunctionCodes*/ }C51中断源有55个,中断向量号越小,优先级越大;在codewarrior环境下,中断向量号在头文件中,例如mc9s

文档评论(0)

学海无涯苦做舟 + 关注
实名认证
内容提供者

职业教育

1亿VIP精品文档

相关文档