历史上的今天
返回首页

历史上的今天

今天是:2025年01月05日(星期日)

正在发生

2018年01月05日 | C51在程序设计中的头文件用法

2018-01-05 来源:eefocus

我们在用c语言编程是往往第一行就是reg51.h或者其他的自定义头文件,我们怎么样来理解呢?

1)“文件包含”处理。

程序的第一行是一个“文件包含”处理。

所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来。程序中包含REG51.h

文件的目的是为了要使用P1 (还有其他更多的符号)这个符号,即通知C 编译器,程序中所写的P1 是指80C51单片机的P1 端口而不是其它变量。这是如何做到的呢?

打开reg51.h 可以看到这样的一些内容:

(此文件一般在C:\KEIL\C51\INC下 ,INC文件夹根目录里有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。如果我们要使用自己写的头文件,使用的时候只需把对应头文件拷贝到INC文件夹里就可以了。)

/*--------------------------------------------------------------------------

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


熟悉80C51 内部结构的读者不难看出,这里都是一些符号的定义,即规定符号名与地

址的对应关系。注意其中有

sfr P1 = 0x90;

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

(0x90 是C 语言中十六进制数的写法,相当于汇编语言中写90H)。

从这里还可以看到一个频繁出现的词:sfr

sfr 并非标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新

的关键词,其用法是:

sfrt 变量名=地址值。


2)符号P1_0 来表示P1.0 引脚。

在C 语言里,如果直接写P1.0,C 编译器并不能识别,而且P1.0 也不是一个合法的C

语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0 是不是就是P1.0

呢?你这么认为,C 编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C

的关键字sbit 来定义,sbit 的用法有三种:

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

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

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

如定义PSW 中的OV 可以用以下三种方法:

sbit OV=0xd2 (1)说明:0xd2 是OV 的位地址值

sbit OV=PSW^2 (2)说明:其中PSW 必须先用sfr 定义好

sbit OV=0xD0^2 (3)说明:0xD0 就是PSW 的地址值

因此这里用sfr P1_0=P1^0;就是定义用符号P1_0 来表示P1.0 引脚,如果你愿意也可以

起P10 一类的名字,只要下面程序中也随之更改就行了。



下面再附上reg52.h的头文件内容:

/*--------------------------------------------------------------------------

REG52.H


Header file for generic 80C52 and 80C32 microcontroller.

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

All rights reserved.

--------------------------------------------------------------------------*/


#ifndef __REG52_H__

#define __REG52_H__


/* BYTE Registers */

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;


/* 8052 Extensions */

sfr T2CON = 0xC8;

sfr RCAP2L = 0xCA;

sfr RCAP2H = 0xCB;

sfr TL2    = 0xCC;

sfr TH2    = 0xCD;



/* BIT Registers */

/* PSW */

sbit CY    = PSW^7;

sbit AC    = PSW^6;

sbit F0    = PSW^5;

sbit RS1   = PSW^4;

sbit RS0   = PSW^3;

sbit OV    = PSW^2;

sbit P     = PSW^0; //8052 only


/* TCON */

sbit TF1   = TCON


推荐阅读

史海拾趣

Continental公司的发展小趣事

随着汽车电子化的趋势日益明显,大陆集团也开始将业务拓展到汽车电子领域。在新的架构体系中,车身电子部门被纳入“车联网和信息”这个大的业务板块中。大陆集团致力于实现车身电子的更好互联、更好呈现信息和更好的集成。通过互联技术,数据能够在汽车与外界之间进行传递,并将这些信息通过人机交互界面呈现给驾驶者和乘客。同时,大陆集团还致力于确保数据从车辆到云端的顺畅传输和处理。这些举措使得大陆集团在汽车电子领域取得了显著的进展。

驰芯微(CHIPWISE)公司的发展小趣事

在发展过程中,驰芯微公司成功完成了多轮融资,为公司的发展提供了强有力的资金支持。这些资金主要用于车规级传感和控制类芯片的系列化业务以及新能源电池管理系统汽车电子系统一站式车规级芯片套片解决方案的研发和推广。未来,驰芯微将继续加大在技术研发和产品创新方面的投入力度,致力于成为国际领先的汽车电子芯片供应商。同时,公司还将积极拓展海外市场,提升品牌知名度和影响力。

以上五个故事框架分别围绕驰芯微公司的初创历程、技术突破、面对“芯片限制”的机遇与挑战、与明然科技的合作以及融资与未来规划等方面进行了描述。这些故事展示了驰芯微在电子行业中的发展历程和取得的成就,同时也揭示了公司未来的发展方向和目标。

Beckhoff Automation GmbH公司的发展小趣事

在环保日益受到重视的今天,BCD Semi公司积极响应国家环保政策,将环保理念融入公司的生产和经营中。公司采用环保材料和工艺,减少生产过程中的污染排放,提高资源利用效率。同时,BCD Semi还加强了对员工的环保培训和教育,提高员工的环保意识,共同推动公司的可持续发展。

Digital View公司的发展小趣事

随着数字化技术的不断进步和应用领域的不断扩大,Digital View公司也加快了数字化转型和升级的步伐。公司加大了对云计算、大数据、人工智能等前沿技术的研发和应用力度,推出了一系列智能化、数字化的产品和服务。这些产品和服务不仅提高了客户的运营效率和管理水平,还为公司带来了新的增长点。

B&B Electronics Manufacturing Company公司的发展小趣事

近年来,电子行业面临着技术更新迅速、市场需求多变等挑战。B&B公司积极应对这些挑战,不断调整和优化产品结构,加强技术创新和人才培养。同时,公司也密切关注行业动态和市场需求变化,为未来的发展做好充分准备。

这些故事虽然无法涵盖B&B公司发展的全部细节,但可以从不同侧面反映出公司在电子行业中的成长轨迹和发展脉络。作为一家在电子行业中具有一定影响力的公司,B&B公司的发展历程无疑是一个充满挑战和机遇的过程。

Advanced_Linear_Devices_Inc.公司的发展小趣事

随着市场需求的不断增长,ALD不断拓展其产品线。除了最初的CMOS线性集成电路外,公司还研发出了轨到轨运算放大器、双斜率A/D前端转换器、电压比较器等一系列产品。这些产品不仅满足了不同行业的需求,还进一步提升了ALD在电子行业的市场地位。同时,公司还针对特定应用,如医疗仪器和汽车领域,推出了定制化的解决方案,赢得了客户的广泛赞誉。

问答坊 | AI 解惑

ADSL宽带接入技术在韩国通信的应用1

一、概况 韩国通信开展ADSL业务的主要原因是由于激烈的市场竞争。由于电信业务完全放开,除韩国通信之外,还有不少宽带业务提供商也在提供电信业务。当韩国通信还在推广ISDN业务时,一些CATV公司已利用CableModem占去了不少宽带Internet接入市场。 ...…

查看全部问答>

单片机的延时问题

void delay(int x) {    int i,j;    for(i=0;i…

查看全部问答>

开关电源的尖峰【附图】,这个算不算高?

本人在工程中使用的开关电源,使用中感觉毛刺比较大,一部分电源模块会导致数字电路不正常工作(换电源模块或着直流后数字模块正常),所以想请教一下大侠,我的开关电源的毛刺大吗?输出为5v直流。有没有什么好的方法能够抑制一下? …

查看全部问答>

. .

Windows CE如何进行中断处理?   (1)Windows CE中断处理流程   ①硬件设备向Kernel发送中断异常的代码,如果检测到这个中断异常,就会被Kernel层的异常处理所截获。然后,中断服务调度程序会调用OAL例程中的OEMInterruptDi ...…

查看全部问答>

MFC requires WINVER to be #defined to 0x0400 or greater

项目建立的时候是wm5.0,后来选择别的模拟器,编译的时候出现“MFC requires WINVER to be #defined to 0x0400 or greater”,应该如何解决?…

查看全部问答>

哪位高人能详细的讲解一下设备对象和驱动对象?

如题,看了书,觉得都被搞糊涂了! 另外能否讲解一下驱动是如何被windows装载的!…

查看全部问答>

猎头职位——条码手持终端开发工程师

条码手持终端开发工程师 1.        2名,大专以上学历; 2.        了解制造业物流业务和条码/RFID技术,有仓库和生产线条码/RFID手持终端开发经验。 3.        熟悉C#语言编程 ...…

查看全部问答>

高精度数控恒流源

各位大侠,目前手头有个设计任务,征集个方案主要情况是这个样子:板卡由BGA核心板(现有模块)+DA模拟输出部分+恒流源运放电路+AD采集模块几部分主要技术难点就在于高精度正负恒流源的设计和实现,技术要求如下: 1提供八路独立正负恒流源恒流源量 ...…

查看全部问答>

关于通信的想法

接下来想玩玩通信 ,请大家给予一个方向!不知道怎么学才好。…

查看全部问答>

PXI7854机箱怎么进windows?

急求:PXI7854机箱怎么进windows,或者说开机的时候按哪个键可以进BIOS更改设置。 谢谢~~ 谢谢…

查看全部问答>