一、C51热启动代码的编制

void main()
{
    char data *HotPoint=(char *)0x7f;
    if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa))
    {
        /*热启动的处理 */
    }
    else
    {
        HotPoint=0x7e; /*冷启动的处进
        *HotPoint=0xaa;
        *(++HotPoint)=0xaa;
    }
    /*正常工作代码*/
}

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

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

void main(void)
{
    void (*DispBuffer)(); /*定义指向函数指针*/
    DispBuffer=0xde00; /*赋值*/
    for(;;)
    {
        Key();
        DispBuffer();
    }
}

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

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

#define uchar unsigned char

#define uint unsigned int
void FtoC(void)
{
    float a;
    uchar i,*px
    uchar x[];   /*定义字符数组,准备存储浮点数的四个字节*、
    void *pf;
    px=x;         /*px指针指向数组x*/
    pf=&a;        /*void 型指针指向浮点数首地址*/
    a=34.526;

    ;i<;i++)
    {
        *(px+i)=*((char *)pf+i);    /*强制void 型指针转成char型,因为void型指针不能运算*/
    }
}

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

void CtoF(void)
{
    float a;
    uchar i,*px
    uchar x[]={,,,};
    void *pf;
    px=x;
    pf=&a;

    ;i<;i++)
    {
        *((char *)pf+i)=*(px+i);
    }
}

  四、绝对存储器访问

  (1)绝对存储器访问宏

#define CBYTE ((unsigned char volatile code *)0)
#define DBYTE ((unsigned char volatile data *)0)
#define XBYTE ((unsigned char volatile xdata *)0)
#define IBYTE ((unsigned char volatile idata *)0)
#define PBYTE ((unsigned char volatile pdata *)0)

  (2)连接器位置控制

  KeilC编译设置中,有定义

  (3)关键字_at_

data  unsigned char aaa  _at_ 0x40;
idata unsigned char aaa  _at_ 0x40;
xdata unsigned char aaa  _at_ 0x40;
code  unsigned char aaa  _at_ 0x40;

  五、强制函数的编译模式

void GetDataLen()small;

void GetDataLen()small
{
      ……………….
}

  六、C程序与汇编的接口

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

#pragma asm
...
#paragma endasm

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

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

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

#pragma SRC
#pragma SMALL
unsigned int asmfunc1 (
unsigned int arg)
{
     + arg);
}

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

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

#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. css实现小三角效果

    <!DOCTYPE html><html><head><meta charset="UTF-8"> <title>新闻标 ...

  2. java—— 编译与运行

    内容:使用javac 指定编译多个目录下java文件 链接:http://zhidao.baidu.com/link?url=W5ZERu8_ouGD-L_JH0vqqawhJNitsGbonQAAT ...

  3. C#三层开发做学生管理系统

    1.定义各个层 2.添加各个层之间的引用 DAL 层调用Model BLL层调用DAL和Model UI层调用BLL和Model层 Model层供各个层调用 3.根据数据库建立实体类,每张表对应一个实 ...

  4. 【java】Windows7 下设置环境变量

    Windows 7下配置JDK环境变量參数设置: 1.    安装JDK,安装过程中能够自己定义安装文件夹等信息,比如我们选择安装文件夹为:D:\Program Files (x86)\Java\jd ...

  5. java接口与抽象类的区别

    接口可以是标志接口,里面没有任何常量和方法. 抽象类不一定必须有抽象方法,也可也没有方法,但含抽象方法的类必须被声明为抽象类. 在抽象层次结构中,Java接口在最上面,然后紧跟着抽象类,然后是一般类. ...

  6. codevs 2451 互不侵犯(状丫dp)

    /* 好神奇好神奇...表示自己要学的还很多 注意到n<=9 不是搜索就是状丫 搜索+剪枝 70分 枚举放或者不放 这里用状丫 f[i][j][k] 表示前i行 放了j个国王 i行的状态是k的方 ...

  7. javascript !!的作用是把一个其他类型的变量转成的bool类型

    !!的作用是把一个其他类型的变量转成的bool类型

  8. SQL Server 分组后取Top N

    SQL Server 分组后取Top N(转) 近日,工作中突遇一需求:将一数据表分组,而后取出每组内按一定规则排列的前N条数据.乍想来,这本是寻常查询,无甚难处.可提笔写来,终究是困住了笔者好一会儿 ...

  9. Windows 设置时间同步

    1.Windows  Server 2008 r2 注:{}内是你要同步的外部服务器地址,例如复旦的时间同步服务器地址为:ntp.fudan.edu.cn,则完整命令如下: w32tm /config ...

  10. JDBC数据源连接池的配置和使用实例

    个人学习参考所用,勿喷! 使用JDBC建立数据库连接的两种方式: 1.在代码中使用DriverManager获得数据库连接.这种方式效率低,并且其性能.可靠性和稳定性随着用户访问量得增加逐渐下降. 2 ...