解析reg52.h

reg52.h是51单片机编程中重要的头文件,定义了寄存器和位寻址符。sfr用于声明寄存器,如P0-3,PSW等,而sbit则用于位操作,方便对寄存器的特定位进行控制,如PSW的CY、AC等标志位。文章详细介绍了这些概念及其在80C52中的扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在51单片机编程中永远绕不过去的一个东西就是reg52.h头文件,这个头文件直接赋予了编程人员控制51单片机的寄存器的能力因此深入了解reg52.h还是很有必要的。

先看一下reg52.h的全貌(直接从vscode中查看)

/*--------------------------------------------------------------------------
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__

/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;
sfr TCON  = 0x88;
sfr TMOD  = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IE    = 0xA8;
sfr IP    = 0xB8;
sfr SCON  = 0x98;
sfr SBUF  = 0x99;

/*  8052 Extensions  */
sfr T2CON  = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2    = 0xCC;
sfr TH2    = 0xCD;


/*  BIT Registers  */
/*  PSW  */
sbit CY    = PSW^7;
sbit AC    = PSW^6;
sbit F0    = PSW^5;
sbit RS1   = PSW^4;
sbit RS0   = PSW^3;
sbit OV    = PSW^2;
sbit P     = PSW^0; //8052 only

/*  TCON  */
sbit TF1   = TCON^7;
sbit TR1   = TCON^6;
sbit TF0   = TCON^5;
sbit TR0   = TCON^4;
sbit IE1   = TCON^3;
sbit IT1   = TCON^2;
sbit IE0   = TCON^1;
sbit IT0   = TCON^0;

/*  IE  */
sbit EA    = IE^7;
sbit ET2   = IE^5; //8052 only
sbit ES    = IE^4;
sbit ET1   = IE^3;
sbit EX1   = IE^2;
sbit ET0   = IE^1;
sbit EX0   = IE^0;

/*  IP  */
sbit PT2   = IP^5;
sbit PS    = IP^4;
sbit PT1   = IP^3;
sbit PX1   = IP^2;
sbit PT0   = IP^1;
sbit PX0   = IP^0;

/*  P3  */
sbit RD    = P3^7;
sbit WR    = P3^6;
sbit T1    = P3^5;
sbit T0    = P3^4;
sbit INT1  = P3^3;
sbit INT0  = P3^2;
sbit TXD   = P3^1;
sbit RXD   = P3^0;

/*  SCON  */
sbit SM0   = SCON^7;
sbit SM1   = SCON^6;
sbit SM2   = SCON^5;
sbit REN   = SCON^4;
sbit TB8   = SCON^3;
sbit RB8   = SCON^2;
sbit TI    = SCON^1;
sbit RI    = SCON^0;

/*  P1  */
sbit T2EX  = P1^1; // 8052 only
sbit T2    = P1^0; // 8052 only
             
/*  T2CON  */
sbit TF2    = T2CON^7;
sbit EXF2   = T2CON^6;
sbit RCLK   = T2CON^5;
sbit TCLK   = T2CON^4;
sbit EXEN2  = T2CON^3;
sbit TR2    = T2CON^2;
sbit C_T2   = T2CON^1;
sbit CP_RL2 = T2CON^0;

#endif

分段研究

寄存器的声明

先来看一下前21/26行代码,sfr是keil中自定义的一个标识符,用于标识一个寄存器,以第一行中的

sfr P0    = 0x80;为例子

声明一个寄存器的名称为P0,寄存器的起始位置位于0x80

前21行为80C51和80C52公有寄存器,后五行为80C52独有寄存器。

在寻址过程中,使用的方式为按字节寻址的方法,来看一下c51中寄存器在内存中的分布情况

 

/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;
sfr TCON  = 0x88;
sfr TMOD  = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IE    = 0xA8;
sfr IP    = 0xB8;
sfr SCON  = 0x98;
sfr SBUF  = 0x99;

/*  8052 Extensions  */
sfr T2CON  = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2    = 0xCC;
sfr TH2    = 0xCD;

位寻址符

在reg52.h中有另一类变量,使用C52专属的标识符sbit定义,定义的变量被称为位寻址符。

要理解下述中的含义核心在于对sbit的理解,由于在单片机中经常要对寄存器的某一位进行操作(寄存器储数值的一位通常会对应一个针脚输出的电平),sbit的作用就是将一个变量与寄存器中的一个位绑定,使得能直接很方便的操作其中一个位,而不需要做复杂的异或运算。

/*  BIT Registers  */
/*  PSW  */
sbit CY    = PSW^7;
sbit AC    = PSW^6;
sbit F0    = PSW^5;
sbit RS1   = PSW^4;
sbit RS0   = PSW^3;
sbit OV    = PSW^2;
sbit P     = PSW^0; //8052 only

/*  TCON  */
sbit TF1   = TCON^7;
sbit TR1   = TCON^6;
sbit TF0   = TCON^5;
sbit TR0   = TCON^4;
sbit IE1   = TCON^3;
sbit IT1   = TCON^2;
sbit IE0   = TCON^1;
sbit IT0   = TCON^0;

/*  IE  */
sbit EA    = IE^7;
sbit ET2   = IE^5; //8052 only
sbit ES    = IE^4;
sbit ET1   = IE^3;
sbit EX1   = IE^2;
sbit ET0   = IE^1;
sbit EX0   = IE^0;

/*  IP  */
sbit PT2   = IP^5;
sbit PS    = IP^4;
sbit PT1   = IP^3;
sbit PX1   = IP^2;
sbit PT0   = IP^1;
sbit PX0   = IP^0;

/*  P3  */
sbit RD    = P3^7;
sbit WR    = P3^6;
sbit T1    = P3^5;
sbit T0    = P3^4;
sbit INT1  = P3^3;
sbit INT0  = P3^2;
sbit TXD   = P3^1;
sbit RXD   = P3^0;

/*  SCON  */
sbit SM0   = SCON^7;
sbit SM1   = SCON^6;
sbit SM2   = SCON^5;
sbit REN   = SCON^4;
sbit TB8   = SCON^3;
sbit RB8   = SCON^2;
sbit TI    = SCON^1;
sbit RI    = SCON^0;

/*  P1  */
sbit T2EX  = P1^1; // 8052 only
sbit T2    = P1^0; // 8052 only
             
/*  T2CON  */
sbit TF2    = T2CON^7;
sbit EXF2   = T2CON^6;
sbit RCLK   = T2CON^5;
sbit TCLK   = T2CON^4;
sbit EXEN2  = T2CON^3;
sbit TR2    = T2CON^2;
sbit C_T2   = T2CON^1;
sbit CP_RL2 = T2CON^0;

### 回答1: reg52.h头文件是一种常用的基于8051单片机的C语言编程库文件,用于编写控制和操作8051单片机的程序。要下载reg52.h头文件,可以按照以下步骤进行操作: 1. 打开互联网浏览器,进入搜索引擎网站,例如Google、百度等。 2. 在搜索引擎的搜索框中输入关键字“reg52.h头文件下载”。点击“搜索”按钮,将会出现相关的搜索结果。 3. 在搜索结果中,寻找可靠且权威的网站,例如官方网站或开源项目网站,以确保所下载的文件是正版且可信赖的。 4. 点击相应的下载链接或按钮,进入文件下载页面。 5. 根据网站的提示,选择下载reg52.h头文件的方式,可以是直接点击下载链接,也可以是通过右键菜单选择“另存为”或“下载链接”。 6. 确保所选择的下载文件是以.h为后缀的C语言头文件,并且与你需要的版本相匹配。 7. 设置下载路径,选择一个合适的文件夹保存下载的reg52.h头文件。建议将其保存到你的项目文件夹中,以便日后使用。 8. 点击下载或保存按钮,等待文件下载完成。 9. 下载完成后,打开保存的文件夹,确认reg52.h头文件已成功下载并保存。 10.reg52.h头文件拷贝到你的C编译器或集成开发环境(IDE)的工程目录中,或者你的项目文件夹中。 现在,你已经成功下载了reg52.h头文件,可以在你的8051单片机的C语言项目中使用它来进行编程和控制操作了。 ### 回答2: 要下载reg52.h头文件,首先需要找到一个可靠的来源并下载相关的压缩文件。以下是一种常见的方式: 1. 打开一个可信赖的网站,如GitHub(https://github.com/)或者开源中国(https://gitee.com/)。在搜索栏中输入“reg52.h”进行搜索。 2. 在搜索结果中浏览各个项目,找到包含reg52.h头文件的项目。通常,该项目会是一个开源项目,比如51单片机常用的库函数或者嵌入式系统的相关代码。 3. 进入相关项目的页面,找到可供下载的压缩文件(通常是.zip或.tar.gz格式)。点击下载按钮将压缩文件保存到本地计算机的合适位置。 4. 解压缩下载的文件。如果是.zip压缩包,可以使用系统自带的解压工具或者第三方解压软件进行解压缩。如果是.tar.gz压缩包,需要使用命令行或者第三方软件进行解压缩。 5. 解压缩后,你会得到一个或多个文件,其中应该包含了reg52.h头文件。将该头文件复制到你的项目文件夹中的合适位置。 现在,你已经成功下载并获取到了reg52.h头文件,可以在你的编程项目中使用它了。在编译时,确保正确引入该头文件并设置正确的路径,以便编译器能够找到该文件并正确解析其中的内容。 ### 回答3: reg52.h是一种用于51系列单片机的头文件,包含了51系列单片机的寄存器和相关函数的定义。要下载该头文件,可以按照以下步骤进行操作: 1. 打开浏览器,进入搜索引擎(如百度、谷歌)。 2. 在搜索栏中输入“reg52.h下载”等相关关键词,进行搜索。 3. 在搜索结果中,会出现一些相关的网站链接,点击其中一个链接。 4. 进入所选链接的网站,通常会看到一个下载按钮或者下载链接。 5. 点击下载按钮或者下载链接,开始下载reg52.h文件。 6. 下载完成后,将reg52.h文件保存到本地计算机的某个目录中,方便后续引用和使用。 需要注意的是,在下载和使用该头文件之前,可能需要确保你的开发环境已经安装了相应的单片机开发工具和编译器,以确保能够正确地引用和编译该头文件。另外,下载的文件来源需要可信,可以选择官方网站或者知名的开发者社区进行下载,以保证文件的完整性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值