c51语言自定义头文件,C51编程中头文件的使用

2023-05-16

原标题:C51编程中头文件的使用

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

一、C51常见本征函数库

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

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

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

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

特殊功能寄存器的位地址

P0 = 0x80

P0口锁存器的地址

sfr P1 = 0x90

P1口锁存器的地址

sfr P2 = 0xA0

P2口锁存器的地址

sfr P3 = 0xB0

P3口锁存器的地址

sfr PSW = 0xD0

程序状态字

sfr ACC = 0xE0

累加器

sfr B = 0xF0

B寄存器

sfr SP = 0x81

sfr DPL = 0x82

数据指针低位

sfr DPH = 0x83

数据指针高位

sfr PCON = 0x87

控制寄存器

sfr TCON = 0x88

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

sfr TMOD = 0x89

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

sfr TL0 = 0x8A

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

sfr TL1 = 0x8B

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

sfr TH0 = 0x8C

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

sfr TH1 = 0x8D

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

sfr IE = 0xA8

中断允许控制寄存器

sfr IP = 0xB8

中断优先级控制寄存器

sfr SCON = 0x98

串行控制寄存器

sfr SBUF = 0x99

串行缓冲器

BIT Register

程序状态寄存器的地址

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

T1计数溢出标志位

sbit TR1 = 0x8E

T1计数运行控制位

sbit TF0 = 0x8D

T0计数溢出标志位

sbit TR0 = 0x8C

T0计数运行控制位

sbit IE1 = 0x8B

中断1边沿标志

sbit IT1 = 0x8A

中断1控制位

sbit IE0 = 0x89

中断0边沿标志位

sbit IT0 = 0x88

中断0控制位

IE

中断使能控制器位地址

sbit EA = 0xAF

总中断控标志位

sbit ES = 0xAC

串行中断标志位

sbit ET1 = 0xAB

T1计数中断标志位

sbit EX1 = 0xAA

外部中断1标志位

sbit ET0 = 0xA9

T0计数中断标志位

sbit EX0 = 0xA8

外部中断0标志位

IP

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

sbit PS = 0xBC

串行中断优先标志位

sbit PT1 = 0xBB

计数器1中断优先标志位

sbit PX1 = 0xBA

外部中断1优先标志位

sbit PT0 = 0xB9

计数器0中断优先标志位

sbit PX0 = 0xB8

外部中断0优先标志位

P3

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

sbit RD = 0xB7

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

sbit WR = 0xB6

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

sbit T1 = 0xB5

定时器1外部中断

sbit T0 = 0xB4

定时器0外部中断

sbit INT1 = 0xB3

外部中断0

sbit INT0 = 0xB2

外部中断1

sbit TXD = 0xB1

串行输出口

sbit RXD = 0xB0

串行输入口

SCON

串行口控制寄存器位地址

sbit SM0 = 0x9F

串行口模式的选择位

sbit SM1 = 0x9E

串行口模式的选择位

sbit SM2 = 0x9D

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

sbit REN = 0x9C

允许串行接收位

sbit TB8 = 0x9B

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

sbit RB8 = 0x9A

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

sbit TI = 0x99

传送中断标志位

sbit RI = 0x98

接收中断标志位

#endif

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

头文件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)

空操作相当于NOP指令

xtern bit _testbit_ (bit)

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

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, unsignedchar)

字符循环左移

extern unsigned int _irol_ (unsigned int, unsigned char)

长整数循环左移

extern unsigned long _lrol_ (unsigned long, unsigned char)

整数循环左移

Extern unsigned char _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 可以位寻址(Bit Addressable)的内部存储器

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

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

Direct access to 8051, extended 8051 and Philips 80C51MX memory areas. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved.

#ifndef __ABSACC_H__

#define __ABSACC_H__

#define CBYTE ((unsigned char volatile code *) 0)

寻址code程序区

#define DBYTE ((unsigned char volatile data *) 0)

寻址data数据区

#define PBYTE ((unsigned char volatile pdata *) 0)

寻址外部pata数据区

#define XBYTE ((unsigned char volatile xdata *) 0)

寻址外部xdata数据区

#define CWORD ((unsigned int volatile code *) 0)

指向内部ROM的地址

#define DWORD ((unsigned int volatile data *) 0)

指向内部RAM的地址

#define PWORD ((unsigned int volatile pdata *) 0)

指向外部RAM的地址

#define XWORD ((unsigned int volatile xdata *) 0)

指向外部RAM的地址

#ifdef __CX51__

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

#define FVAR(object, addr) (*((object volatile far *) (addr)))

从addr处取出object 型数据

#define FARRAY(object, base) ((object volatile far *) (base))

#define FCVAR(object, addr) (*((object const far *) (addr)))

#define FCARRAY(object, base) ((object const far *) (base))

#else

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

#define FVAR(object,addr)(*((object volatile far *)((addr)+0x10000L)))

#define FCVAR(object, addr)(*((object const far *)((addr)+0x810000L)))

#define FARRAY(object, base)(object volatile far *)((base)+0x10000L))

#defineFCARRAY(object, base)((object const far *)((base)+0x810000 L))

endif

#endif

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

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

Prototypes for mathematic functions.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved.

#ifndef __MATH_H__

#define __MATH_H__

#pragma SAVE

#pragma REGPARMS

extern char cabs (char val)

返回复数val的的绝对值

extern int abs (int val)

返回整型参数val的绝对值

extern long labs (long val)

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

extern float fabs (float val)

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

extern float sqrt (float val)

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

extern float exp (float val)

返回浮点型参数val的 值

extern float log (float val)

返回浮点型参数val的

extern float log10 (float val)

返回浮点型参数val的 值

extern float sin (float val)

返回浮点型参数val的

extern float cos (float val)

返回浮点型参数val的值

extern float tan (float val)

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

extern float asin (float val)

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

extern float acos (float val)

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

extern float atan (float val)

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

extern float sinh (float val)

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

extern float cosh (float val)

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

extern float tanh (float val)

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

extern float atan2 (float y, float x)

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

extern float ceil (float val)

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

extern float floor (float val)

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

extern float modf (float val, float *n)

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

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

extern float fmod (float x, float y)

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

extern float pow (float x, float y)

返回浮点型参数 值

#pragma RESTORE

#endif

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

二、头文件的编制方法

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

#ifndef __头文件名_H__

#define __头文件名_H__

#endif

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

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

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

责任编辑:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c51语言自定义头文件,C51编程中头文件的使用 的相关文章

随机推荐