C51编程中头文件的使用

发布者:水手谷水手最新更新时间:2016-11-07 来源: eefocus关键字:C51编程  头文件 手机看文章 扫描二维码
随时随地手机看文章

头文件在C51的编程中是不可缺少的部分。本文将对keil 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

特殊功能寄存器的位地址

sfr 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)

C51编程中头文件的使用 - 擎天柱 - 传じ☆ve说返回浮点型参数val的    值

extern float log   (float val)

C51编程中头文件的使用 - 擎天柱 - 传じ☆ve说返回浮点型参数val的C51编程中头文件的使用 - 擎天柱 - 传じ☆ve说

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)

C51编程中头文件的使用 - 擎天柱 - 传じ☆ve说返回浮点型参数x/y的余数

extern float pow   (float x, float y)

返回浮点型参数   值

#pragma RESTORE

 

#endif

 

    

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

二、头文件的编制方法

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

#ifndef __头文件名_H__ 

#define __头文件名_H__ 

#endif

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

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

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

关键字:C51编程  头文件 引用地址:C51编程中头文件的使用

上一篇:三种常用的CRC16校验算法的C51程序的优化
下一篇:KeilC51中的库函数printf

推荐阅读最新更新时间:2024-03-16 15:19

MSP430x14x之头文件的一些定义解释
端口宏 define BIT0 (0X0001) ;(0X0001)不是地址,而是一个16进制的数。 e.g. P4DIR |= BIT0 ;实际上就是P4DIR |= 0X0001,即将P3.0管脚作输出作用。 看门狗 WDTCTL = WDTPW + WDTHOLD ; 实际上就是0x5A80 头文件中定义有: #define WDTPW (0X5A00) #define WDTHOLD (0X0080) 其中 :1. WDTCTL(看门狗控制寄存器),当其值为(0X5A00); WDTPW (看门狗密码,WDTCTL的高8位),只有其为0X5A时,才能对WDTCTL寄存器进行读写操作;WD
[单片机]
Keil C51破解版(c语言单片机编程软件) v9.0 免费汉化版
软件介绍 keil c51汉化包旨在带来单片机的各类编程操作,让你能够轻松的进行所需的编辑服务,拥有c语言编程辅助功能,为你带来免费的各类操作效果! 官方介绍 是一款破解过的C语言单片机编程软件!这款软件主要为编程学员们提供c语言服务。绿色资源网小编提供的这款软件完全免费,大家下载后即可使用! eil C51简介: eil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 可以使用以前的注册文件如果全新安装,在VISTA或者WIN 7系统下,请使用管理员
[单片机]
Keil <font color='red'>C51</font>破解版(c语言单片机<font color='red'>编程</font>软件) v9.0 免费汉化版
51单片机C语言头文件及其使用
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这样的问题,看过本文后,就会明白。其实这个是在头文件中用sfr定义的,现在定义好了的是这样的sfr P1 = 0x90;,也就是说,到底大写,还是小写,就是在这里面决定的。这就说明,如果你要用小写,就得在头文件中改为小写。其实它都是为了编程序方便才这样写的,在程序编译时,就会变成相应的地址(如P1就变成了0x90)。 还有一点就是,现在有很多改进型的单片机,它们有很多新增的特殊功能寄存器在标准的reg51.h或reg52.h中没有定义,这就需要自己加进头文件(相关厂家已经把它们定义好
[单片机]
C51编程13-中断篇(外部中断)
CPU在执行的过程中,一般来说都是在执行主程序(main函数里面的代码)。如果希望处理其他的功能,可以通过查询的方式进行,判断是否需要处理或者通过中断的方式,进入中断服务函数程序里面执行。 前者是在主程序中判断条件是否成立,如果成立则执行其他功能,否则不执行;后者是CPU在执行过程中,判断是否有中断标志位,响应中断进入中断服务函数,执行相关功能。 MCS-51 单片机中,有两个外部中断(INT0与INT1),中断有两种方式低电平触发与负跳变(下降沿)触发。 下面通过讲INT0说明外部中断,INT1同理。 原理图: P0连接8个LED,INT0引脚连接一个按钮连接到地。 在中断系统中,INT0设计的寄存器中
[单片机]
<font color='red'>C51</font><font color='red'>编程</font>13-中断篇(外部中断)
c51编程中sbit 和bit有什么区别
首先,bit和sbit都是C51扩展的变量类型 sbit一般用来定义特殊功能寄存器的位变量,以方便对寄存器的某位进行操作的 例如:sbit TXD=P3^0; 这样就定义了TXD为位变量,并且这个sbit量有确定的地址 bit则与一般的变量差不多,只不过bit定义的变量只有两种值存在0或是1 例如:bit p=0;编译器在编译过程将分配地址,所分配的地址是随机的
[单片机]
51单片机入门经验分享2-关于进制 typedef 头文件 main 延时函数
接上篇帖子,单片机这种东西,如果是用来考试,翻翻书大概就可以了,如果是拿来开发一些小的作品,自学2个月,也不会太难,因为现在开发板也是很多的,资料也很丰富,如果你是想找工作,想独立开发产品,这个,对于一个刚毕业的人来说,就比较难了,很大的原因,是走了弯路,而且沿着弯路一直走了下去。我们希望分享一些有用的东西,实用的东西,让新手少走些弯路,如果每个坑都重踩一遍,这得浪费多少时间啊。 言归正传,单片机是必须要亲自动手敲代码才能学会的,所以从这一章节开始,我们会分享一些例程,并详细解析,希望能给新手带来帮助,还是那句话,本人水平有限,老手轻拍,有错误请指出,有事请留言。 一个经典的例程,点亮你的LED 我以手里的这块STC15W1
[单片机]
51单片机入门经验分享2-关于进制 typedef <font color='red'>头文件</font> main 延时函数
51单片机驱动ADC0808电路图C51及汇编程
这两天刚刚完成了一个用C编写的程序,这是我第一个用C语言编写的程序,并且调试成功。 第一个C程序,值得纪念,也值得以后参考。 本程序的功能是: 1.ADC0808转换功能;    2.数据16进制显示; 3.串行通信数据。 C51程序:工程文件下载: http://www.51hei.com/f/0808_c.rar #include absacc.h # inc lude reg51.h #define uchar unsigned char #define uint unsigned int sbit START=P3^6; //启动转换 sbit OE=P3^
[单片机]
51单片机驱动ADC0808电路图<font color='red'>C51</font>及汇<font color='red'>编程</font>序
STM32F103系列头文件(支持位带操作)
【1】头文件介绍 和51的头文件类似,采用特殊方法封装,只要在工程中加入该头文件即可直接操控寄存器,支持位带操作。 【2】使用说明 详见头文件 【3】地址链接 点个关注吧,我会持续推出好东西的! 链接:https://pan.baidu.com/s/16WdrCZgjvgrPLzejeMFBkg 提取码:v35g 【4】注意 除了头文件还给出了自己的应用实例,推荐使用混合模板。即寄存器和标准库结合的编程方式。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved