当前位置:首页 > 单片机 > 单片机
[导读]头文件在C51的编程中是不可缺少的部分。本文将对keilC中常用头文件予以说明,并就如何编写头文件进行初步介绍。一、C51常见本征函数库一些常见的头文件都是keilC自带的,在安装目录下的C51文件夹的INC中可以找到keil

头文件在C51的编程中是不可缺少的部分。本文将对keilC中常用头文件予以说明,并就如何编写头文件进行初步介绍。

一、C51常见本征函数库

一些常见的头文件都是keilC自带的,在安装目录下的C51文件夹的INC中可以找到keilC中所有的芯片所对应的头文件。51系列单片机在编程中常用的头文件有:AT89X51.H、INTRINS.H、ABSACC.H、MATH.H。

1、AT89X51.H——本征函数库

头文件AT89X51.H是编程中必需要用到的专用寄存器文件。它与INC中的头文件REG51.H所定义的内容是一样的。主要用来定义特殊功能寄存器的位地址、程序状态寄存器的位地址、定时器/计数器控制寄存器的位地址、中断使能控制器位地址、单片机P3引脚特殊功能位地址、中断优先权控制寄存器位地址、串行口控制寄存器位地址。

Headerfileforgeneric80C51and80C31microcontroller.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.

#ifndef__REG51_H_

#define__REG51_H_

BYTERegister

特殊功能寄存器的位地址

sfrP0=0x80

P0口锁存器的地址

sfrP1=0x90

P1口锁存器的地址

sfrP2=0xA0

P2口锁存器的地址

sfrP3=0xB0

P3口锁存器的地址

sfrPSW=0xD0

程序状态字

sfrACC=0xE0

累加器

sfrB=0xF0

B寄存器

sfrSP=0x81

堆栈指针

sfrDPL=0x82

数据指针低位

sfrDPH=0x83

数据指针高位

sfrPCON=0x87

电源控制寄存器

sfrTCON=0x88

定时器/计数器控制寄存器

sfrTMOD=0x89

定时器/计数器方式控制寄存器

sfrTL0=0x8A

定时器/计数器0(低字节)

sfrTL1=0x8B

定时器/计数器1(低字节)

sfrTH0=0x8C

定时器/计数器0(高字节)

sfrTH1=0x8D

定时器/计数器1(高字节)

sfrIE=0xA8

中断允许控制寄存器

sfrIP=0xB8

中断优先级控制寄存器

sfrSCON=0x98

串行控制寄存器

sfrSBUF=0x99

串行缓冲器

BITRegister

程序状态寄存器的地址

sbitCY=0xD7

进位标志

sbitAC=0xD6

辅助进位标志

sbitF0=0xD5

标志位(可自行定义)

sbitRS1=0xD4

寄存器选择控制位

sbitRS0=0xD3

寄存器选择控制位

sbitOV=0xD2

溢出标志位

sbitP=0xD0

奇偶标志位

TCON

定时器/计数器控制寄存器的地址

sbitTF1=0x8F

T1计数溢出标志位

sbitTR1=0x8E

T1计数运行控制位

sbitTF0=0x8D

T0计数溢出标志位

sbitTR0=0x8C

T0计数运行控制位

sbitIE1=0x8B

中断1边沿标志

sbitIT1=0x8A

中断1控制位

sbitIE0=0x89

中断0边沿标志位

sbitIT0=0x88

中断0控制位

IE

中断使能控制器位地址

sbitEA=0xAF

总中断控标志位

sbitES=0xAC

串行中断标志位

sbitET1=0xAB

T1计数中断标志位

sbitEX1=0xAA

外部中断1标志位

sbitET0=0xA9

T0计数中断标志位

sbitEX0=0xA8

外部中断0标志位

IP

中断优先权控制寄存器位地址

sbitPS=0xBC

串行中断优先标志位

sbitPT1=0xBB

计数器1中断优先标志位

sbitPX1=0xBA

外部中断1优先标志位

sbitPT0=0xB9

计数器0中断优先标志位

sbitPX0=0xB8

外部中断0优先标志位

P3

单片机P3引脚特殊功能位地址

sbitRD=0xB7

外部数据存储器的写入控制信号

sbitWR=0xB6

外部数据存储器的读取控制信号

sbitT1=0xB5

定时器1外部中断

sbitT0=0xB4

定时器0外部中断

sbitINT1=0xB3

外部中断0

sbitINT0=0xB2

外部中断1

sbitTXD=0xB1

串行输出口

sbitRXD=0xB0

串行输入口

SCON

串行口控制寄存器位地址

sbitSM0=0x9F

串行口模式的选择位

sbitSM1=0x9E

串行口模式的选择位

sbitSM2=0x9D

允许模式2和3的多机通讯控制位

sbitREN=0x9C

允许串行接收位

sbitTB8=0x9B

在模式2和3下传送第9数据位

sbitRB8=0x9A

在模式2和3下存放第9数据位

sbitTI=0x99

传送中断标志位

sbitRI=0x98

接收中断标志位

#endif

2、INTRINS.H——本征函数库

头文件INTRINS.H主要用来定义空操作、判断并清零和字符及数字的循环移动。

IntrinsicfunctionsforC51.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved

#ifndef__INTRINS_H__

#define__INTRINS_H__

externvoid_nop_(void)

空操作相当于NOP指令

xternbit_testbit_(bit)

测试并清零位相当于JBC指令

externunsignedchar_cror_(unsignedchar,unsignedchar)

字符循环右移

externunsignedint_iror_(unsignedint,unsignedchar)

整数循环右移

externunsignedlong_lror_(unsignedlong,unsignedchar

长整数循环右移

externunsignedchar_crol_(unsignedchar,unsignedchar)

字符循环左移

externunsignedint_irol_(unsignedint,unsignedchar)

长整数循环左移

externunsignedlong_lrol_(unsignedlong,unsignedchar)

整数循环左移

Externunsignedchar_chkfloat_(float)

测试并返回源点数状态

#endif

3、ABSACC.H——本征函数库

头文件ABSACC.H用来确定各存储空间的绝对地址。包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD。在C51中特有的内存型态:

code以MOVC@A+DPTR读取的程序内存

data可以直接存取的内部数据存储器

idata以Mov@Rn存取的内部数据存储器

bdata可以位寻址(BitAddressable)的内部存储器

xdata以MOVX@DPTR存取的外部数据存储器

pdata以MOVX@Rn存取的外部数据存储器

Directaccessto8051,extended8051andPhilips80C51MXmemoryareas.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.

#ifndef__ABSACC_H__

#define__ABSACC_H__

#defineCBYTE((unsignedcharvolatilecode*)0)

寻址code程序区

#defineDBYTE((unsignedcharvolatiledata*)0)

寻址data数据区

#definePBYTE((unsignedcharvolatilepdata*)0)

寻址外部pata数据区

#defineXBYTE((unsignedcharvolatilexdata*)0)

寻址外部xdata数据区

#defineCWORD((unsignedintvolatilecode*)0)

指向内部ROM的地址

#defineDWORD((unsignedintvolatiledata*)0)

指向内部RAM的地址

#definePWORD((unsignedintvolatilepdata*)0)

指向外部RAM的地址

#defineXWORD((unsignedintvolatilexdata*)0)

指向外部RAM的地址

#ifdef__CX51__

如果CX51已被定义过则编译下面的的命令

#defineFVAR(object,addr)(*((objectvolatilefar*)(addr)))

从addr处取出object型数据

#defineFARRAY(object,base)((objectvolatilefar*)(base))

#defineFCVAR(object,addr)(*((objectconstfar*)(addr)))

#defineFCARRAY(object,base)((objectconstfar*)(base))

#else

如果CX51未被定义过则编译下面的的命令

#defineFVAR(object,addr)(*((objectvolatilefar*)((addr)+0x10000L)))

#defineFCVAR(object,addr)(*((objectconstfar*)((addr)+0x810000L)))

#defineFARRAY(object,base)(objectvolatilefar*)((base)+0x10000L))

#defineFCARRAY(object,base)((objectconstfar*)((base)+0x810000L))

endif

#endif

4、MATH.H——本征函数库

头文件MATH.H中是一些常见的函数库,主要是返回常见函数的函数值。

Prototypesformathematicfunctions.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.

#ifndef__MATH_H__

#define__MATH_H__

#pragmaSAVE

#pragmaREGPARMS

externcharcabs(charval)

返回复数val的的绝对值

externintabs(intval)

返回整型参数val的绝对值

externlonglabs(longval)

返回长整型参数val的绝对值

externfloatfabs(floatval)

返回浮点型参数val的绝对值

externfloatsqrt(floatval)

返回浮点型参数val的开方值

externfloatexp(floatval)

返回浮点型参数val的值

externfloatlog(floatval)

返回浮点型参数val的值

externfloatlog10(floatval)

返回浮点型参数val的值

externfloatsin(floatval)

返回浮点型参数val的正弦值

externfloatcos(floatval)

返回浮点型参数val的余弦值

externfloattan(floatval)

返回浮点型参数val的正切值

externfloatasin(floatval)

返回浮点型参数val的反正弦值

externfloatacos(floatval)

返回浮点型参数val的反余弦值

externfloatatan(floatval)

返回浮点型参数val的反正切值

externfloatsinh(floatval)

返回浮点型参数val的双曲正弦值

externfloatcosh(floatval)

返回浮点型参数val的双曲余弦值

externfloattanh(floatval)

返回浮点型参数val的双曲正切值

externfloatatan2(floaty,floatx)

返回浮点型参数valy/x的反正切值

externfloatceil(floatval)

返回不小于浮点型参数val的最小整数

externfloatfloor(floatval)

返回不大于浮点型参数val的最大整数

externfloatmodf(floatval,float*n)

把浮点型参数val分解为整数部分和小

数部分,把整数部分存到n指向的单元

externfloatfmod(floatx,floaty)

返回浮点型参数x/y的余数

externfloatpow(floatx,floaty)

返回浮点型参数值

#pragmaRESTORE

#endif

调用头文件须注意参数的类型。如果主程序中所选参数的类型与头文件中的不一样,则在编译时就不会通过。

二、头文件的编制方法

单片机C语言编程时往往会根据编程的需要编写头文件,这些头文件一般都是用来设定电路中芯片的接口定义及工作模式。从上述几个标准的头文件可知,在编写头文件时须遵循一定的格式,头文件的开始与结束部分的标准书写格式如下所示:

#ifndef__头文件名_H__

#define__头文件名_H__

#endif

编写头文件时可以调用KeilC51自带的头文件。

自行编写的头文件中被调用的头文件在主程序中须放在该头文件的前面,这样程序在编译时才能识别自行编写的头文件中所调用的头文件。

编写的头文件函数中不能出现main主函数,对于某个具体程序的头文件的编写须根据程序需求结合硬件和原理图来进行。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭