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

发布者:心想的45号最新更新时间:2015-10-23 来源: eefocus关键字:C51编程  高级技巧 手机看文章 扫描二维码
随时随地手机看文章
实用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中中断调用的变量

关键字:C51编程  高级技巧 引用地址:实用C51编程的高级技巧(C51编程)

上一篇:51单片机—DAC0832(详细介绍)—06—①
下一篇:AT89S51/52串口下载线制作过程

推荐阅读最新更新时间:2024-03-16 14:37

Keil C51使用教程---高级编程(四)
本章讨论以下内容: ●绝对地址访问 ●C与汇编的接口 ●C51软件包中的通用文件 ●段名转换与程序优化 第一节 绝对地址访问 C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 具体使用可看一看absacc.h便知 例如: rval=CBYTE ;指向程序存贮器的0002h地址 rval=XWORD ;指向外RAM的0004h地址 2. _at_关键字 直接在数据定义后加上_at_ const即可,但是注意: (1)绝
[单片机]
示波器的 6 大高级使用技巧-基础进阶
网上有很多介绍示波器基础知识的资源。如果您搜索相关的主题,比如触发的基础知识、探测的重要性、如何正确设置标度等等,必然会找到大量有用的结果。另一方面,您也可以从网上找到到很多非常专业化的内容。 那么有没有比基础更进一步但又不是那么深奥的知识呢?其实还有另外几种先进的示波器功能不为人知。 通过本文学习,您将掌握示波器的一些高级功能,无论您从事哪个行业或处于何种应用环境,这些功能都可以帮助您更深入地了解设计。所有 InfiniiVision 示波器,包括1000 X 系列示波器,都提供这些功能。 了解以下知识,您将可以更高效地执行测试: 1. 使用快速傅里叶变换(FFT)发现隐藏的错误 2. 在执行测试之前仿真算术运算 3.
[测试测量]
示波器的 6 大<font color='red'>高级</font>使用<font color='red'>技巧</font>-基础进阶
bit 和sbit的区别
bit和sbit都是C51扩展的变量类型。 bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。 sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved