电路驿站 EDAdesign.com.cn 网站创建日期:2004年10月1日

 
首页
| 设计与应用
| 驿站大卖场
| 驿站课堂
| 代客设计
| 服务与支持
| 留言本
单片机C51基础教程

>首页驿站课堂C51基础教程第四章 Keil C51高级编程

∷ 51教程导航
·
Keil C51开发系统基本知识
·
Keil C51软件使用详解
·
Keil C51 vs 标准C
·
Keil C51高级编程
·
Keil C51库函数参考
·
Keil C51例子:Hello.c
·
Keil C51的代码效率
·
Keil C51 软件使用方法
 
 
 
C51基础教程
来源:http://www.51c51.net 作者: 资料整理:电子虫虫
·
第四章 Keil C51高级编程
 
第一节
绝对地址访问
第二节
Keil C51与汇编的接口
第三节
C51软件包中的通用文件
第四节
段名转换与程序优化
   
 
1 2 3 4

  第三节 C51软件包中的通用文件
 

在C51\LiB目录下有几个C源文件,这几个C源文件有非常重要的作用,对它们稍事修改,就可以用在自己的专用系统中。

1. 动态内存分配
init_mem.C:此文件是初始化动态内存区的程序源代码。它可以指定动态内存的位置及大小,只有使用了init_mem( )才可以调回其它函数,诸如malloc calloc,realloc等。

calloc.c:此文件是给数组分配内存的源代码,它可以指定单位数据类型及该单元数目。

malloc.c:此文件是malloc的源代码,分配一段固定大小的内存。

realloc.c:此文件是realloc.c源代码,其功能是调整当前分配动态内存的大小。

2. C51启动文件STARTUP.A51
启动文件STARTUP.A51中包含目标板启动代码,可在每个project中加入这个文件,只要复位,则该文件立即执行,其功能包括:

* 定义内部RAM大小、外部RAM大小、可重入堆栈位置

* 清除内部、外部或者以此页为单元的外部存储器

* 按存储模式初使化重入堆栈及堆栈指针

* 初始化8051硬件堆栈指针

* 向main( )函数交权

 

  开发人员可修改以下数据从而对系统初始化
 

常数名 意义

IDATALEN 待清内部RAM长度

XDATA START 指定待清外部RAM起始地址

XDATALEN 待清外部RAM长度

IBPSTACK 是否小模式重入堆栈指针需初始化标志,1为需要。缺省为0

IBPSTACKTOP 指定小模式重入堆栈顶部地址

XBPSTACK 是否大模式重入堆栈指针需初始化标志,缺省为0

XBPSTACKTOP 指定大模式重入堆栈顶部地址

PBPSTACK 是否Compact重入堆栈指针,需初始化标志,缺省为0

PBPSTACKTOP 指定Compact模式重入堆栈顶部地址

PPAGEENABLE P2初始化允许开关

PPAGE 指定P2值

PDATASTART 待清外部RAM页首址

PDATALEN 待清外部RAM页长度

 

提示:如果要初始化P2作为紧凑模式高端地址,必须:PPAGEENAGLE=1,PPAGE为P2值,例如指定某页1000H-10FFH,则PPAGE=10H,而且连接时必须如下:

L51<input modules> PDATA(1080H),其中1080H是1000H-10FFH中的任一个值。
以下是STARTUP.A51代码片断,红色是经常可能需要修改的地方:

  ;------------------------------------------------------------------

; This file is part of the C51 Compiler package

; Copyright KEIL ELEKTRONIK GmbH 1990

;------------------------------------------------------------------

; STARTUP.A51: This code is executed after processor reset.

;

; To translate this file use A51 with the following invocation:

;

; A51 STARTUP.A51

;

; To link the modified STARTUP.OBJ file to your application use the following

; L51 invocation:

;

; L51 <your object file list>, STARTUP.OBJ <controls>

;

;------------------------------------------------------------------

;

; User-defined Power-On Initialization of Memory

;

; With the following EQU statements the initialization of memory

; at processor reset can be defined:

;

; ; the absolute start-address of IDATA memory is always 0

IDATALEN EQU 80H ; the length of IDATA memory in bytes.

;

XDATASTART EQU 0H ; the absolute start-address of XDATA memory

XDATALEN EQU 0H ; the length of XDATA memory in bytes.

;

PDATASTART EQU 0H ; the absolute start-address of PDATA memory

PDATALEN EQU 0H ; the length of PDATA memory in bytes.

;

; Notes: The IDATA space overlaps physically the DATA and BIT areas of the

; 8051 CPU. At minimum the memory space occupied from the C51

; run-time routines must be set to zero.

;-------------------------------------------------------------------

;

; Reentrant Stack Initilization

;

; The following EQU statements define the stack pointer for reentrant

; functions and initialized it:

;

; Stack Space for reentrant functions in the SMALL model.

IBPSTACK EQU 0 ; set to 1 if small reentrant is used.

IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.

;

; Stack Space for reentrant functions in the LARGE model.

XBPSTACK EQU 0 ; set to 1 if large reentrant is used.

XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.

;

; Stack Space for reentrant functions in the COMPACT model.

PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.

PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.

;

;-----------------------------------------------------------------

;

; Page Definition for Using the Compact Model with 64 KByte xdata RAM

;

; The following EQU statements define the xdata page used for pdata

; variables. The EQU PPAGE must conform with the PPAGE control used

; in the linker invocation.

;

PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.

PPAGE EQU 0 ; define PPAGE number.

;

;-----------------------------------------------------------------

  3. 标准输入输出文件
putchar.c

putchar.c是一个低级字符输出子程,开发人员可修改后应用到自己的硬件系统上,例如向CLD或LEN输出字符。

缺省:putchar.c是向串口输出一个字符XON|XOFF是流控标志,换行符“\*n”自动转化为回车/换行“\r\n”。

getkey.c

getkey函数是一个低级字符输入子程,该程序可用到自己硬件系统,如矩阵键盘输入中,缺省时通过串口输入字符。

4. 其它文件
还包括对Watch-Dog有独特功能的INIT.A51函数以及对8×C751适用的函数,可参考源代码。

   
 

关于驿站 | 驿站声明 | 网站介绍 | 网站推广 | 联系我们 | 友情链接
Copyright@2004-2008 EDAdesign.com.cn 版权所有 不得转载 沪ICP备05000346号
版主:威特 E-Mail:edadesign@tom.com 联系站长! QQ:306963535 QQ群:10116628