reg51.h 说明

参考资料:http://www.360doc.com/content/15/0719/00/12109864_485798838.shtml

寄存器地址及位地址声明的原因
reg51.h里面主要是一些特殊功能寄存器的地址声明,对可以位寻址的,还要包括一些位地址的声明,如:sfr P1=0x80; sfr IE=0xA8; sbit EA=0xAF等
sfr P1=0x80 这句话表示:P1口所对应的特殊功能寄存器P1在内存中的地址为0x80,sbit EA = 0xAF这句话表示EA这一位的地址为0xAF;

sfr 表示特殊功能寄存器的意思,它是keil为能直接访问80C51中的SFR而提供的一个关键词,用法:sfr 特殊功能寄存器名=地址值
sbit 表示位的意思,编写程序时,如果需要操作寄存器的某一位(可位寻址的寄存器才能用)时,需要定义一个位变量,此时就要用到sbit。如sbit deng=P1^0, sbit EA = 0xAF;
sbit具体用法有三种:
第一种:sbit 位变量名=寄存器位地址值
第二种:sbit 位变量名=SFR 名称^寄存器位值(0-7)
第三种:sbit 位变量名=SFR 地址值^寄存器位置

如:
sbit IT0=0x88 (1)说明:0x88是IT0的位地址值
sbit deng=P1^2    (2)说明:其中P1必须先用sfr定义好
sbit EA=0xA8^7    (3)说明:0xA8就是IE寄存器的地址值
注意:IT0 deng EA可由用户随便定义,满足C语言变量明明规则即可。格式必须按照上面的格式写,如“名称^变量位地址值”中"^",它是由keil软件规定的,不能写成其他的。
只有对寄存器及相关位进行声明地址后,我们才能对其进行赋值,keil才能编译通过。



/*BYTE Register*/
sfr P0= 0x80;					//三态双向IO口P0口 此句话的意思是:特殊功能寄存器 P0 地址为0x80 ,可位寻址,下同
											//低8位地址总线/数据总线(一般不用而只作普通I/O口,注意作I/O口用时,硬件上需接上接电阻)
sfr P1= 0x90;					//准双向IO口P1口

sfr P2= 0xA0;					//准双向IO口P2口
											//高8位地址总线,一般也作普通I/O用
sfr P3= 0xB0;					//双功能
 										//1.准双向IO口P3口
  									//2.P30 RXD串行数据接受
  									//			P31TXD串行数据发送
 										//			P32外部中断0信号申请
 										//			P33外部中断1信号申请
											//			P34定时/计数器T0外部计数脉冲输入
											//			P35定时/计数器T1外部计数脉冲输入
											//			P36WR片外RAM写脉冲信号输入
											//			P37   RD片外ram读脉冲信号输入
sfr PSW= 0xD0;				//可以位寻址(C语言编程时可不考虑此寄存器)
											//程序状态寄存器Program Status WORD(程序状态信息)
											//psw.7(CY)进位标志
											//psw.6(AC)辅助进位标志位低四位向高四位进位或借位时AC=1
											//主要用于十进制调整
											//psw.5(F0)用户可自定义的程序标志位
											//psw.4(RS1)
											//psw.3(RS0)
											//工作寄存器选择位
											//任一时刻只有一组寄存器在工作
											//0 00区00H~07H
											//0 11区08H~0fH
											//1 02区10H~17H
											//1 13区18H~1FH
											//psw.2(OV)溢出标志位
											//psw.1()保留为,不可使用
											//psw.0(P)奇偶校验位
sfr ACC= 0xE0;				//累加器A特殊功能寄存器可位寻址
sfr B= 0xF0;					//寄存器B主要用于乘除运算
sfr SP= 0x81;					//堆栈指针寄存器SP存放站定栈顶地址、
sfr DPL= 0x82;				//
sfr DPH= 0x83;				//数据指针寄存器DPTR、//对片外RAM及扩展IO进行存取用的地址指针
sfr PCON = 0x87;			//电源控制寄存器、不能位寻址
											//管理单片机的电源部分包括上电复位、掉电模式、空闲模式等
											//单片机复位时PCON被全部清0,编程时一般是用到SMOD位,其它的一般不用
											//D7SMOD该位与串口通信波特率有关
											//SMOD=0串口方式1 2 3波特率正常
											//SMOD=1串口方式1 2 3波特率加倍
sfr TCON = 0x88;			//定时器/计数器控制寄存器可以位寻址
        			//D7 TF1定时器1溢出标志位
											//D6TR1定时器1运行控制位
											//D5TF0定时器0溢出标志位
											//D4TR0定时器0运行控制位
											//D3IE1外部中断1请求标志
											//D2IT1外部中断1触发方式选择位
											//D1IE0外部中断0请求标志
											//D0IT0外部中断0触发方式选择位
sfr TMOD = 0x89;			//定时器/计数器工作方式寄存器不能位寻址
											//确定工作方式和功能
											//D7GATE门控制位
											//GATE=0;定时器/计数器由TRX(x=0,1)来控制
											//GATE=1;定时器/计数器由TRX(x=0,1)
											//和外部中断引脚(init0,1)来共同控制
											//D6C/T定时器、计数器选择位
											//0选择定时器模式
											//1选择计数器模式
											//D5M1
											//D4M0
											//M1M0工作方式
											//00方式013位定时器/计数器
											//01方式116位定时器/计数器
											//10方式28位自动重装定时器/计数器
											//11方式3仅适用T0分成两个8位计数器,T1停止计数
											//D3GATE门控制位
											//GATE=0;定时器/计数器由TRX(x=0,1)来控制
											//GATE=1;定时器/计数器由TRX(x=0,1)
											//和外部中断引脚(init0,1)来共同控制
											//D2C/T定时器、计数器选择位
											//0选择定时器模式
											//1选择计数器模式
											//D1M1
											//D0M0
											//M1M0工作方式
											//00方式013位定时器/计数器
											//01方式116位定时器/计数器
											//10方式28位自动重装定时器/计数器
											//11方式3仅适用T0分成两个8位计数器,T1停止计数
sfr TL0= 0x8A;				//定时器/计数器0高8位容器 加1计数器
sfr TL1= 0x8B;				//定时器/计数器1高8位容器
sfr TH0= 0x8C;				//定时器/计数器0低8位容器
sfr TH1= 0x8D;				//定时器/计数器1低8位容器

sfr IE = 0xA8;		// 中断允许寄存器		可以位寻址
									//D7 EA  全局中断允许位
									//D6 NULL
									//D5 ET2	定时器/计数器2中断允许位	interrupt 5
									//D4 ES		串行口中断允许位	interrupt 4
									//D3 ET1	定时器/计数器1中断允许位	interrupt 3
									//D2 EX1	外部中断1中断允许位 interr 2
									//D1 ET0	定时器/计数器0中断允许位	interrupt 1
									//D0 EX0	外部中断0中断允许位	interr 0

sfr IP = 0xB8;		//中断优先级寄存器  可位寻址
									//D7 NULL
									//D6 NULL
									//D5 NULL
									//D4 PS 	串行口中断定义优先级控制位
									//   1		串行口中断定义为高优先级中断
									//   2		串行口中断定义为低优先级中断
									//
									//D3	PT1
									//		1		定时器/计数器1中断定义为高优先级中断
									//		0		定时器/计数器1中断定义为低优先级中断
									
									//D2 PX1
									//		1		定时器/计数器0中断定义为高优先级
									//    0		定时器/计数器0中断定义为低优先级
									//D0 PX0
									//		1		外部中断0定义为高优先级中断
									//		0		外部中断0定义为低优先级中断
									
sfr SCON = 0x98;	//串行口控制寄存器	可以进行位寻址
									//D7	SM0
									//D6  SM1
									//方式  SM0 SM1			串行口工作方式
									// 0     0   0			同步移位寄存器方式
									// 1     0   1      10位异步收发(8位数据),波特率可变(定时器1溢出率控制)
									// 2     1   0      11位异步收发(9位数据),波特率固定
									// 3     1   1      11异步收发(9位数据),波特率可变(定时器1溢出率控制)
									//D5   SM2		多机通信控制位  主要用于方式2和方式3
									//D4   REN		允许串行接收位
									//D3	TB8			方式2,3中发送数据的第9位
									//D2	RB8			方式2,3中接收数据的第9位
									//D1	T1			发送中断标志位
									//D0	RI			接收中断标志位

sfr SBUF = 0x99;	//串行数据缓冲区

猜你喜欢

转载自blog.csdn.net/CaptainUsop/article/details/82658305