51系列单片机的头文件_单片机程序编写软件

51系列单片机的头文件_单片机程序编写软件C51单片机头文件和启动文件原标题:C51单片机头文件和启动文件STARTUP.A51// . 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main函数<reg51.h> //特殊寄存器的字节地址和

C51单片机头文件和启动文件   原标题:C51单片机头文件和启动文件   STARTUP.A51// . 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main函数   <reg51.h> //特殊寄存器的字节地址和位地址,定义字节变量、sbit定义位变量,用通俗名作为变量名,并赋地址值,从而用名称来使用这些特殊寄存器。   <intrins.h> //定义了一些外部函数,在中,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的道理是一样的。   原文链接:返回搜狐,查看更多   责任编辑:

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/72324.html

(0)
上一篇 2024年 8月 6日
下一篇 2024年 8月 6日

相关推荐

关注微信