reg52.h中文详细注释解析

REG52.H是一个用于80C52和80C32微控制器的通用头文件。其中定义了各种特殊字节寄存器,如P0口、P1口、P2口、P3口、程序状态字寄存器、累加器、B特殊寄存器、堆栈指针寄存器和数字指针(低位/高位)等。此外,该头文件还定义了一些与定时器/计数器和电源控制相关的寄存器,例如PCON和TCON。定时器/计数器模式的选择由TMOD寄存器中的位控制。

现在将此文件汉化 然后用vscode 进行开发维护时,宏定义有中文提示 非常方面.
在程序编写过程中 只需要替换keil 安装目录下 的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;         // 数字指针(高位)
/*
电源控制寄存器
 
与串行口相关的只有SMOD ,其他的可以自己去查资料
-------------扩展资料---------------
SMOD:
在串口工作方式1,2,3中
是波特率加倍位
(产生高波特率时启用平时不用,比如用11.0592晶振产生57600波特率时就要设置成SMOD=1)
 
SMOD=1:
波特率加倍(PCON=0X80;)
SMOD=0:
波特率不加倍(PCON=0X80;)
(PCON=0X00;)
 
 
*/
sfr PCON = 0x87;
sfr TCON = 0x88; // 定时器/计数器 0 和 1 控制
 
 
/*
定时器/计数器 0 和 1 模式
 
GATE  C/T  M1  M0  GATE  C/T  M1  M0
--------------------------------------------
位                  符号          功能
TMOD.7/ GATE                  TMOD.7控制定时器1,置1时只有在INT1脚为高及TR1控制位置1       
                                    时才可打开定时器/计数器1。
TMOD.3/ GATE                  TMOD.3控制定时器0,置1时只有在INT0脚为高及TR0控制位置1       
                                    时才可打开定时器/计数器0。
TMOD.6/ C/T                  TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器       
                                    (从内部系统时钟输入),置1用作计数器(从T1/P3.5脚输入)
TMOD.2/ C/T          TMOD.2控制定时器0用作定时器或计数器,清零则用作定时器       
                                    (从内部系统时钟输入),置1用作计数器(从T0/P3.4脚输入)
TMOD.5/TMOD.4 M1、M0         定时器定时器/计数器1模式选择
 
---------------------------------------------
 
0 0                  13位定时器/计数器,兼容8048定时模式,TL1只用低5位参与分频,TH1整个8位全用。
0 1                 16位定时器/计数器,TL1、TH1全用
1 0         8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1.
1 1          定时器/计数器1此时无效(停止计数)。TMOD.1/TMOD.0 M1、M0 定时器/计数器0模式选择
0 0          13位定时器/计数器,兼容8048定时模式,TL0只用低5位参与分频,TH0整个8位全用。
0 1          16位定时器/计数器,TL0、TH0全用
1 0        8位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0
1 1         定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制。TH0仅作为一个8位定时器,由定时器1的控制位控制。
 
 
*/
sfr TMOD = 0x89;
 
 
 
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 控制) */
 
/*定时器1溢出标志位。
 
当定时器1计满溢出时, 由硬件使TF1置“1”,并且申请中断。
进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清 “0”*/
sbit TF1 = TCON ^ 7;
/*定时器1运行控制位。
 
由软件清“0”关闭定时器1。
当GATE=1,且INT1为高电平时,TR1置“1”启动定时器1;
当GATE=0,TR1置“1” 启动定时器1*/
sbit TR1 = TCON ^ 6;
/*
定时器0溢出标志。
 
T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置
“1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询
软件清0)。
*/
sbit TF0 = TCON ^ 5;
 
/*定时器0运行控制位。
 
由软件清“0”关闭定时器0。
当GATE=1,且INT0为高电平时,TR0置“1”启动定时器0;
当GATE=0,TR0置“1” 启动定时器0*/
sbit TR0 = TCON ^ 4;
 
/*
外部中断1请求标志。
 
 
外部中断1请求源(INT1/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该
中断时由硬件清“0”IE1。
 
*/
sbit IE1 = TCON ^ 3;
 
/*
外部中断1触发方式选择位。
 
IT1=0,INT1/P3.3引脚上的低电平信号可触发外部中断1。IT1=1,外部中断1为下降沿触发方式。
*/
sbit IT1 = TCON ^ 2;
/*
外部中断0请求标志。
 
外部中断0请求源(INT0/P3.2)标志。IE0=1外部中断0向CPU请求中断,当CPU响应外
部中断时,由硬件清“0”IE0(边沿触发方式)。
*/
sbit IE0 = TCON ^ 1;
 
/*
外部中断0触发方式选择位。
 
外部中断0中断源类型选择位。IT0=0,INT0/P3.2引脚上的低电平可触发外部中断0。
IT0=1,外部中断0为下降沿触发方式。
*/
sbit IT0 = TCON ^ 0;
 
/* IE (中断允许寄存器) */
 
/*
允许/禁止总中断
CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自
己的中断允许控制位控制。
*/
sbit EA = IE ^ 7;
 
/*
8052 only 允许/禁止定时器2(T2)中断
 
定时/计数器T2的溢出中断允许位。ET2=1,允许T2中断;ET2=0,禁止T2中断。
*/
sbit ET2 = IE ^ 5;
 
/*
允许/禁止串口中断
 
串行口1中断允许位。ES=1,允许串行口1中断;ES=0,禁止串行口1中断。
 
*/
sbit ES = IE ^ 4;
 
/*允许/禁止T1溢出中断
 
定时/计数器T1的溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。
 
*/
sbit ET1 = IE ^ 3;
/*
允许/禁止外部中断1[INT1].
 
外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。
 
*/
sbit EX1 = IE ^ 2;
/*
允许/禁止T0溢出中断
 
ET0=1,允许T0中断;ET0=0禁止T0中断。
*/
sbit ET0 = IE ^ 1;
 
/*
允许/禁止外部中断0(INT0)
 
EX0=1,允许中断;EX0=0禁止中断。
*/
sbit EX0 = IE ^ 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* IP (中断优先寄存器低)
 
2. 中断优先级控制寄存器IP/XICON和IPH
传统8051单片机具有两个中断优先级,即高优先级和低优先级,可以实现两级中断嵌套。
STC89C52系列单片机通过设置新增加的特殊功能寄存器(IPH/XICON)中的相应位,可将中断优
先级设置为4个中断优先级;如果只设置IP,那么中断优先级只有两级,与传统8051单片机两
级中断优先级完全兼容。
一个正在执行的低优先级中断能被高优先级中断所中断,但不能被另一个低优先级中断所
中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指令才能响应新的中
断申请。以上所述可归纳为下面两条基本规则:
⒈ 低优先级中断可被高优先级中断所中断,反之不能。
⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断
STC89C52系列单片机的片内各优先级控制寄存器的格式如下:
IPH: 中断优先级控制寄存器高(不可位寻址)
SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0
IPH B7H name PX3H PX2H PT2 PSH PT1H PX1H PT0H PX0H
XICON : 辅助中断控制寄存器 (可位寻址)
SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0
XICON C0H name PX3 EX3 IE3 IT3 PX2 EX2 IE2 IT2
IP : 中断优先级控制寄存器低 (可位寻址)
SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0
IP B8H name - - PT2 PS PT1 PX1 PT0 PX0
PX3H, PX3: 外部中断3优先级控制位。
当PX3H=0且PX3=0时,外部中断3为最低优先级中断(优先级0)
当PX3H=0且PX3=1时,外部中断3为较低优先级中断(优先级1)
当PX3H=1且PX3=0时,外部中断3为较高优先级中断(优先级2)
当PX3H=1且PX3=1时,外部中断3为最高优先级中断(优先级3)
PX2H, PX2: 外部中断2优先级控制位。
当PX2H=0且PX2=0时,外部中断2为最低优先级中断(优先级0)
当PX2H=0且PX2=1时,外部中断2为较低优先级中断(优先级1)
当PX2H=1且PX2=0时,外部中断2为较高优先级中断(优先级2)
当PX2H=1且PX2=1时,外部中断2为最高优先级中断(优先级3)
163
STC MCU Limited.
南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947
STC89C52系列单片机指南 官方网站:[url]www.STCMCU.com[/url] 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司
PT2H, PT2: 定时器2中断优先级控制位。
当PT2H=0且PT2=0时,定时器2中断为最低优先级中断(优先级0)
当PT2H=0且PT2=1时,定时器2中断为较低优先级中断(优先级1)
当PT2H=1且PT2=0时,定时器2中断为较高优先级中断(优先级2)
当PT2H=1且PT2=1时,定时器2中断为最高优先级中断(优先级3)
PSH, PS: 串口1中断优先级控制位。
当PSH=0且PS=0时,串口1中断为最低优先级中断(优先级0)
当PSH=0且PS=1时,串口1中断为较低优先级中断(优先级1)
当PSH=1且PS=0时,串口1中断为较高优先级中断(优先级2)
当PSH=1且PS=1时,串口1中断为最高优先级中断(优先级3)
PT1H, PT1: 定时器1中断优先级控制位。
当PT1H=0且PT1=0时,定时器1中断为最低优先级中断(优先级0)
当PT1H=0且PT1=1时,定时器1中断为较低优先级中断(优先级1)
当PT1H=1且PT1=0时,定时器1中断为较高优先级中断(优先级2)
当PT1H=1且PT1=1时,定时器1中断为最高优先级中断(优先级3)
PX1H, PX1: 外部中断1优先级控制位。
当PX1H=0且PX1=0时,外部中断1为最低优先级中断(优先级0)
当PX1H=0且PX1=1时,外部中断1为较低优先级中断(优先级1)
当PX1H=1且PX1=0时,外部中断1为较高优先级中断(优先级2)
当PX1H=1且PX1=1时,外部中断1为最高优先级中断(优先级3)
PT0H, PT0: 定时器0中断优先级控制位。
当PT0H=0且PT0=0时,定时器0中断为最低优先级中断(优先级0)
当PT0H=0且PT0=1时,定时器0中断为较低优先级中断(优先级1)
当PT0H=1且PT0=0时,定时器0中断为较高优先级中断(优先级2)
当PT0H=1且PT0=1时,定时器0中断为最高优先级中断(优先级3)
PX0H, PX0: 外部中断0优先级控制位。
当PX0H=0且PX0=0时,外部中断0为最低优先级中断(优先级0)
当PX0H=0且PX0=1时,外部中断0为较低优先级中断(优先级1)
当PX0H=1且PX0=0时,外部中断0为较高优先级中断(优先级2)
当PX0H=1且PX0=1时,外部中断0为最高优先级中断(优先级3)
中断优先级控制寄存器IP和IPH的各位都由可用户程序置“1”和清“0”。但IP寄存器可
位操作,所以可用位操作指令或字节操作指令更新IP的内容。而IPH寄存器的内容只能用字节
操作指令来更新。STC89C52系列单片机复位后IP和IPH均为00H,各个中断源均为低优先级中
断。
 
*/
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(控制寄存器,它是一个可寻址的专用寄存器,用于串行数据的通信控制) */
 
/* 串行口工作方式控制位0。
 
工作方式的分类:
 
SM0----SM1----工作方式----说明     
0   0   0        移位寄存器
0   1   1        10位异步收发器(8位数据)
1   0   2        11位异步收发器(8位数据)
1   1   3        11位异步收发器(9位数据)
 
 
 
*/
sbit SM0 = SCON ^ 7;
/* 串行口工作方式控制位1。
 
工作方式的分类:
 
SM0----SM1----工作方式----说明     
0   0   0        移位寄存器
0   1   1        10位异步收发器(8位数据)
1   0   2        11位异步收发器(8位数据)
1   1   3        11位异步收发器(9位数据)
*/
sbit SM1 = SCON ^ 6;
sbit SM2 = SCON ^ 5; // 多机通信控制位。
sbit REN = SCON ^ 4; // 允许接收位。用于控制数据接收的允许和禁止,ren=1时,允许接收,ren=0时,禁止接收。
sbit TB8 = SCON ^ 3; // 发送接收数据位8。(校验位)
sbit RB8 = SCON ^ 2; // 接收数据位8。(校验位)
/*
// 发送中断标志位。
 
如果TI=1,表示已经结束一帧数据的发送,
 
可由软件查询TI标志,也可向CPU申请中断
 
(注意:TI在任何工作方式下,都必须由软件清0才能再次发送数据)
 
中断地址:0023H
 
由于TI和RI 的中断入口相同,所以接收和发送时,需要在中断函数查询TI和RI的值做判断处理
*/
sbit TI = SCON ^ 1;         
 
/*
// 接收中断标志位。
 
如果RI=1,表示一帧数据接收结束.
 
可由软件查询RI标志,也可向CPU申请中断.
 
(注意:RI在任何工作方式下,都必须由软件清0才能再次发送数据)
 
中断地址:0023H
 
由于TI和RI 的中断入口相同,所以接收和发送时,需要在中断函数查询TI和RI的值做判断处理
*/
sbit RI = SCON ^ 0;         
 
 
/*  P1(第二功能) */
sbit T2EX = P1 ^ 1; // 8052 only        定时/计数器2捕捉/重装入触发
sbit T2 = P1 ^ 0;        // 8052 only        定时/计数器2外部输入
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*  T2CON  (定时器/计数器2 控制) */
 
/*
定时器2 溢出标记
 
定时器2 溢出标志。定时器2溢出时置位,必须由软件清除。当RCLK或TCLK=1 时,
 
*/
sbit TF2 = T2CON ^ 7;
 
/*
定时器2 外部标记
 
定时器2外部标志。当EXEN2=1且T2EX的负跳变产生捕获或重装时,EXF2置位。定
时器2 中断使能时,EXF2=1将使CPU从中断向量处执行定时器2 中断子程序。EXF2
位必须用软件清零。在递增/递减计数器模式(DCEN=1)中,EXF2不会引起中断
*/
sbit EXF2 = T2CON ^ 6;       
 
/*
接收时钟标识
 
.0=串口时钟应用定时器1 溢出,  1=定时器 2
RCLK : RCLK置位时,定时器2的溢出脉冲作为串行口模式1和模式3的接收时钟。RCLK=0时,将定时器1的溢出脉冲作为接收时钟
*/
sbit RCLK = T2CON ^ 5;         
 
/*
发送时钟标志.
 
0=串口时钟应用定时器1 溢出,  1=定时器 2
TCLK : TCLK置位时,定时器2的溢出脉冲作为串行口模式1和模式3的发送时钟。TCLK=0时,将定时器1的溢出脉冲作为发送时钟
 
 
 
*/
sbit TCLK = T2CON ^ 4;       
 
/*
定时器 2 外部允许
 
定时器 2 外部使能标志。当其置位且定时器2未作为串行口时钟时,允许T2EX的负跳变产生捕获或重装。EXEN2=0 时,T2EX的跳变对定时器2无效
 
 
*/
sbit EXEN2 = T2CON ^ 3;       
sbit TR2 = T2CON ^ 2;         // 0=停止定时器, 1=开始定时器
 
/*
定时器/计数器选择
 
0 = 内部定时器(OSC/12 或OSC/6)
1 = 外部事件计数器(下降沿触发)
*/
sbit C_T2 = T2CON ^ 1;         
 
 
/* 重载/ 重装标志
 
0=重载, 1=捕捉选择
CP/RL2 : / 重装标志。置位:EXEN2=1 时,T2EX 的负跳变产生捕获。 清零:EXEN2=0 时,
定时器2溢出或T2EX 的负跳变都可使定时器自动重装。当RCLK=1 或TCLK=1时,该位无效且定时器强制为溢出时自动重装
 
 
 
 
*/
sbit CP_RL2 = T2CON ^ 0;
 
 
 
#endif
物联沃分享整理
物联沃-IOTWORD物联网 » reg52.h中文详细注释解析

发表评论