一、C51热启动代码的编制

  1. void main()
  2. {
  3. char data *HotPoint=(char *)0x7f;
  4. if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa))
  5. {
  6. /*热启动的处理 */
  7. }
  8. else
  9. {
  10. HotPoint=0x7e; /*冷启动的处进
  11. *HotPoint=0xaa;
  12. *(++HotPoint)=0xaa;
  13. }
  14. /*正常工作代码*/
  15. }

  如果你的程序包含startup.a51,则需要对startup.a51进行修改。对于startup.a51的修改,根据自已的需要进行,如将IDATALEN EQU 80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。

  二、直接调用EPROM中已固化的程序

  1. void main(void)
  2. {
  3. void (*DispBuffer)(); /*定义指向函数指针*/
  4. DispBuffer=0xde00; /*赋值*/
  5. for(;;)
  6. {
  7. Key();
  8. DispBuffer();
  9. }
  10. }

原理:利用指向函数的指针来实现的 (*指针变量名)();

  三、将浮点数转化为字符数组

  1. #define uchar unsigned char
  2.  
  3. #define uint unsigned int
  4. void FtoC(void)
  5. {
  6. float a;
  7. uchar i,*px
  8. uchar x[]; /*定义字符数组,准备存储浮点数的四个字节*、
  9. void *pf;
  10. px=x; /*px指针指向数组x*/
  11. pf=&a; /*void 型指针指向浮点数首地址*/
  12. a=34.526;
  13.  
  14. ;i<;i++)
  15. {
  16. *(px+i)=*((char *)pf+i); /*强制void 型指针转成char型,因为void型指针不能运算*/
  17. }
  18. }

  如果已将数存入EEPROM,要将其取出合并,方法也是一样,可参考下面的程序。

  1. void CtoF(void)
  2. {
  3. float a;
  4. uchar i,*px
  5. uchar x[]={,,,};
  6. void *pf;
  7. px=x;
  8. pf=&a;
  9.  
  10. ;i<;i++)
  11. {
  12. *((char *)pf+i)=*(px+i);
  13. }
  14. }

  四、绝对存储器访问

  (1)绝对存储器访问宏

  1. #define CBYTE ((unsigned char volatile code *)0)
  2. #define DBYTE ((unsigned char volatile data *)0)
  3. #define XBYTE ((unsigned char volatile xdata *)0)
  4. #define IBYTE ((unsigned char volatile idata *)0)
  5. #define PBYTE ((unsigned char volatile pdata *)0)

  (2)连接器位置控制

  KeilC编译设置中,有定义

  (3)关键字_at_

  1. data unsigned char aaa _at_ 0x40;
  2. idata unsigned char aaa _at_ 0x40;
  3. xdata unsigned char aaa _at_ 0x40;
  4. code unsigned char aaa _at_ 0x40;

  五、强制函数的编译模式

  1. void GetDataLen()small;
  2.  
  3. void GetDataLen()small
  4. {
  5. ……………….
  6. }

  六、C程序与汇编的接口

  1.第1种情况:直接嵌入汇编

  1. #pragma asm
  2. ...
  3. #paragma endasm

  2.第2种情况:文件间调用

通过寄存器传递参数,通过固定存储区传递参数。

  3.第3种情况:由C生成汇编接口

  1. #pragma SRC
  2. #pragma SMALL
  3. unsigned int asmfunc1 (
  4. unsigned int arg)
  5. {
  6. + arg);
  7. }

  七、volatile的使用方法及使用条件点

  第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样);

  1. #define XBYTE[1000] PORTADD //硬件口地址定义

  第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。

实用C51编程的高级技巧(C51编程)的更多相关文章

  1. (转载)10个实用的但偏执的Java编程技术

    10个实用的但偏执的Java编程技术 在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 作者:小峰来源:码农网|2015-09- ...

  2. javascript实用技巧、javascript高级技巧

    字号+作者:H5之家 来源:H5之家 2016-10-31 11:00 我要评论( ) 三零网提供网络编程. JavaScript 的技术文章javascript实用技巧.javascript高级技巧 ...

  3. 并发编程概述--C#并发编程经典实例

    优秀软件的一个关键特征就是具有并发性.过去的几十年,我们可以进行并发编程,但是难度很大.以前,并发性软件的编写.调试和维护都很难,这导致很多开发人员为图省事放弃了并发编程.新版.NET 中的程序库和语 ...

  4. Python黑帽编程2.1 Python编程哲学

    Python黑帽编程2.1  Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...

  5. Python黑帽编程2.9 面向对象编程

    Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...

  6. [转]Windows网络编程学习-面向连接的编程方式

    直接附上原文链接:windows 网络编程学习-面向连接的编程方式

  7. WCF编程系列(六)以编程方式配置终结点

    WCF编程系列(六)以编程方式配置终结点   示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来 ...

  8. 老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

    老李推荐:第14章1节<MonkeyRunner源码剖析> HierarchyViewer实现原理-面向控件编程VS面向坐标编程   poptest是国内唯一一家培养测试开发工程师的培训机 ...

  9. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    [Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...

随机推荐

  1. DAY TRADER

    日内交易是一种交易模式,英文名字是daytrade,主要是指持仓时间短,不留过夜持仓的交易方式.日内交易捕捉入市后能够马上脱离入市成本的交易机会,入市之后如果不能马上获利,就准备迅速离场.因为这种交易 ...

  2. JS 时间格式CST转GMT

    近几天,在做百度地图时,需要转换时间格式并做显示,但是发现显示的时间格式,出现了错乱,二者的日期和小时都出现了变动.例如: 原始时间格式:Thu Aug 18 20:38:54 CST 2016 转换 ...

  3. iOS 在 Xcode 中重命名项目名称

    本教程使用的 Xcode 版本是Xcode 6.3.1,网上有好多的教程,都是在 Xcode 4 上做的讲解,现以本文章讲解一下如何在 Xcode 6.3.1 中重命名你的项目名称,包括你的应用名称. ...

  4. jsp if else c标签 总结

    JSTL标签使用方法 keyword:JSTL标签.<c:choose>.<c:forEach>.<c:forTokens>.<c:if>.<c: ...

  5. ASP图片格式与base64数据互转方法

    ASP图片格式与base64数据相互转换的方法,经常用于处理表单中存储有base64字符串格式的图片. 获取到base64数据,转换成图片 <% Subfolder=year(now)& ...

  6. IntelliJIdea快捷键

    Ctrl+Shift+方向键Up/Down 代码向上/下移动. Ctrl+X 删除行 Ctrl+Y 也是删除行,不知道有啥区别 Ctrl+D 复制行 Ctrl+Alt+L 格式化代码 Ctrl+N 查 ...

  7. 根据goodsId获得相关商品的列表

    List<Goods> goodsList = goodsDetailService.getGoodsListByproductId(productId); for (Goods good ...

  8. 文本溢出、垂直外边距合并、BFC、hasLayout

    今天学习文本溢出,又遇到了一些小问题,先上图: 关于文本溢出推荐:http://www.cnblogs.com/yzg1/p/5089534.html 从里面学习到单行文本和多行文本溢出, overf ...

  9. <customErrors>节点说明1

    <customErrors>节点用于定义一些自定义错误信息的信息.此节点有Mode和defaultRedirect两个属性, 其中defaultRedirect属性是一个可选属性,表示应用 ...

  10. 关于.NET中的验证码

    常用的生成验证码程序 ,图片效果如下: 源程序如下: 复制代码 代码如下:using System; using System.IO; using System.Drawing; using Syst ...