微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 实用C51编程的高级技巧(C51编程)

实用C51编程的高级技巧(C51编程)

时间:10-02 整理:3721RD 点击:

实用C51编程的高级技巧(C51编程)
一. C51热启动代码的编制

void main()


{


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


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


     {


           


     }


     else


     {


          HotPoint=0x7e;


}


如果你的程序包含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[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)       关键字_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)


{


return (1 + arg);


}



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


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


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



第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。


C51中中断调用的变量



单片机口线定义。


继续送福利了,继续分享,想要学习交流的加我 扣扣 1765841775

顶一下小编,我是来赚积分的,实在是不好意思的啦!

顶一下小编

好东西                     

自己来顶贴了,好东西要让更多人看到的

C51系列编程,一起交流学习哦                                

听起来好高端,学习

哈哈,你学什么专业的呀,对这个有兴趣吗

希望有了些基础和完全没基础的,但又希望走开发路线的,一起交流学习吧,学习才会进步,有方向的学习才会进步,系统的指导让你事半功倍

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top