原标题:C51单片机头文件和启动文件

STARTUP.A51// . 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main函数

//特殊寄存器的字节地址和位地址,定义字节变量、sbit定义位变量,用通俗名作为变量名,并赋地址值,从而用名称来使用这些特殊寄存器。

//定义了一些外部函数,在中,INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便.

/*--

REG51.H

Header file for generic 80C51 and 80C31 microcontroller.

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--*/

#ifndef __REG51_H__

#define __REG51_H__

/* BYTE Register */

sfr P0 = 0x80;

sfr P1 = 0x90;

sfr P2 = 0xA0;

sfr P3 = 0xB0;

sfr PSW = 0xD0;

sfr ACC = 0xE0;

sfr B = 0xF0;

sfr SP = 0x81;

sfr DPL = 0x82;

sfr DPH = 0x83;

sfr PCON = 0x87;

sfr TCON = 0x88;

sfr TMOD = 0x89;

sfr TL0 = 0x8A;

sfr TL1 = 0x8B;

sfr TH0 = 0x8C;

sfr TH1 = 0x8D;

sfr IE = 0xA8;

sfr IP = 0xB8;

sfr SCON = 0x98;

sfr SBUF = 0x99;

/* BIT Register */

/* PSW */

sbit CY = 0xD7;

sbit AC = 0xD6;

sbit F0 = 0xD5;

sbit RS1 = 0xD4;

sbit RS0 = 0xD3;

sbit OV = 0xD2;

sbit P = 0xD0;

/* TCON */

sbit TF1 = 0x8F;

sbit TR1 = 0x8E;

sbit TF0 = 0x8D;

sbit TR0 = 0x8C;

sbit IE1 = 0x8B;

sbit IT1 = 0x8A;

sbit IE0 = 0x89;

sbit IT0 = 0x88;

/* IE */

sbit EA = 0xAF;

sbit ES = 0xAC;

sbit ET1 = 0xAB;

sbit EX1 = 0xAA;

sbit ET0 = 0xA9;

sbit EX0 = 0xA8;

/* IP */

sbit PS = 0xBC;

sbit PT1 = 0xBB;

sbit PX1 = 0xBA;

sbit PT0 = 0xB9;

sbit PX0 = 0xB8;

/* P3 */

sbit RD = 0xB7;

sbit WR = 0xB6;

sbit T1 = 0xB5;

sbit T0 = 0xB4;

sbit INT1 = 0xB3;

sbit INT0 = 0xB2;

sbit TXD = 0xB1;

sbit RXD = 0xB0;

/* SCON */

sbit SM0 = 0x9F;

sbit SM1 = 0x9E;

sbit SM2 = 0x9D;

sbit REN = 0x9C;

sbit TB8 = 0x9B;

sbit RB8 = 0x9A;

sbit TI = 0x99;

sbit RI = 0x98;

#endif

/*--

INTRINS.H

Intrinsic functions for C51.

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--*/

#ifndef __INTRINS_H__

#define __INTRINS_H__

extern void _nop_ (void);

extern bit _testbit_ (bit);

extern unsigned char _cror_ (unsigned char, unsigned char);

extern unsigned int _iror_ (unsigned int, unsigned char);

extern unsigned long _lror_ (unsigned long, unsigned char);

extern unsigned char _crol_ (unsigned char, unsigned char);

extern unsigned int _irol_ (unsigned int, unsigned char);

extern unsigned long _lrol_ (unsigned long, unsigned char);

extern unsigned char _chkfloat_(float);

#endif

关于sfr、sbit://如同int、char...

sfr 似乎不是标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新的关键词,其用法是:sfrt 变量名=地址值。

例:sfr P1 = 0x90;

这样的一行即定义P1 与地址0x90 对应,P1 口的地址就是0x90.

SFR的定义在头文件reg51.h或reg52.h中。

在C51里,利用sbit可访问RAM中可寻址位或SFR中可寻址位。

如果直接写P1.0,C 编译器并不能识别,而且P1.0 也不是一个合法的C语言变量名,所以得给它另起一个名字,比如P1_0,可是P1_0 是不是就是P1.0呢?C 编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C的关键字sbit 来定义,sbit 的用法有三种:

第一种方法:sbit 位变量名=地址值

第二种方法:sbit 位变量名=SFR 名称^变量位地址值

第三种方法:sbit 位变量名=SFR 地址值^变量位地址值

例如,定义P1 中的P1.1脚可以用以下三种方法:

sbit P1_1=0x92 (1)说明:0x92是P1.1 的位地址值

sbit P1_1=P1^1 (2)说明:其中P1必须先用sfr 定义好

sbit P1_1=0x90^2 (3)说明:0x90 就是P1的地址值

因此这里用sfr P1_0=P1^0;就是定义用符号P1_0 来表示P1.0 引

sfr 是定义8 位(范围0~255)的特殊功能寄存器而sfr16 则是用来定义16 位特殊功能寄存器, 如8052 的T2 定时器,可以定义为:

sfr16 T2 = 0xCC; //这里定义8052 ,地址为T2L=CCH,T2H=CDH

在KEIL中,汇编是从ORG H开始启动,那么它在C51中是如何启动MAIN()函数的呢?实际上是C51中有一个启启动程序STARTUP.A51,它总是和C程序一起编译和链接的.

启动文件STARTUP.A51中包含目标板启动代码,可在每个project中加入这个文件,只要复位,则该文件立即执行,其功能包括:

z 定义内部RAM大小、外部RAM大小、可重入堆栈位置

z 清除内部、外部或者以此页为单元的外部存储器

z 按存储模式初使化重入堆栈及

z 初始化8051硬件堆栈指针

z 向main( )函数交权

开发人员可修改以下数据从而对系统初始化

常数名 意义

IDATALEN 待清内部RAM长度

XDATA START 指定待清外部RAM起始地址

XDATALEN 待清外部RAM长度

IBPSTACK 是否小模式重入堆栈指针需初始化标志,1为需要。缺省为0

IBPSTACKTOP 指定小模式重入堆栈顶部地址

XBPSTACK 是否大模式重入堆栈指针需初始化标志,缺省为0

XBPSTACKTOP 指定大模式重入堆栈顶部地址

PBPSTACK 是否Compact重入堆栈指针,需初始化标志,缺省为0

PBPSTACKTOP 指定Compact模式重入堆栈顶部地址

PPAGEENABLE P2初始化允许开关

PPAGE 指定P2值

PDATASTART 待清外部RAM页首址

经常可能需要修改的地方:(红色)

XDATASTART EQU 0H ; the absolute start-address of XDATA memory

XDATALEN EQU 0H ; the length of XDATA memory in bytes.

XBPSTACK EQU 0 ; set to 1 if large reentrant is used.

XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.

PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.

PPAGE EQU 0 ; define PPAGE number.

当在kiel C中新建项目时,会问: Copy standard 8051 Starup Code to Project Forder an dd file to Project? 翻译为:8051启动代码到项目并和添加文件到项目? 其实无论您选是还是否,您的代码中都将包含该文件。 该文件的作用是 初始化 内外部 RAM使其清零,另外还初始化SP等。 如果上述提示框您选否,对哪些RAM清零将采用默认的方式。 如果您想改变RAM清零区域(假如希望复位时某些RAM不被清零时会很有用。),您可以选是,这样该文件的一个副本将添加到您的项目,您可以根据需要改写此文件。 其他SP,SAMLL/COMPACT、LARGE模式的重入函数的堆栈和指针的初始化等和RAM的道理是一样的。

责任编辑:

51 单片机 建立 文本文件_C51单片机头文件和启动文件相关推荐

  1. 51 单片机 建立 文本文件_51单片机KEIL如何建立多个C文件及注意事项

    1如何建立多个C文件 首先,我们需要一个新文档,这个文档的建立有两种方法(以delay1s函数为例).第一种,在工程目录下建立一个delay1s.txt然后将其改名为delay1s.h.因为都是同编码 ...

  2. python启动文件_Python启动文件配置

    #-*- coding:utf-8 -*- ''' python一键启动服务器--所有部署的项目 ''' import paramiko import configparser import time ...

  3. c语言读renix文件程序,启动文件hekate如何修改才能够加载debug模式并进入renix

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.nsdebugger.kip放到以下两个路径下 /modules/required /ReiNX/sysmodules 2.NSwitchDebugg ...

  4. 华大单片机如何向MDK中加入头文件和库文件

    华大单片机如何向MDK中加入头文件和库文件 关键文件介绍 加入头文件 大多数习惯于8位单片机开发的工程师,都会使用操作寄存器的方式来使用单片机.当初次接触华大单片机库开发的时候,会发现库里有好多的文件 ...

  5. STM32的2.02固件库提供的启动文件详解 stm32f10x_vector.s

    当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点--因为C程序往往从main函数开始执行.但一个经常会被忽略的问题是:微控制器(单片 ...

  6. startup_LPC17XX.s 启动文件分析

    startup_LPC17XX.s 启动文件分析 工程中startup_LPC17XX.s是M3的启动文件,启动文件由汇编语言写的,它的作用一般是下面这几个: 1)堆和栈的初始化 2)中断向量表定义 ...

  7. STM32启动文件代码解析

    目录 启动流程 代码详解 启动文件使用的 ARM 汇编指令汇总 关于与启动文件有关的一些问题思考 下面是F1固件库V3.5.0的启动文件startup_stm32f10x_hd.s,以此为例做解析,其 ...

  8. 秉火429笔记之四启动文件分析

    名为"startup_stm32f429_439xx.s"的文件,它里边使用汇编语言写好了基本程序,当STM32芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起C语言的运行 ...

  9. keil创建无启动文件及自定义.sct文件的工程

    需求背景:在Cortex-M0/M4处理器中实现主程序常驻ROM,子程序动态加载到RAM中运行. 由于Cortex-M0/M4处理器没有MMU,很难像带MMU的处理器那样给程序划分虚拟地址,实际上只能 ...

最新文章

  1. 智能车竞赛技术报告 | 智能车视觉 - 太原工业学院 - 晋速-轩辕星
  2. 如何实现每个周期4个FLOP的理论最大值?
  3. mysql查询优化技巧
  4. 重新初始化k8s master节点
  5. leetcode 398. Random Pick Index | 398. 随机数索引(Java)
  6. QT: 使用qtchooser修改ubuntu默认的qmake版本
  7. java exception信息_可能通过Java Exceptions暴露敏感信息?
  8. 2022最新手机号码正则
  9. charles 请求出现乱码_解决Charles抓取https报文乱码问题
  10. 星起航跨境:美国市场8月份在线价格同比上涨0.4%
  11. 整理最全的图床集合——三千图床
  12. html文本框背景text怎么变透明,css怎么设置背景图片透明文字不透明?
  13. redis 键值占用内存分析 RDR(Redis Data Reveal)
  14. 调试大普RTC芯片驱动-ins5699s
  15. Apache Impala —— 3.4.0版本官方文档百度网盘下载链接
  16. 命令行批量删除带某关键字的文件
  17. 实验吧--天下武功为快不破
  18. 千万级支付对账系统怎么玩(上篇)?
  19. 伪元素的本质,以及伪元素的妙用(下)
  20. (FLANN论文)fast approximate nearest neighbors with automatic algorithm configuration——中英对照翻译

热门文章

  1. 虾米电台+SOSO音乐+奇艺影视+在线图片处理+快递查询
  2. john and hydra using de-ice1.100
  3. 如何删除图片数据中的重复数据
  4. @NotNull和@NonNull的区别和使用
  5. 电火花线切割编程软件EDMCAD软件源码
  6. qt web混合编程_Qt / Web 混合编程
  7. 【一天一门编程语言】Go 语言程序设计极简教程
  8. DB2数据库UTF-8字符集的汉字占3个字节
  9. python怎么画折线图
  10. 局域网下opencv调用摄像头