当前位置:首页 > 单片机 > 单片机
[导读]头文件在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主函数,对于某个具体程序的头文件的编写须根据程序需求结合硬件和原理图来进行。

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

Sept. 8, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季NVIDIA(英伟达) Blackwell平台规模化出货,以及北美CSP业者持续扩大布局General Server(通用型...

关键字: SSD DDR4 服务器

Sept. 4, 2025 ---- Apple(苹果)即将发布iPhone 17、iPhone 17 Air(暂名)、iPhone 17 Pro及Pro Max四款旗舰新机,除了外观辨识度升级,处理器性能、散热和拍摄功...

关键字: iPhone 16 A19处理器 折叠机

Sept. 3, 2025 ---- 根据TrendForce集邦咨询最新发布的《2025近眼显示市场趋势与技术分析》报告,2025年随着国际品牌陆续推出AR眼镜原型,以及Meta预计在近期发布AR眼镜Celeste,市...

关键字: AR眼镜 OLED

Sept. 2, 2025 ---- TrendForce集邦咨询表示,2025年第二季DRAM产业因一般型DRAM (Conventional DRAM)合约价上涨、出货量显著增长,加上HBM出货规模扩张,整体营收为3...

关键字: DRAM 智能手机 ASP

Sept. 1, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季因中国市场消费补贴引发的提前备货效应,以及下半年智能手机、笔电/PC、Server新品所需带动,整体晶圆代工产能利用率与出货...

关键字: 晶圆代工 智能手机 笔电

Aug. 28, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季NAND Flash产业虽面临平均销售价格(ASP)小幅下滑,所幸原厂减产策略缓解供需失衡,叠加中、美两大市场政策推动,整体...

关键字: NAND Flash SSD AI

Aug. 26, 2025 ---- NVIDIA(英伟达)近日推出的Jetson Thor被视为机器人的物理智慧核心,以Blackwell GPU、128 GB记忆体堆叠出2070 FP4 TFLOPS AI算力,是前...

关键字: 机器人 大型语言模型 AI算力

Aug. 21, 2025 ---- 根据TrendForce集邦咨询最新液冷产业研究,随着NVIDIA GB200 NVL72机柜式服务器于2025年放量出货,云端业者加速升级AI数据中心架构,促使液冷技术从早期试点迈...

关键字: AI 数据中心 服务器

除了充电电路外,锂电池的放电过程也需要保护。锂电池的放电电压不能低于3.0V,否则电池寿命会大幅缩短。为了实现这一保护,工程师们设计了DW01芯片与8205 MOS管的电路组合。DW01芯片能够监控锂电池的放电电压和电流...

关键字: 锂电池 电池

在PCB设计的宏伟蓝图中,布局与布线规则犹如精密乐章中的指挥棒,是铸就电路板卓越性能、坚不可摧的可靠性及经济高效的制造成本的灵魂所在。恰如一位巧手的园艺师,合理的布局艺术性地编排着每一寸空间,既削减了布线交织的繁复迷宫,...

关键字: PCB 电路板
关闭