51单片机头文件reg51h详解.docx
- 文档编号:10664636
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:22
- 大小:115.34KB
51单片机头文件reg51h详解.docx
《51单片机头文件reg51h详解.docx》由会员分享,可在线阅读,更多相关《51单片机头文件reg51h详解.docx(22页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片 机头 文件 reg51h 详解