實(shí)用C51編程的高級(jí)技巧(C51編程)
一.
void main()
本文引用地址:http://m.butianyuan.cn/article/201611/321499.htm{
}
如果你的程序包含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)
#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)
data unsigned char aaa
idata unsigned char aaa
xdata unsigned char aaa
code
五. 強(qiáng)制函數(shù)的編譯模式
void GetDataLen()small;
void GetDataLen()small
{
}
六. C程序與匯編的接口
1.第1種情況:直接嵌入?yún)R編
#pragma asm
#paragma endasm
2.第2種情況:文件間調(diào)用
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]
第二種情況涉及到共享內(nèi)存(shared memory,即被兩個(gè)以上同時(shí)運(yùn)行的程序所使用的內(nèi)存)。
C51中中斷調(diào)用的變量
評(píng)論