Keil C51初始化代码 Startup.a51的中文说明

发布者:廿由人最新更新时间:2016-10-17 来源: eefocus关键字:Keil  C51  初始化代码  Startup.a51 手机看文章 扫描二维码
随时随地手机看文章
;------------------------------------------------------------------------------
; STARTUP.A51: 用户上电初始化程序
;------------------------------------------------------------------------------
;
; 用户定义需上电初始化的内存空间
;
; 使用以下EQU命令可定义在CPU复位时需用0进行初始化的内存空间
;
;;      ; IDATA 存储器的空间的绝对起始地址总是0.; 
IDATALEN   EQU 80H   ; 需用0进行初始化的IDATA存储器空间的字节数
;
XDATASTART   EQU   0H   ; XDATA存储器空间的绝对起始地址
XDATALEN   EQU   0H   ; 需用0进行初始化的XDATA存储器的空间字节数.
;
PDATASTART   EQU   0H   ; PDATA存储器的空间的绝对起始地址
PDATALEN   EQU   0H   ; 需用0进行初始化的PDATA存储器的空间字节数.
;
; 注意:   IDATA 存储器的空间在物理上包括了8051单片机的DATA和BIT存储器空间.
;           听 说 至少要保证与C51编译器运行库有关的存储器的空间进行0初始化 不知是否
;------------------------------------------------------------------------------
;
; 再入函数模拟初始化
;
; 以下用EQU指令定义了再入函数模拟堆栈指针的初始化
;
; 使用SMALL存储器模式时再入函数的堆栈空间 .
IBPSTACK   EQU   0   ; 使用SMALL存储器模式再入函数时将其设置成1.
IBPSTACKTOP   EQU   0FFH+1   ; 将堆栈顶设置为最高地址+1.
;
; 使用LARGE存储器模式时再入函数的堆栈空间.; 使用LARGE存储器模式时再入函数的堆栈空间. 
XBPSTACK   EQU   0   ; 使用LARGE存储器模式再入函数时将其设置成1.
XBPSTACKTOP   EQU   0FFFFH+1; 将堆栈顶设置为最高地址+1.
;
; 使用COMPACT存储器模式时再入函数的堆栈空间.; 使用COMPACT存储器模式时再入函数的堆栈空间. 
PBPSTACK   EQU   0   ; 使用COMPACT存储器模式再入函数时将其设置成1.
PBPSTACKTOP   EQU   0FFFFH+1; 将堆栈顶设置为最高地址+1.
;
;------------------------------------------------------------------------------
;
; 使用COMPACT存储器模式时64K字节XDATA存储器空间的分页定义
;
; 以下用EQU指令定义PDATA类型变量在XDATA存储器空间的页地址
; 使用EQU指令定义PFAGE时必须与L51连接定位器PDATA指令的控制参数一致
;
PPAGEENABLE   EQU   0   ; 使用PDATA类型变量时将其设置成1.
PPAGE      EQU   0   ; 定义页号.
;
;------------------------------------------------------------------------------
NAME   ?C_STARTUP; 模块名为 ?C_STAUTUP
?C_C51STARTUP   SEGMENT   CODE      ; 代码
?STACK      SEGMENT   IDATA     ; 堆栈
RSEG   ?STACK      ; 堆栈
      DS   1
      EXTRNEXTRN CODE ((?C_START))   ; 程序开始地址
PUBLIC   ?C_STARTUP
CSEG   AT   0x8000 ; 定义用户程序的起始地址,用MON51仿真器时可能有用
?C_STARTUP:   LJMP   STARTUP1
RSEG   ?C_C51STARTUP
STARTUP1::
;
; 初始化串口
MOV     SCON,#40H
MOV   TMOD,#20H
MOV   TH1,#0fdH
SETB   TR1
CLR   TI 
; 单片机上电IDATA内存清零 如果不需要上电清零IDATA 可以注销IF到IFEDN之间的话句
; 或者修改IDTALEN的长度 为了具有掉电保护功能 不知IDTALEN多长为好
IF IDATALEN <> 0
MOV   R0,#IDATALEN - 1
CLR   A
IDATALOOP:   MOV   @R0,A
DJNZ   R0,IDATALOOP
ENDIF
;
; 单片机上电XDATA内存清零 如果不需要上电清零XDATA 可以注销IF到IFEDN之间的话句
; 或者修改XDATALEN的长度
IF XDATALEN <> 0
MOV   DPTR,#XDATASTART
MOV   R7,#LOW ((XDATALEN)
IF (LOW (XDATALEN) <> 0
MOV   R6,#(HIGH (XDATALEN) +1
ELSE
MOV   R6,,#HIGH ((XDATALEN)
ENDIF
CLR   A
XDATALOOP:   MOVX   @DPTR,A
INC   DPTR
DJNZ   R7,XDATALOOP
DJNZ   R6,XDATALOOP
ENDIF
;
; 送PDATA存储器页面高位地址
IF PAGEENABLE <> 0
MOV   P2,#PPAGE
ENDIF
;
; 单片机上电PDATA内存清零 如果不需要上电清零XDATA 可以注销IF到IFEDN之间的话句
; 或者修改PDATALEN的长度
IF PDATALEN <> 0
MOV   R0,#PDATASTART
MOV   R7,#LOW (PDATALEN)
CLR   A
PDATALOOP:   MOVX   @R0,A
INC   R0
DJNZ   R7,PDATALOOP
ENDIF
;
; 设置使用SMALL存储器模式时再入函数的堆栈空间.
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV   ?C_IBP,#LOW IBPSTACKTOP
ENDIF
;
; 设置使用LARGE存储器模式时再入函数的堆栈空间.
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV   ?C_XBP,#HIGH XBPSTACKTOP
MOV   ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
;
; 设置使用COMPACT存储器模式时再入函数的堆栈空间.
IF PBPSTACK <> 0
EXTRN DATA (C_PBP)
MOV   ?C_PBP,#LOW PBPSTACKTOP
ENDIF
;
; 设置堆栈的起始地址
MOV   SP,#?STACK-1   ; 例如 MOV SP,#4FH;

; This code is required if you use L51_BANK.A51 with Banking Mode 4
; 如果你的程序使用了Mode 4 程序分组技术 请启动下面的程序,不会吧你的程序超过64K 利害
; EXTRN CODE (?B_SWITCH0)
;               CALL    ?B_SWITCH0      ; init bank mechanism to code bank 0
;;                 程序从第一组bank 0 块开始执行
; 跳转到用户程序MAIN函数
LJMP   ?C_START
END
      ;lINSHENGFENG
关键字:Keil  C51  初始化代码  Startup.a51 引用地址:Keil C51初始化代码 Startup.a51的中文说明

上一篇:基于单片机控制的数控机床面板智能处理单元
下一篇:基于单片机的家居安防系统设计

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

STM32CubeMx(Keil5)开发之路——3发送USART数据和printf重定向
运行环境 Windows10 STM32CubeMX___Version 5.0.0 Keil5(MDK5)___Version 5.15 简介 本例程主要讲解如何通过串口发送数据和重定向printf STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—1配置第一个项目 STM32CubeMx USART1配置 1——点击USART1进行设置 2——模式选择Asynchronous异步传输 3——可以看到右边自动出现了Tx和Rx 4——可以自行设置波特率,停止位,校验位等参数 代码修改 1——选择main.c文件 2——在USER CODE中添加如下代码,重定向print
[单片机]
STM32CubeMx(<font color='red'>Keil</font>5)开发之路——3发送USART数据和printf重定向
HT1621驱动段式液晶的C51程序
/*========================================================================== HT1621动段式液晶的C51程序 HT1621是台湾Holtek公司推的段码LCD动控制芯片,同步串行接口,最多可以控制128段 驱动方式可选1/2、1/3、1/4 Duty和1/2、1/3 Bias。 供电电压为2.4~5.2V,无需外部振荡电路。简单易用。 以下是应用HT1621驱动的LCD模块串行模式的C51范例。 =============================================================================*/
[单片机]
c51编程中sbit sfr 用法
1 首先区分bit 和sbit bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。 sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。 sbit的用法有三种:   第一种方法:sbit 位变量名=地址值   第二种方法:sbit
[单片机]
C51编译器-语言扩展(2)-数据类型
Data Types数据类型 数据类型 位数 字节数 值域 bit 1 0-1 Signed char 8 1 -128-+127 Unsigned char 8 1 0-255 enum 8/16 1or 2 -128-+127 or -3
[单片机]
C51学习一)如何点亮led灯
1.找出C51最小系统原理图 在网上买的开发板,一定有光碟的,光碟中一定有原理图,先找出最小系统原理图,这个原理图标明了CPU的 I/O接口都接什么了。并且给I/O口都标上号 2.找出LED模块原理图 由下图可以看到,P1组I/O口的8个接口分别接着一个LED灯,并且当P1上的某个口为低电平时,LED就会亮。 3.进行编程 #include sbit LED0=P1^0; // 用自己写的标志 LED0 表示 I/O口 P1^0 sbit LED1=P1^1; void main() { LED0 = 0; //P1^0口给低电平 LED1 = 0; //P1^1口给低电平 while(1
[单片机]
(<font color='red'>C51</font>学习一)如何点亮led灯
蜂鸣器报警声C51程序
蜂鸣器报警声C51程序 #define uchar unsigned char //宏定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include //包括一个52标准内核的头文件 sbit BEEP=P0^7; //蜂鸣器输出脚 /******************************************************************** 函 数 名:main() 功 能:主程序 说 明: 入口参数:无 返 回 值:无 修 改: 日 期: *****************************************
[单片机]
Keil C51 之LST文件,类似MDK.map文件
展开 Keil C51编译器在编译程序时,会生成一个扩展名为LST的列表文件,也被称为listing file。 这个文件包含了有关编译过程的丰富信息,该文件由多个段组成,其中Symbol Listing 和 Module Information两个段对于用户分析调试程序尤其有用,下面按照各个段在 listing file中出现的先后顺序加以说明: 一、页头段(Page Header) 每个lst文件都有一个包含了编译器版本号、源文件名称、日期、时间、页号的头部。示例: C51 COMPILER V7.20 MEASURE 10/01/2004 14:05:05 PAGE 1 二、命令段
[单片机]
C51】单片机定时器介绍
标准51架构的单片机有2个定时器 :T0 和 T1,他们2个的用法几乎一样。下面主要讲T0定时器的用法。 初步认知 定时器 和 计数器 都是单片机中同一个模块。他们的实质都是: 加法存储计数器。对于计数器很好理解,每来一个信号(信号从P3.4 或者P3.5输入),就加1,以此达到计数的目的。 对于定时器,每隔1个机器周期 加 1,假如(只是假如)一个机器周期为 1ms , 当加到1000时,我们就认为经过了1s,这就是定时器的原理。 加法存储寄存器THx & TLx 定时器依赖计数,需要把累计增加的那个量存储在某个地方,这就是THx和TLx(x 可以是 0 或者1)2个8位寄存器的的职责。 T0和T1都拥有一对
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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