在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <object id="1jp1h"></object>
    <address id="1jp1h"><nav id="1jp1h"></nav></address>
  • <label id="1jp1h"></label>
    
    

    <bdo id="1jp1h"></bdo>

    新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 實(shí)用C51編程的高級(jí)技巧(C51編程)

    實(shí)用C51編程的高級(jí)技巧(C51編程)

    作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
    實(shí)用C51編程高級(jí)技巧(C51編程)

    一. C51熱啟動(dòng)代碼的編制

    void main()

    本文引用地址:http://www.biyoush.com/article/201611/321499.htm

    {

    char data *HotPoint=(char *)0x7f;

    if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa))

    {

    }

    else

    {

    HotPoint=0x7e;

    }

    如果你的程序包含startup.a51,則需要對(duì)startup.a51進(jìn)行修改。

    對(duì)于startup.a51的修改,根據(jù)自已的需要進(jìn)行,如將IDATALEN EQU 80H中的80H改為70H,就可以使6F到7F的16字節(jié)內(nèi)存不被清零。

    二.直接調(diào)用EPROM中已固化的程序

    void main(void)

    {

    void (*DispBuffer)();

    DispBuffer=0xde00;

    for(;;)

    {

    Key();

    DispBuffer();

    }

    }

    原理:利用指向函數(shù)的指針來(lái)實(shí)現(xiàn)的 (*指針變量名)();

    三. 將浮點(diǎn)數(shù)轉(zhuǎn)化為字符數(shù)組

    #define uchar unsigned char

    #define uint unsigned int

    void FtoC(void)

    {

    float a;

    uchar i,*px

    uchar x[4];

    pf=&a;

    a=34.526;

    for(i=0;i<4;i++)

    {

    *(px+i)=*((char *)pf+i);

    }

    }

    如果已將數(shù)存入EEPROM,要將其取出合并,方法也是一樣,可參考下面的程序。

    void CtoF(void)

    {

    float a;

    uchar i,*px

    uchar x[4]={56,180,150,73};

    void *pf;

    px=x;

    pf=&a;

    for(i=0;i<4;i++)

    {

    *((char *)pf+i)=*(px+i);

    }

    }

    四.絕對(duì)存儲(chǔ)器訪問(wèn)

    (1) 絕對(duì)存儲(chǔ)器訪問(wèn)宏

    #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編譯設(shè)置中,有定義

    (3) 關(guān)鍵字_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;

    五. 強(qiáng)制函數(shù)的編譯模式

    void GetDataLen()small;

    void GetDataLen()small

    {

    ……………….

    }

    六. C程序與匯編的接口

    1.第1種情況:直接嵌入?yún)R編

    #pragma asm

    #paragma endasm

    2.第2種情況:文件間調(diào)用

    通過(guò)寄存器傳遞參數(shù),通過(guò)固定存儲(chǔ)區(qū)傳遞參數(shù)。

    3.第3種情況:由C生成匯編接口

    #pragma SRC

    #pragma SMALL

    unsigned int asmfunc1 (

    unsigned int arg)

    {

    return (1 + arg);

    }

    七. volatile的使用方法及使用條件點(diǎn)

    第一種情況涉及到內(nèi)存映射硬件(memory-mapped hardware,如圖形適配器,這類設(shè)備對(duì)計(jì)算機(jī)來(lái)說(shuō)就好象是內(nèi)存的一部分一樣);

    #define XBYTE[1000] PORTADD //硬件口地址定義

    第二種情況涉及到共享內(nèi)存(shared memory,即被兩個(gè)以上同時(shí)運(yùn)行的程序所使用的內(nèi)存)。

    C51中中斷調(diào)用的變量



    關(guān)鍵詞: C51編程高級(jí)技

    評(píng)論


    技術(shù)專區(qū)

    關(guān)閉
    ×

    “芯”朋友见面大会
    珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>