1.启动文件的编制
$ NOMOD51 ;Ax51宏汇编器控制命令:禁止预定义的8051
;自定义上电后需要初始化的储存区域
;间接寻址区IDATA起始地址固定为0
IDATALEN EQU 8OH ;指定需要初始化的IDATA区长度(以字节为单位)
XDATASTART EQU OH ;需要初始化的外部直接寻址区XDATA的起始地址
XDATALEN EQU OH ;指定需要初始化的XDATA区长度(以字节为单位)
PDATASTART EQU OH ;指定需要初始化的页寻址区PDATA起始地址
PDATALEN EQU OH ;指定需要初始化的PDATA区长度(以字节为单位)
;重入堆栈初始化,下面的EQU语句定义并初始化重入函数的堆栈指针
;SMALL模式下重入函数的堆栈空间
IBPSTACK EQU O ;SMALL模式下使用重入则设为1
EBPSTACKTOP EQU OFFH+1 ;设置堆栈顶为最高位置+1
;LARGE模式下重入函数的堆栈空间
XBPSTACK EQU O ;LARGE模式下使用重入则设为1
XBPSTACKTOP EQU OFFFFH+1 ;设置堆栈顶为最高位置+1
;COMPACT模式下重入函数的堆栈空间
PBPSTACK EQU O ;COMPACT模式下使用重入则设为1
PBPSTACKTOP EQU OFFFFH+1 ;设置堆栈顶为最高位置+1
;使用COMTACT模式是为64KB的XDATA RAM定义页
PPAGEENABLE EQU O ;使用PDATA也则设为1
PPAGE EQU O ;定义页号
PPAGE_SFR DATAOAOH ;SFR的最高地址字节
;标准SFR符号
ACC DATA OEOH
B DATA OFOH
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
;******************************************************************************
NAME ? C_STARTUP
C_C51STARTUP SEGMENT CODE
STACK SEGMENT IDATA
RSEG ? STACK
DS 1
EXTRN CODE ( ? C_STAR ;外部代码(这个标号将代表用户程序的起始地址)
PUBLIC ? STARTUP ;给外部使用的符号
CSEG AT O ;在code段0地址处放以下代码(绝对地址定位)
?C_STARTUP:
LJMP STARTUP1
RSEG ? C_C51STARTUP
STARTUP1:
IF IDATALEN <> ;若长度大于1,则初始化IDATA
MOV RO,# IDATALEN-1
CLR A
IDATALOOP:
MOV @RO,A
DJNZ RO,IDATALOOP
ENDIF
IF XDATALEN <> 0 ;若长度大于1,则初始化XDATA
MOV DPTR,# XDATASTART
MOV R7; # LOW (XDATALEN)
IF (LOW(XDATALEN)) <> 0 ;预置初始化的外循环次数为R6
MOV R6;# (HIGH (XDATALEN ) )+1
ELSE MOV R6;# HIGH (XDATALEN )
ENDIF
CLR A
XDATALOOP:
MOVX @DPTA,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV PPAGE_SFR, # PPAGE
ENDIF
IF PDATALEN <> 0 ;若长度大于1,则初始化PDATA
MOV R0, # LOW (PDATASTART)
MOV R7, # LOW (PDATALEN)
CLR A
PDATALOOP:
MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0 ;SMALL模式下使用重入函数是要设置的堆栈
EXTRN DATA ( ? C_IBP)
MOV ? C_IBP ,# LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0 ;COMPACT模式下使用重入函数是要设置的堆栈
EXTRN DATA ( ? C_XBP)
MOV ? C_XBP,# HIGH XBPSTACKTOP
MOV ? C_XBP + 1,# HIGH XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0 ;LARGE 模式下使用重入函数是要设置的堆栈
EXTRN DATA ( ? C_PBP)
MOV ? C_PBP, # LOW PBPSTACKTOP
ENDIF
MOV SP,# ? STACK – 1
;如果使用了Mode 4 程序分组技术 ( BANKING )请启用下面的程序代码
; CALL ? B_SWITCHO ;程序从第一个块 (bank0)开始执行
LJMP ? C_START ;从这里跳到C程序入口
END
2.主程序的文件构架:
# include “main.h”
void Project_Init(void) /该函数初始化微控制器
{
USART_vInit(); //初始化异步串行接口器件
T01__vInit(); //初始化定时器T0和T1
INT__vInit(); //初始化外部触发中断ET0、ET1
上一篇:MCS-51单片机定时器/计数器常见习题解答
下一篇:最后一页
设计资源 培训 开发板 精华推荐
- 用于工厂自动化的 14 位、100KSPS、4CH DAC
- 使用 ON Semiconductor 的 KA7805E 的参考设计
- 用于仪表的 12 位、32 通道 DAC
- 使用 Infineon Technologies AG 的 OMR9604SF 的参考设计
- TCR2LN21 200mA、2.1V输出电压CMOS低压降稳压器的典型应用
- STEVAL-IKR002V3D、SPIRIT1 433-MHz 低数据速率收发器子板
- AD5323 双轨至轨电压输出、12 位 DAC 的典型应用
- STEVAL-ISA135V1、4W、12V 输出、隔离式反激转换器评估板,基于 VIPer Plus - VIPER06HS
- 12V转5V_BUCK降压电路模块
- LTC3130IUDC 5V 转换器的典型应用在收集能量的打嗝式模式下运行
- 安世半导体&世平集团 高效能&小型化, Nexperia MOSFET的5G解决方案 观看、下载 闯关赢好礼!
- 畅想十二月,设计我自己的EEWORLD!
- NI 全联结峰会2024 — 共赢智能测试未来,火热报名中!
- 填问卷,解锁赢好礼!看泰克MDO4000C如何进行电源分析!
- ams圣诞礼物大作战:扫码、关注、玩游戏、赢礼!
- TI模电选课测试体验活动第二期!模电怎么学?TI帮你订制课程清单~
- MPS EMI 知识充电节盛大开启!赚积分赢好礼!
- EEWorld 2018年度最具影响力网友评选
- 直播已结束【用于光伏逆变器/储能系统的欧姆龙继电器 /开关/连接器解决方案】
- TI带你一起解剖共享单车智能锁!看视频涨知识赢好礼喽!