1. reg52.h头文件的作用

在代码中引用头文件,其实际意义就是将这个头文件中的全部内容放到引用头文件的位置处,免去我们每次编写同类型程序都要将头文件中的语句重复编写。

在代码中加入头文件有两种书写方法,分别为 #include<reg52.h>和
#include"reg52.h"。

当使用<>包含头文件时,编译器先进入到软件安装文件夹处开始搜索这个文件,例如Keil/C51/INC这个文件夹下,如果这个文件夹下没有引用的头文件,编译器将会报错。

当使用“ ”包含头文件时,编译器先进入到当前工程所在文件夹处开始搜索该头文件,如果当前工程所在文件夹下没有该头文件,编译器将继续回到软件安装文件夹处搜索这个文件,若找不到该头文件,编译器将报错。

以下为reg52.h的内容:

/*--------------------------------------------------------------------------
REG52.H

Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/


#ifndef __REG52_H__
#define __REG52_H__


/*  特殊字节(8位)寄存器 */
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;	//定时器/计数器 0 和 1 控制
sfr	TMOD	=	0x89;	//定时器/计数器 0 和 1 模式
sfr	TL0	=	0x8A;	//定时器/计数器 0 低8位寄存器 
sfr	TL1	=	0x8B;	//定时器/计数器 1低8位寄存器  
sfr	TH0	=	0x8C;	//定时器/计数器 0高8位寄存器  
sfr	TH1	=	0x8D;	//定时器/计数器 1高8位寄存器
sfr	IE	=	0xA8;	//中断允许寄存器
sfr	IP	=	0xB8;	//中断优先寄存器(低)
sfr	SCON	=	0x98;	//串口控制寄存器
sfr	SBUF	=	0x99;	//串口数据缓冲器

/*  8052扩展寄存器 */
sfr	T2CON	=	0xC8;	//定时器/计数器2 控制
sfr	RCAP2L	=	0xCA;	//定时器/计数器2 重载/捕捉低位
sfr	RCAP2H	=	0xCB;	//定时器/计数器2 重载/捕捉高位
sfr	TL2	=	0xCC;	//定时器/计数器2 低位
sfr	TH2	=	0xCD;	//定时器/计数器2 高位



/*  位寄存器  */


/*  PSW (程序状态字寄存器) */
sbit	CY	=	PSW^7;	//进位、借位标志。进位、借位CY=1;否则CY=0
sbit	AC	=	PSW^6;	//辅助进位、借位标志。当D3向D4有借位或进位时,AC=1;否则AC=0
sbit	F0	=	PSW^5;	//用户标志位
sbit	RS1	=	PSW^4;	//寄存器组选择控制位1
sbit	RS0	=	PSW^3;	//寄存器组选择控制位0
sbit	OV	=	PSW^2;	//溢出标志。有溢出OV=1,否则OV=0
sbit	F1	=	PSW^1;	//保留位,无定义
sbit	P	=	PSW^0;	//8052 only 奇偶校验标志位,由硬件置位或清0;
				//存在ACC中的运算结果有奇数个1时P=1,否则P=0


/*  TCON (定时器/计数器 0 和 1 控制) */
sbit	TF1	=	TCON^7;	//定时器1溢出标志位。当字时器1计满溢出时, 
				//由硬件使TF1置“1”,并且申请中断。
				//进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清 “0”
sbit	TR1	=	TCON^6;	//定时器1运行控制位。由软件清“0”关闭定时器1。
				//当GATE=1,且INT1为高电平时,TR1置“1”启动定时器1;
				//当GATE=0,TR1置“1” 启动定时器1
sbit	TF0	=	TCON^5;	//定时器0溢出标志。其功能及操作情况同TF1。
sbit	TR0	=	TCON^4;	//定时器0运行控制位。其功能及操作情况同TR1。
sbit	IE1	=	TCON^3;	//外部中断1请求标志。
sbit	IT1	=	TCON^2;	//外部中断1触发方式选择位。
sbit	IE0	=	TCON^1;	//外部中断0请求标志。
sbit	IT0	=	TCON^0;	//外部中断0触发方式选择位。


/* IE (中断允许寄存器) */
sbit	EA	=	IE^7;	//允许/禁止总中断
sbit	ET2	=	IE^5;	//8052 only 允许/禁止定时器2(T2)中断
sbit	ES	=	IE^4;	//允许/禁止串口中断
sbit	ET1	=	IE^3;	//允许/禁止T1溢出中断
sbit	EX1	=	IE^2;	//允许/禁止外部中断1(INT1)
sbit	ET0	=	IE^1;	//允许/禁止T0溢出中断
sbit	EX0	=	IE^0;	//允许/禁止外部中断0(INT0)


/* IP (中断优先寄存器低) */
sbit	PT2	=	IP^5;	//定时/计数器T2优先级设定位。
sbit	PS	=	IP^4;	//串行口优先级设定位;
sbit	PT1	=	IP^3;	//定时/计数器T1优先级设定位;
sbit	PX1	=	IP^2;	//外部中断0优先级设定位;
sbit	PT0	=	IP^1;	//定时/计数器T0优先级设定位;
sbit	PX0	=	IP^0;	//外部中断0优先级设定位;

/* P3 (第二功能) */
sbit	RD	=	P3^7;	//外部数据存储器读脉冲
sbit	WR	=	P3^6;	//外部数据存储器写脉冲
sbit	T1	=	P3^5;	//定时器/计数器1外部输入
sbit	T0	=	P3^4;	//定时器/计数器0外部输入
sbit	INT1	=	P3^3;	//外部中断0。
sbit	INT0	=	P3^2;	//外部中断1。
sbit	TXD	=	P3^1;	//串行数据输出口
sbit	RXD	=	P3^0;	//串行数据输入口


/* SCON(控制寄存器,它是一个可寻址的专用寄存器,用于串行数据的通信控制) */	
sbit	SM0	=	SCON^7;	//串行口工作方式控制位0。
sbit	SM1	=	SCON^6;	//串行口工作方式控制位1。
sbit	SM2	=	SCON^5;	//多机通信控制位。 
sbit	REN	=	SCON^4;	//允许接收位。用于控制数据接收的允许和禁止,
				// ren=1时,允许接收,ren=0时,禁止接收。
sbit	TB8	=	SCON^3;	//发送接收数据位8。
sbit	RB8	=	SCON^2;	//接收数据位8。
sbit	TI	=	SCON^1;	//发送中断标志位。
sbit	RI	=	SCON^0;	//接收中断标志位。 


/*  P1(第二功能) */
sbit	T2EX	=	P1^1;	// 8052 only	定时/计数器2捕捉/重装入触发
sbit	T2	=	P1^0;	// 8052 only	定时/计数器2外部输入


/*  T2CON  (定时器/计数器2 控制) */
sbit	TF2	=	T2CON^7;	//定时器2 溢出标记
sbit	EXF2	=	T2CON^6;	//定时器2 外部标记
sbit	RCLK	=	T2CON^5;	//0=串口时钟应用定时器1 溢出,  1=定时器 2
sbit	TCLK	=	T2CON^4;	//0=串口时钟应用定时器1 溢出,  1=定时器 2
sbit	EXEN2	=	T2CON^3;	//定时器 2 外部允许
sbit	TR2	=	T2CON^2;	//0=停止定时器, 1=开始定时器
sbit	C_T2	=	T2CON^1;	//0=定时器, 1=计数器
sbit	CP_RL2	=	T2CON^0;	//0=重载, 1=捕捉选择。


#endif