C51固定ROM地址初始化数据方法

发布者:玉树琼花最新更新时间:2016-11-21 来源: eefocus关键字:C51  ROM地址  初始化数据 手机看文章 扫描二维码
随时随地手机看文章

查了很多资料,要用KEIL C51在ROM(FLASH)中固定的位置写入一个初始化数据,网上有很多办法,感觉都不是很好,我最近因为要用,所以想了一个办法来实现,大家都知道在C51成立工程时都有一个扩展名为A51的源文件,这个文件其实就是程序的初始化文件,也就是在程序的开始对堆栈等东西做一个初始化;好了话不多说;下面介绍如何使用。

1、一般的工程可以不用此文件,把此文件删除就可以;但是我们要对ROM的固定地址填入数据,所以这个文件要加在工程内。

2、打开这个文件会有很长的篇幅,这些其实都是没有用的,删除就可以,只留下最后三行就可以,因为有这个文件后,编译器要知道如何转移到你的main()。看第5条。

3、在上面一个位置就可以写入如下的数据。

                CSEG    AT      03FcH
                DB      10h,11h,12h

这个意思就是在03FC地址处存放下面的3个数据。当然你可以定义更多。

你也可以加上地址符号。

                CSEG    AT      03FcH
FLASH_DATA1:          DB      10h,11h,12h 

                CSEG    AT      03ecH
fLASH_DATA2:          DB      10h,11h,12h 

4、在主程序中可以这样处理

#define  FLASH_DATA1           0x3fc

#define  FLASH_DATA2           0x3Ec

定义一个FLASH的基地址。这个时候你就可以随便读写了。

5、注意要把A51文件处理好,要保证它能够转移到MAIN中;下面是我用的START900.A51;留以下内容就可以。

;以下是START900.A51的全部内容=================================================

                CSEG    AT      03FcH
FLASH_DATA1:          DB      10h,11h,12h 

                CSEG    AT      03ecH
fLASH_DATA2:          DB      10h,11h,12h 

 

                EXTRN CODE (?C_START) ;只留下面的三行就可以。
                JMP     ?C_START

                END

;============================================================================

原文件的开始有很多常量的定义,还有IF语句,这些删除就可以,只留最下面的这三行;编译器就知道你的MAIN入口了;可能别的A51文件不些不同,但这三行都是有的;别的都删除。

6、注意,定义的地址空间不能在你的程序内;也就是不能和你的程序地址重合;以免影响你的程序运行


关键字:C51  ROM地址  初始化数据 引用地址:C51固定ROM地址初始化数据方法

上一篇:PWM的C51程序
下一篇:c51 bit使用

推荐阅读最新更新时间:2024-03-16 15:21

Keil C51对C语言的关键词扩展之十二: _priority_ 以及 _task_
Keil 51编译器支持 RTX51 Full 和 RTX51 Tiny 实时多任务操作系统,并为其提供了_task_关键词以及_priority_关键词。 _task_关键词指示一个函数为实时任务。 _priority_关键词指示任务优先级。 示例: void func (void) _task_ num _priority_ pri num为任务ID,在RTX51 Full中取值范围为0-255,在RTX51 Tiny中取值为0-15。 pri为任务优先级。 _task_声明的任务函数,不能有参数,范围值类型必须为void类型。
[单片机]
单片机C51语言的位操作及其应用详细说明
在对单片机进行编程的过程中,对位的操作是经常遇到的。C51对位的操控能力是非常强大的。从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点。这也是在各个领域中都可以看到C的重要原因。在这一节中将详细讲解C51中的位操作及其应用。 1、位运算符 C51提供了几种位操作符,如下表所示: 1)“按位与”运算符(&) 参加运算的两个数据,按二进位进行“与”运算。原则是全1为1,有0为0,即: 0&0=0; 0&1=0; 1&0=0; 1&1=1; 如下例: a=5&3; //a=(0b 0101) & (0b 0011) =0b 0001 =1 那么如果参加运算的两个数为负数,又该如何算呢?会以其补码形式表
[单片机]
单片机<font color='red'>C51</font>语言的位操作及其应用详细说明
串行通信UART及PROTEUS仿真设计
C51跟atmega64的串行通信。相关理论知识这里就不多说,只提几个: 51的UART所用的几个寄存器 SCON:SM0 SM1 SM2 REN RB8 TX8 RI TI PCON: SMOD -- -- -- --- --- PD IDLE T2CON: TF2 EXF2 RCLK TCLK EXEN2 TR2 C/_T CP/_RL2 TH2,TL2 波特率为9600bps avr:atmega64的USART的两个 所用到的寄存器 这里用的是uart0,所以初始化时应该设置相关的寄存器有: UCSR0A : RXC TXC UDRE FE DOR
[单片机]
keil c51如何实现2进制操作
#define LongToBin(n) \ ( (n 21)&0x80 \ (n 18)&0x40 \ (n 15)&0x20 \ (n 12)&0x10 \ (n 9)&0x08 \ (n 6)&0x04 \ (n 3)&0x02 \ (n 0)&0x01 \ ) #define Bin(n) (0x##n##L) 1. \的作用是指下行的内容是接着上行未完成的内容 2. ##的作用是连接字符的作用 例如:0x##11110000##L 替代后0x11110000 将8个十进制数转换为十六进制,L表示长整型数32bits 3.uchar a; a=
[单片机]
Keil C51对C语言的关键词扩展之十一: xdata
xdata声明的变量位于外部ram 64KB地址范围内某一位置。 程序示例: unsigned int xdata m=0; /* 声明一个全局变量,可位于外部ram 64KB地址范围内任意位置,由编译器决定 */ int main(void) { ...... }
[单片机]
Keil C51 的printf
在Keil C51 中使用printf ,首先需要重新实现 putchar(char c)函数。此函数在 char putchar (char c) { ES=0; SBUF = c; while(TI==0); TI=0; ES=1; return 0; } 我们先分析一下上面这个程序哈, 关闭串口中断 发送单字节数据 等待发送完毕 清除TI标志 开启串口中断 在main函数里可以直接使用printf函数进行输出了。 但是,我一直存在这样一个疑惑: void main() { unsigned char test1 = 55; printf( the
[单片机]
C51编程2-输出电平(点亮LED2)
上一讲中,直接通过变量sbit来控制P2口中一个LED的亮灭。除了可以通过sbit位控制来设置LED,我们还可以通过P2口,直接控制P2口的LED。 下面的代码可以实现上一讲一样的功能,控制led0亮。 #include reg52.h void main(){ P2 = 0xfe; } 从上面的代码中,将0xfe直接赋值给P2为什么实现的功能跟位操作的一样?而我们学习的C语言中,貌似没有都见过sbit,P2这两个东西。 在《标准C与C51》的文章中,提到为发挥C51单片机的特性,编译器会增加对MCS51单片特性的支持,而sbit与P2就是为了发挥MCS51单片机增加的特性支持。有兴趣的,可以通过下面的连接看
[单片机]
<font color='red'>C51</font>编程2-输出电平(点亮LED2)
[C51代码]菜单函数[用于LCD1602]
#ifndef __menu_h__ #define __menu_h__ #include head.h #include LCD1602_2.h #include DS18B20.h #define Null 0 /*********************** * 函数声明 * ***********************/ void ShowMenu(void); void Menu_Change(uchar KeyNum); /*********************** * 按键功能键宏定义 * ***********************/ #define up 1 #define d
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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