一.
void main()
{
}
如果你的程序包含startup.a51,则需要对startup.a51进行修改。
对于startup.a51的修改,根据自已的需要进行,如将IDATALEN EQU 80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。
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[4];
pf=&a;
a=34.526;
for(i=0;i<4;i++)
{
*(px+i)=*((char *)pf+i);
}
}
如果已将数存入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编译设置中,有定义
(3)
data unsigned char aaa
idata unsigned char aaa
xdata unsigned char aaa
code
void GetDataLen()small;
void GetDataLen()small
{
}
1.第1种情况:直接嵌入汇编
#pragma asm
#paragma endasm
2.第2种情况:文件间调用
3.第3种情况:由C生成汇编接口
#pragma SRC
#pragma SMALL
unsigned int asmfunc1 (
unsigned int arg)
{
return (1 + arg);
}
第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样);
#define XBYTE[1000]
第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
C51中中断调用的变量
上一篇:51单片机—DAC0832(详细介绍)—06—①
下一篇:AT89S51/52串口下载线制作过程
推荐阅读最新更新时间:2024-03-16 14:37