keil下C51启动代码详解

发布者:Wanderlust123最新更新时间:2016-11-18 来源: eefocus关键字:keil  C51  启动代码 手机看文章 扫描二维码
随时随地手机看文章

由于CPU和程序启动代码文件STARTUP.a51的重要性,一些8051派生的CPU产品要求初始化CPU来满足设计中的相应的硬件,因此,有时候用户需要对STARTUP.a51进行修改,所以进行注释一下:


;---------------------------------------------------
;startup.A51: 用户上电初始化程序
;----------------------------------------------------

;使用以下EQU命令可定义在CPU复位时需要用0进行初始化的内存空间

;IDATA存储器的空间的绝对起始地址总是零


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存储器模式时再入函数的堆栈空间
IBPSACK  EQU  0   ;使用SMALL存储器模式再入函数时将其设置成1
IBPSTACKTOP  EQU  0FFH+1    ;将堆栈顶设置为最高地址加1
;
;使用LARGE存储器模式时再入函数的堆栈空间
XBPSTACK  EQU  0     ;使用LARGE存储器模式再入函数时将其设置成1
XBPSTACKTOP  WQU  0FFFFH+1     ;将堆栈顶设置为最高地址加1
;
;使用COMPACT存储器模式时再入函数的堆栈空间
PBPSTACK  EQU  0     ; 使用COMPACT存储器模式再入函数时将其设置成1
PBPSTACKTOP  WQU  0FFFFH+1     ;将堆栈顶设置为最高地址加1
;;----------------------------------------------------
;使用COMPACT存储器模式时,64KB X DATA存储器空间的分页定义
;
;以下用EQU指令定义PDATA类型变量在XDATA存储器空间的页地址
;使用EQU指令定义PFAGE时必须与L51连接定位器PDATA指令的控制参数一致
;
PPAGEENABLE  EQU  0     ;使用PDATA类型变量时将其设置成1
PPAGE  EQU  0      ;定义页号
;
;------------------------------------------------
NAME  ? C_STARTUP   ;模块名为 ? C_STARTUP
? C_51STARTUP  SEGMENT CODE     ;代码段
? STACK  SEGMENT IDATA      ;堆栈段
RSEG  ? STACK              ;堆栈
DS 1
EXTRN COE(? C_START)          ;程序开始地址
PUBLIC ? C_STARTUP
CSEG AT 0x8000                 ;定义用户程序的起始地址,用MON51仿真器时可能有用
? C_STARTUP: LFMP STARTUP1
RSEG  ? C_51STARTUP
STARTUP1:
;
;初始化串口
MOV SCOM, #40H
MOV TMOD, #20H
MOV TH1, #0FDH
SETB TR1
CLR T1
;单片机上电IDATA内存清零,如果不需要上电清零IDATA,可以注销IF到IFEDN之间的
;语句,或者修改IDTALEN的长度,为了让CPU具有掉电保护功能,需要确定IDTALEN的长度
IF IDATALEN <> 0
MOV R0, # IDATALEN-1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
;
;单片机上电XDATA内存清零,如果不需要上电清零XDATA,可以注销IF到IFEDN之间的
;语句,或者修改XDTALEN的长度
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
END IF
;
;送PDATA存储器页面高位地址
IF PPAGEENABLE <> 0
MOV P2, #PPAGE
ENDIF
;
;单片机上电PDATA内存清零,如果不需要上电清零XDATA,可注销IF到IFEDN之
;间的语句或者修改PDATALEN的长度
IF PDATALEN <> 0
MOV R0, #PDATASTART
MOV R7, #LOW (PDATALEN)
CLR A
PDATALOOP: MOV @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
END IF 
;
;设置堆栈的起始地址
MOV SP, #? STACK-1           ;例如 MOV SP, #4FH
;
;如果程序超过64K,则使用程序分组技术,启动下面的程序
;EXTRN CODE(? B_SWITCH0)
;CALL ? B_SWITCH0
;程序从第一组bank 0 块开始执行
;跳转到用户程序MAIN函数
LJMP ? C_START
END


关键字:keil  C51  启动代码 引用地址:keil下C51启动代码详解

上一篇:keil c文件中加入汇编方法
下一篇:基于单片机的modbus例程详细

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

LPC2000系列ARM启动代码(startup部分)
;定义堆栈的大小 SVC_STACK_LEGTH EQU 0 FIQ_STACK_LEGTH EQU 0 IRQ_STACK_LEGTH EQU 256 ABT_STACK_LEGTH EQU 0 UND_STACK_LEGTH EQU 0 NoInt EQU 0x80 ;禁止IRQ中断 NoFIQ EQU 0x40 ;禁止FIQ中断 USR32Mode EQU 0x10 ;ARM的各种工作模式 SVC32Mode EQU 0x13 SYS32Mode EQU 0x1f
[单片机]
KEIL5中的options for Target
1.Target 主要介绍工程目标的调试晶振频率、选择的编译器、RAM和ROM分配的地址空间等! 1.晶振频率: 这个晶振主要是用于仿真调试 2.Use Cross-Module Optimization(一般我们不打勾): 作用一:不针对库目标执行跨模块优化。 作用二:跨模块优化将增加构建项目所需的时间,因为会自动执行多个编译和链接步骤。 Use MicroLIB(打勾): 使用微库它是ISO标准C运行时库的子集(其中一部分),提供了性能和代码大小之间的权衡。 微库并不完全兼容ANSI,但对于大多数小型嵌入式应用程序来说已经足够了。微库这个功能常用与printf函数 3.ROM存储地址 : Flash(ROM)=
[单片机]
<font color='red'>KEIL</font>5中的options for Target
Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写
前言 功能: 通过SPI读写SD卡/TF卡上的文件系统 支持FAT16, FAT32, exFAT, 即FatFs所支持的文件格式. 支持存储卡容量512MB至64GB, 更高容量未测试 实现基于 STM32CubeMX, STM32F4 v1.26.2 FatFs, R0.12C(STM32CubeMX内建版本) 大部分参考自STM32Cube配置SPI读sd卡 https://controllerstech.com/sd-card-using-spi-in-stm32/ 视频 https://www.youtube.com/watch?v=spVIZO-jbxE 项目代码 https://github.co
[单片机]
<font color='red'>Keil</font> MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写
单片机c语言教程:C51常量
上一篇学习了 KEIL c 单片机c语言 编译器所支持的数据类型。而这些c51数据类型又是怎么用在常量和变量的定义中的呢?又有什么要注意的吗?常量就是在程序运行过程中不能改变值的量,而变量是能在程序运行过程中不断变化的量。变量的定义能使用所有c51编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。这一篇学习常量定义和使用方法,而下一篇则学习单片机c语言的变量。 常量的数据类型说明是这样的 1. 整型常量能表示为十进制如 123,0,-89 等。十六进制则以 0x 开头如 0x34,-0x3B 等。长整型就在数字后面加字母 L,如 104L,034L,0xF340 等。 2. 浮点型常量可分为
[单片机]
单片机c语言教程:<font color='red'>C51</font>常量
C51单片机延时时间的计算方法解析
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsignedchar类型具有比unsignedint更优化的代码,在使用时应该使用unsignedchar作为延时变量。以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一.500ms延时子程序 程序: voiddelay500ms(void) { unsignedchari,j,k; for(i=15;i》0;i--) for(j=202;j》0;j--) for(k=81;k》0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2=81*2=162usDJNZ2us 二层循环m:R6*(n+3)=202*165=333
[单片机]
lcd液晶12232F的串口C51程序(ST7920)
由于12232F这个显示器用得比较平常,但平常见到的是一些并口的汇编程序,并且也没有对应于12232F的并口程序,串口的C51程序极少见,为了方便大家使用,所以本站把它调试了一个出来,大家多多指教! /******************************************************/ /* */ /* 12232F串口驱动程序C51,11.0592M晶振 */ /*使用这款LCD应该要注意的问题: */ /*一定要在VO与VDD及VSS这三个脚间接一个20K的电位器, */ /*电位器的中间脚接VO,其它二脚接VDD和VSS。 */ /*然后调节电位器的大小,直到有显示为止。若是不接的话,
[单片机]
如何学习51单片机/心得/KEIL4/DXP
什么是单片机 学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 有人觉得要先学汇编。不过我个人觉得,学习51单片机,还是从C语言入手,一来方便,二来容易上手,仁者见仁,智者见智吧。 关于学习51单片机的书籍,市场上有很多,大家可以择优选取。 那么,如何用程序控制单片机的呢? 我开始学单片机的时候也曾有过这样的困惑啊,ok,下面帮大家整理一下思路。 怎么在Keil里写程序?keil怎么安装破解? 用过VC6.0的同学都知道,VC6.0是一个编译环境。什么是编译环境?简单地说,就是你写代码的地方。 那么,同理,单片机的编译环境就是Ke
[单片机]
如何学习51单片机/心得/<font color='red'>KEIL</font>4/DXP
c51单片机中断号及中断向量
1、外部中断 0、 1;分别由引脚/INT0、/INT1的电平信号引起。 2、定时/计数器 0、1;分别由T0、 T1的溢出引起。 3、串行口发送、接收;发送完一个字节或接收到一个字节引起。 上述共5个中断源。 一、中断号 外部中断0 0 定时器T0 1 外部中断1 2 定时器T1 3 串口中断 4 二、 interrupt 和 using 在C51中断中的使用 8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个
[单片机]
<font color='red'>c51</font>单片机中断号及中断向量
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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