通过Keil编译器建立工程时,Keil会提示是否添加STARTUP.A51文件到工程,该文件即为51单片机启动代码。
51单片机复位后马上执行STARTUP.A51文件中的启动代码,根据启动代码中的设置依次执行以下操作:
内部RAM清零
外部RAM清零
清零分页的外部RAM
初始化SMALL内存模型的可重入模拟堆栈及其堆栈指针
初始化LARGE内存模型的可重入模拟堆栈及其堆栈指针
初始化COMPACT内存模型的可重入模拟堆栈及其堆栈指针
初始化8051单片机的硬件堆栈指针
将系统控制权转交给初始化全局变量的代码,如果没有被初始化的全局变量则转交给C程序文件中的main函数。
STARTUP.A51启动文件中定义了一些常量,修改这些常量可以控制单片机复位时执行的动作:
1、IDATALEN
指定idata区需要清零的字节数。默认值为80H,这是由于8051系列单片机都包含至少128字节内部ram。对于8052系列单片机或者其他系列具有256字节内部ram的,可以将此值改为100H。
2、XDATASTART
指定外部ram需要清零的区域起始地址。
3、XDATALEN
指示xdata区需要清零的字节数,默认值为0.。
4、PDATASTART
指示需要清零的pdata区起始地址。
5、PDATALEN
指示pdata区需要清零的字节数,默认值为0。
6、IBPSTACK
指示是否初始化small内存模型的可重入模拟堆栈指针(?C_IBP)。默认值为0,不初始化该指针。值设为1,编译器将初始化该指针。
7、IBPSTACKTOP
指示small内存模型下可重入堆栈栈顶。默认值为idata区的0xff。该堆栈区是否可用完全由用户负责,编译器并不会帮助检查该地址指定的堆栈区是否与程序使用的ram、硬件堆栈存在冲突。
8、XBPSTACK
指示是否初始化large内存模型的可重入堆栈指针(?C_XBP)。默认值为0,不初始化该指针。值设为1,编译器将初始化该指针。
9、XBPSTACKTOP
指示large内存模型的可重入堆栈栈顶。默认值为xdata区的0xffff。该值指定的区域是否与程序使用的ram、硬件堆栈冲突由用户负责。编译器不做检查。
10、PBPSTACK
指示是否初始化compact内存模型的可重入堆栈栈指针(?C_PBP)。默认值为0,不初始化该指针。值设为1,编译器将初始化该指针。
11、PBPSTACKTOP
指示compact内存模型可重入堆栈栈顶。默认值为pdata区的0xff。该区域选择是否合理完全由用户负责,编译器不做检查。
12、PPAGEENABLE
该值决定是否初始化Port 2的值,以便pdata区寻址。默认值为0,不初始化Port 2。pdata寻址使用Port 2的值作为地址的高字节。
13、PPAGE
指示对Port 2 设置的值,用于pdata寻址时作为地址高字节。例如,pdata区起始位置为xdata区的0x1000,则PPAGEENABLE应该设为1,并且PPAGE应该设为0x10。
关键字:51单片机 启动代码 STARTUP A51
引用地址:
51单片机启动代码:STARTUP.A51
推荐阅读最新更新时间:2024-03-16 16:06
什么是指令 51单片机共有多少指令
所谓 指令 ,就是规定计算机进行某种操作的命令。 一条指令只能完成有限的功能,为使计算机完成一定的或者复杂的功能,就需要一系列指令。一般来说,一台计算机的指令越丰富,寻址方式越多,且每条指令的执行速度越快,则它的总体功能就越强。 我们学习的80C51单片机共有111条指令,这111条指令共有七种寻址方式。其中: 数据传送类指令 29条 算术运算类指令 24条 逻辑运算及移位类指令 24条 控制转移类指令 17条 位操作指令 17条 这111条指令的具体功能我们在后面的课程中将会逐条的与大家进行分析。
[单片机]
基于51单片机的两路温度控制器的设计方案
1.引言 目前,温度控制器存在的问题是如何缩减成本,减少功耗,温度测量的准确性和多路温度的同时显示。本方案设计的实现基于C51单片机的两路温度控制器,做到成本最低化,精确度高,两路温度的显示和控制,能在温度超出设定的最高温度时启动电风扇进行降温,在温度低于设定的最低温度时启动蜂鸣器报警,能够用户设定最高最低温。 2.系统结构 温度控制器系统包括以下几个主要部分:温度传感器,报警电路,LED显示电路,键盘控制,89C51控制部分。如图所示: 本系统设计实现:启动温度控制器后,绿灯亮起,四位LED数码显示器上前两位为温度传感器1所测的环境温度,后两位为温度传感器2所测的环境温度。 3.硬件结构
[单片机]
51单片机与PC串口通信程序
#include reg51.h #define BUFFERLEGTH 10 //----------------------------------------------------------------- void UART_init(); //串口初始化函数 void COM_send(void); //串口发送函数 char str ; char j; //------------------------------------------------------------------- void main(void) { unsigned char i; UART_init(); j=
[单片机]
8051单片机串行口及串行通信
一、串行通信的基础知识 CPU与其他外部设备要进行信息交换,一台计算机与其他计算机之间有时也要交换信息,这些信息交换就称为通信。通信有并行通信和串行通信两种。 1、并行通信 并行通信是将数据字节的各位用多条数据线同时进行传送。 并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接受存在困难。 2、串行通信 串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。 串行通信传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制要比并行通信复杂。 串行通信又可以分为异步通信与同步通信。 1)异步通信 异步通信是指通信的发送设备与接
[单片机]
51单片机特殊功能寄存器有哪些_功能是什么
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。 51单片机特殊功能寄存器 1、21个寄存器介绍 51系列单片机内部主要有四大功能模块,分别是I/O口模块、中断模块、定时器模块和串口通信模块(串行I/O口
[单片机]
51单片机(入门保姆级教程)——点亮一个LED灯
一、为什么要学习单片机? 作为一名工科学生,进入大学参加各种活动,例如:电子设计大赛、寻迹车比赛、LED电子灯比赛以及各种各样的微控、弱控强电路等,都离不开单片机的身影。电路、c语言、数电、模电、计算机控制等知识的学习,给单片机的学习增添了软辅助,但我认为,学习单片机更多的是自己的兴趣、爱好,正如“程序虐我千百遍,我视程序为初恋”。 此外,学习单片机知识,从最基础的51单片机入门学习,可以为我们后面学习STM32、ARM微控器等其微控制器的学习奠定知识基础和积攒一定的经验,给自己的大学及以后的职业道路增加一丝色彩。 二、首先了解什么是单片机? 单片机又称单片微控制器,把一整个计算机系统集成到一个芯片上,当于一个微型的计算机,和计算
[单片机]
C51单片机学习笔记之矩阵键盘
简介 矩阵键盘一般为4×4或4×3的。矩阵键盘的判断方式分按行扫描和按列扫描。 简单说就是给全体一个高电平,然后给一个按键的一端附上低电平,再判断另一端是否为低电平。 原理图 代码部分 #include void delay()//延时函数 { unsigned int i; for(i=0;i 30000;i++); } unsigned char MatrixKey() { unsigned char KeyNumber;//定义一个返回值 P1=0xFF;//全体给高电平 P1_0=0;//一端给低电平 if(P1_4==0)//判断另一端是否为低电平 { delay(); while(P1
[单片机]
基于C8051单片机和FPGA实现导纳测量仪的系统设计
虚拟仪器的广泛应用,使得用户可以根据需求,设计自己的仪器系统。无源网络导纳测量仪即是虚拟仪器设计思想的一种具体运用,旨在实现对端口网络的导纳进行自动测量。测量仪是以C8051单片机为控制和处理核心,采用可编程逻辑器件EPF10K10,根据DDS原理产生信号源,将信号源连接到待测的网络上,对网络两端的电压和电流进行差分放大,使其输出电压尽可能达到ADC的最大输入电压,然后进行A/D采样,采样时,频率随信号频率而改变,一个周期内固定采32个点,用单片机的P1、P2直接接收数据,边采样边接收。对采样所得的电流、电压数据进行快速傅立叶变换(FFT),并分别求出其模值和相位,则导纳的模值为电流模值与电压模值之比,相位为电流与电压的相位之差。
[单片机]