<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

          void main()

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

          {

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

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

          {

          }

          else

          {

          HotPoint=0x7e;

          }

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

          對于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ù)的指針來實(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);

          }

          }

          四.絕對存儲器訪問

          (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編譯設(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)用

          通過寄存器傳遞參數(shù),通過固定存儲區(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è)備對計(jì)算機(jī)來說就好象是內(nèi)存的一部分一樣);

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

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

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



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

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();