51单片机头文件reg51h详解.docx

上传人:b****8 文档编号:10664636 上传时间:2023-02-22 格式:DOCX 页数:22 大小:115.34KB
下载 相关 举报
51单片机头文件reg51h详解.docx_第1页
第1页 / 共22页
51单片机头文件reg51h详解.docx_第2页
第2页 / 共22页
51单片机头文件reg51h详解.docx_第3页
第3页 / 共22页
51单片机头文件reg51h详解.docx_第4页
第4页 / 共22页
51单片机头文件reg51h详解.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

51单片机头文件reg51h详解.docx

《51单片机头文件reg51h详解.docx》由会员分享,可在线阅读,更多相关《51单片机头文件reg51h详解.docx(22页珍藏版)》请在冰豆网上搜索。

51单片机头文件reg51h详解.docx

51单片机头文件reg51h详解

51单片机头文件reg51.h详解

我们在用c语言编程时往往第一行就是头文件,51单片机为reg51.h或reg52.h,51单片机相对来说比较简单,头文件里面内容不多,像飞思卡尔、ARM系列的单片机头文件往往内容就非常多,尽管如此,对一些初次接触单片机的朋友来说,51的头文件还是搞不太清楚,今天具体来说明一下。

1)“文件包含”处理概念

所谓“文件包含”是指在一个文件内将另外一个文件的内容全部包含进来。

因为被包含的文件中的一些定义和命令使用的频率很高,几乎每个程序中都可能要用到,为了提高编程效率,减少编程人员的重得劳动,将这些定义和命令单独组成一个文件,如reg51.h,然后用#include;包含进来就可以了,这个就相当于工业上的标准零件,拿来直接用就可以了。

2)寄存器地址及位地址声明的原因

reg51.h里面主要是一些特殊功能寄存器的地址声明,对可以位寻址的,还包括一些位地址的声明,如果如sfrP1=0x80;sfrIE=0xA8;sbitEA=0xAF等。

sfrP1=0x90这句话表示:

P1口所对应的特殊功能寄存器P1在内存中的地址为0x80,sbitEA=0xAF这句话表示EA这一位的地址为0xAF。

注意这里出现了一个使用很频繁的sfr和sbit。

sfr表示特殊功能寄存器的意思,它并非标准C语言的关键字,而是Keil为能直接访问80C51中的SFR而提供了一个新的关键词,其用法是:

sfr特殊功能寄存器名=地址值(注意对于头文件里“特殊功能寄存器名”,用户实际上也可以修改的,如P1=0x80,也可改为A1=0x80,但sfr和地址值则不能更改,否者会编译出错。

sbit表示位的意思,它也是非标准C语言的关键字,编写程序时如需操作寄存器的某一位(可位寻址的寄存器才能用)时,需定义一个位变量,此时就要要到sbit,如sbitdeng=P1^0,sbitEA

=0xAF;需要注意的是,位定义时有些特殊,用法有三种:

第一种方法:

sbit位变量名=寄存器位地址值

第二种方法:

sbit位变量名=SFR名称^寄存器位值(0-7)

第三种方法:

sbit位变量名=SFR地址值^寄存器位值

如:

sbitIT0=0x88

(1)说明:

0x88是IT0的位地址值

sbitdeng=P1^2

(2)说明:

其中P1必须先用sfr定义好

sbitEA=0xA8^7(3)说明:

0xA8就是IE寄存器的地址值

以上三种定义方法需注意的是IT0dengEA可由用户随便定义,但必须满足C语言对变量名的定义规则。

除些外其它的则必须按照上面的格式写,如“名称^变量位地址值”中“^”,它是由keil软件的规定的,不能写成其它的,只能这样能才编译通过。

以上是对寄存器地址和位地址的定义和声明作了解释,大家需要牢牢记住:

只有对寄存器及相关位进行声明地址后,我们才能对其进行赋相关的值,keil软件才能编译通过。

至于说为什么,这可能一句话两句话也说不清楚。

3)内存、SFR、位、地址等的通俗解释

前面讲到了寄存器地址和位地址(前提能位寻址)声明的目的是为告诉C编译器相应寄存器及其位在内存中的地址,这样我们对寄存器及一些位赋的变量和数值才能正确保存,然后才能供CPU正确的调用,完成相应的功能。

上段文字出现了寄存器(SFR)、位,地址、内存等,单片机学习过程中还会出现ROM、RAM等名词,可能大家觉得不是很好理解,这里可以通俗的解释一下,如下面三个图所示。

我们把内存比作宾馆,ROM、RAM、SFR相当于宾馆里具体的有三种不同功能楼层(具体这个宾馆多少层即多少ROM、RAM、SFR,视各个宾馆或者每种单片机而不同),每层8个房间相当于8位,每个房间要么住男人要么住女人相当于每位要么放入数字1要么放入数字0,keil编译器就相当于宾馆的工作人员,旅客去住旅馆相当写程序的过程,住宾馆的人必须事先要给工作人员说你是哪一层哪一个房间(即声明寄存器地址和位地址,)宾馆工作人员才能把你带到你的房间里去(这里假设这个宾馆可以由旅客自己决定住哪个房间)。

即:

只有对寄存器及相关位进行声明地址后,我们才能对其进行赋相关的值,keil软件才能编译通过。

4)REG51.H头文件原文及解释

打开reg51.h可以看到这样的一些内容(此文件一般在C:

\KEIL\C51\INC下,INC文件夹根目录里有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。

如果我们要使用自己写的头文件,使用的时候只需把对应头文件拷贝到INC文件夹里就可以了。

下面附出头文件的原文,并把注释文件一并附后。

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

REG51.H

Headerfileforgeneric80C51and80C31microcontroller.

Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.

Allrightsreserved.

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

#ifndef__REG51_H__

#define__REG51_H__

/*BYTERegister*/

sfrP0

=0x80;

//三态双向

IO口

P0口 此句话的意思是:

特殊功能寄存器 P0 地址为0x80,可位寻址,下同

//低8位地址总线/数据总线(一般不用而只作普通I/O口,注意作I/O口用时,硬件上需接上接电阻)

sfrP1

=0x90;

//准双向

IO口

P1口

sfrP2

=0xA0;

//准双向IO口

P2口

//高8位地址总线,一般也作普通I/O用

sfrP3

=0xB0;

//双功能

 //1.准双向

IO口

P3口

  //2.P30

RXD串行数据接受

  //

P31

TXD串行数据发送

//

P32

外部中断0

信号申请

 //

P33

外部中断1

信号申请

//

P34

定时/计数器T0

外部计数脉冲输入

//

P35

定时/计数器T1

外部计数脉冲输入

//

P36

WR片外RAM写脉冲信号输入

//

P37

  RD片外ram读脉冲信号输入

sfrPSW=0xD0;//可以位寻址(C语言编程时可不考虑此寄存器)

//程序状态寄存器ProgramStatusWORD

(程序状态信息)

//psw.7(CY)

进位标志

//psw.6(AC)辅助进位标志位低四位向高四位进位或借位时AC=1

//主要用于十进制调整

//psw.5(F0)用户可自定义的程序标志位

//psw.4(RS1)

//psw.3(RS0)

//工作寄存器选择位

//任一时刻只有一组寄存器在工作

//000区

00H~07H

//011区

08H~0fH

//102区

10H~17H

//113区

18H~1FH

//psw.2(OV)

溢出标志位

//psw.1(

保留为,不可使用

//psw.0(P)

奇偶校验位

sfrACC=0xE0;

//累加器A

特殊功能寄存器

可位寻址

sfrB

=0xF0;

//寄存器B

主要用于乘除运算

sfrSP

=0x81;

//堆栈指针寄存器SP

存放站定栈顶地址、

sfrDPL=0x82;

//

sfrDPH=0x83;

//数据指针寄存器DPTR、//对片外RAM及扩展IO进行存取用的地址指针

sfrPCON=0x87;//电源控制寄存器、不能位寻址

//管理单片机的电源部分包括上电复位、掉电模式、空闲模式等

//单片机复位时PCON被全部清0,编程时一般是用到SMOD位,其它的一般不用

//D7SMOD该位与串口通信波特率有关

//SMOD=0

串口方式123波特率正常

//SMOD=1

串口方式123波特率加倍

sfrTCON=0x88;//定时器/计数器

控制寄存器

可以位寻址

        //D7 TF1

定时器1溢出标志位

//D6

TR1

定时器1运行控制位

//D5

TF0

定时器0溢出标志位

//D4

TR0

定时器0运行控制位

//D3

IE1

外部中断1请求标志

//D2

IT1

外部中断1触发方式选择位

//D1

IE0

外部中断0请求标志

//D0

IT0

外部中断0触发方式选择位

sfrTMOD=0x89;//定时器/计数器

工作方式寄存器

不能位寻址

//确定工作方式和功能

//D7GATE

门控制位

//GATE=0;定时器/计数器由TRX(x=0,1)来控制

//GATE=1;定时器/计数器由TRX(x=0,1)

//和外部中断引脚(init0,1)来共同控制

//D6C/T

定时器、计数器选择位

//

0选择定时器模式

//

1

选择计数器模式

//D5

M1

//D4

M0

//M1

M0

工作方式

//0

0

方式0

13位定时器/计数器

//0

1

方式1

16位定时器/计数器

//1

0

方式2

8位自动重装定时器/计数器

//1

1

方式3

仅适用T0

分成两个8位计数器,T1停止计数

//D3GATE

门控制位

//GATE=0;定时器/计数器由TRX(x=0,1)来控制

//GATE=1;定时器/计数器由TRX(x=0,1)

//和外部中断引脚(init0,1)来共同控制

//D2C/T

定时器、计数器选择位

//0选择定时器模式

//1

选择计数器模式

//D1

M1

//D0

M0

//

M1M0

工作方式

//

0

0

方式0

13位定时器/计数器

//

0

1

方式1

16位定时器/计数器

//

1

0

方式2

8位自动重装定时器/计数器

//

1

1

方式3

仅适用T0

分成两个8位计数器,T1停止计数

sfrTL0=0x8A;

//定时器/计数器0高8位

容器

 加1计数器

sfrTL1=0x8B;

//定时器/计数器1高8位

容器

sfrTH0=0x8C;

//定时器/计数器0低8位

容器

sfrTH1=0x8D;

//定时器/计数器1低8位

容器

sfrIE

=0xA8;

//中断允许寄存器

可以位寻址

//D7 EA

全局中断允许位

//D6

NULL

//D5

ET2

定时器/计数器2中断允许位

interrupt5

//D4 ES

串行口中断允许位

interrupt4

//D3 ET1

定时器/计数器1中断允许位

interrupt3

//D2 EX1

外部中断1中断允许位

interrupt2

//D1 ET0

定时器/计数器0中断允许位

interrupt1

//D0 EX0

外部中断0中断允许位

interrupt0

sfrIP

=0xB8;

      //中断优先级寄存器

可进行位寻址

       //D7NULL

      //D6NULL

       //D5

NULL

//D4

PS

串行口中断定义优先级控制位

//

1

串行口中断定义为高优先级中断

//

0

串行口中断定义为低优先级中断

//

//D3

PT1

//

1

定时器/计数器1中断定义为高优先级中断

//

0

定时器/计数器1中断定义为低优先级中断

//D2PX1

//

1

外部中断1定义为高优先级中断

//

0

外部中断1定义为低优先级中断

//D1

PT0

//

1

定时器/计数器0中断定义为高优先级中断

//

0

定时器/计数器0中断定义为低优先级中断

//D0PX0

//

1

外部中断0定义为高优先级中断

//

0

外部中断0定义为低优先级中断

sfrSCON=0x98;

//串行口控制寄存器

可以进行位寻址

//D7  SM0

//D6

SM1

//

SM0

SM1

串行口工作方式

//

0

0

同步移位寄存器方式

//

0

1

10位异步收发(8位数据),波特率可变(定时器1溢出率控制)

//

1

0

11位异步收发(9位数据),波特率固定

//

1

1

11异步收发(9位数据),波特率可变(定时器1溢出率控制)

//D5

SM2

多机通信控制位

主要用于方式2和方式3

//D4

REN

允许串行接收位

//D3

TB8

方式2,3中发送数据的第9位

//D2

RB8

方式2,3中接受数据的第9位

//D1

TI

发送中断标志位

//D0

RI

接受中断标志位

sfrSBUF=0x99;

//串行数据缓冲区

/*****************************************************************************

下面是位寻址区

上面做过解释的就不在下面一一解释了

******************************************************************************/

/*BITRegister*/

/*PSW

*/

sbitCY

=0xD7;

sbitAC

=0xD6;

sbitF0

=0xD5;

sbitRS1=0xD4;

sbitRS0=0xD3;

sbitOV

=0xD2;

sbitP

=0xD0;

/*TCON*/

sbitTF1=0x8F;

sbitTR1=0x8E;

sbitTF0=0x8D;

sbitTR0=0x8C;

sbitIE1=0x8B;

sbitIT1=0x8A;

sbitIE0=0x89;

sbitIT0=0x88;

/*IE

*/

sbitEA

=0xAF;

sbitES

=0xAC;

sbitET1=0xAB;

sbitEX1=0xAA;

sbitET0=0xA9;

sbitEX0=0xA8;

/*IP

*/

sbitPS

=0xBC;

sbitPT1=0xBB;

sbitPX1=0xBA;

sbitPT0=0xB9;

sbitPX0=0xB8;

/*P3*/

sbitRD

=0xB7;

sbitWR

=0xB6;

sbitT1

=0xB5;

sbitT0

=0xB4;

sbitINT1=0xB3;

sbitINT0=0xB2;

sbitTXD=0xB1;

sbitRXD=0xB0;

/*SCON*/

sbitSM0=0x9F;

sbitSM1=0x9E;

sbitSM2=0x9D;

sbitREN=0x9C;

sbitTB8=0x9B;

sbitRB8=0x9A;

sbitTI

=0x99;

sbitRI

=0x98;

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1