/*--------------------------------------------------------------------------
REG51.H
Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG51_H__
#define __REG51_H__
/* 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串行数据接受
// P31 TXD串行数据发送
// P32 外部中断0 信号申请
// P33 外部中断1 信号申请
// P34 定时/计数器T0 外部计数脉冲输入
// P35 定时/计数器T1 外部计数脉冲输入
// P36 WR 片外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 0 0区 00H~07H
//0 1 1区 08H~0fH
//1 0 2区 10H~17H
//1 1 3区 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溢出标志位
//D6 TR1 定时器1运行控制位
//D5 TF0 定时器0溢出标志位
//D4 TR0 定时器0运行控制位
//D3 IE1 外部中断1请求标志
//D2 IT1 外部中断1触发方式选择位
//D1 IE0 外部中断0请求标志
//D0 IT0 外部中断0触发方式选择位
sfr TMOD = 0x89;//定时器/计数器 工作方式寄存器 不能位寻址
//确定工作方式和功能
//D7GATE 门控制位
//GATE=0;定时器/计数器由TRX(x=0,1)来控制
//GATE=1;定时器/计数器由TRX(x=0,1)
//和外部中断引脚(init0,1)来共同控制
//D6 C/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)来共同控制
//D2 C/T 定时器、计数器选择位
//0 选择定时器模式
//1 选择计数器模式
//D1 M1
//D0 M0
// M1 M0 工作方式
// 0 0 方式0 13位定时器/计数器
// 0 1 方式1 16位定时器/计数器
// 1 0 方式2 8位自动重装定时器/计数器
// 1 1 方式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中断允许位 interrupt 2
//D1 ET0 定时器/计数器0中断允许位 interrupt 1
//D0 EX0 外部中断0中断允许位 interrupt 0
sfr IP = 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定义为低优先级中断
sfr SCON = 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 接受中断标志位
sfr SBUF = 0x99; //串行数据缓冲区
/*****************************************************************************
下面是位寻址区
上面做过解释的就不在下面一一解释了
******************************************************************************/
/* BIT Register */
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;
/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;
/* IE */
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;
/* IP */
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
/* SCON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;
#endif
*--------------------------------------------------------------------------
REG51.H
Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG51_H__
#define __REG51_H__
/* BYTE Register */
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; 定时器/计数器控制寄存器
sfr TMOD = 0x89; 定时器方式选择寄存器
sfr TL0 = 0x8A; 定时器0低八位
sfr TL1 = 0x8B; 定时器1低八位
sfr TH0 = 0x8C; 定时器0高八位
sfr TH1 = 0x8D; 定时器1高八位
sfr IE = 0xA8; 中断允许寄存器
sfr IP = 0xB8; 中断优先级寄存器
sfr SCON = 0x98; 串行控制寄存器
sfr SBUF = 0x99; 串行数据缓冲器
/* BIT Register */
/* PSW */
sbit CY = 0xD7; PSW.7是Cy即C,来源于最近一次算术指令或逻辑指令执行时软硬件的改写
sbit AC = 0xD6; 辅助进位标志位,用于BCD码的十进制调整运算。当低四位向高四位借进位时Ac被置1,否则清0。此位也可和DA指令结合起来用。
sbit F0 = 0xD5; 用户使用的状态标志位
sbit RS1 = 0xD4; 4组工作寄存器区选择控制位1
sbit RS0 = 0xD3; 4组工作寄存器区选择控制位0
sbit OV = 0xD2; 溢出标志位 在执行算术指令时,指示运算是否产生溢出
sbit P = 0xD0; 奇偶标志位,P=1,A中“1”的个数为奇数,P=0,A中“1”的个数为偶数
/* TCON */ 定时器/计数器控制寄存器
sbit TF1 = 0x8F;定时器/计数器T1的溢出中断请求标志位
sbit TR1 = 0x8E;定时器/计数器T1的计数运行控制位
sbit TF0 = 0x8D;定时器/计数器T0的溢出中断请求标志位
sbit TR0 = 0x8C;定时器/计数器T0的计数运行控制位
sbit IE1 = 0x8B;外部1的中断请求标志位
sbit IT1 = 0x8A;外部中断请求1的电平触发方式位
sbit IE0 = 0x89;外部0的中断请求标志位
sbit IT0 = 0x88;外部中断请求0的电平触发方式位
/* IE */ 中断允许寄存器
sbit EA = 0xAF;中断允许总控制位
sbit ES = 0xAC;串口允许中断位
sbit ET1 = 0xAB;定时器/计数器T1的溢出中断位
sbit EX1 = 0xAA;外部中断1允许位
sbit ET0 = 0xA9;定时器/计数器T0的溢出中断位
sbit EX0 = 0xA8;外部中断0允许位
/* IP */ 中断优先级寄存器IP
sbit PS = 0xBC;串口中断优先级控制位
sbit PT1 = 0xBB;定时器T1优先级控制位
sbit PX1 = 0xBA;外部中断1中断优先级控制位
sbit PT0 = 0xB9;定时器T0优先级控制位
sbit PX0 = 0xB8;外部中断0中断优先级控制位
/* P3 */ P3口的第二作用
sbit RD = 0xB7; 外部数据存储器读选通
sbit WR = 0xB6; 外部数据存储器写选通
sbit T1 = 0xB5; 记时器1外部输入
sbit T0 = 0xB4; 记时器0外部输入
sbit INT1 = 0xB3; 外部中断1
sbit INT0 = 0xB2; 外部中断0
sbit TXD = 0xB1; 串行输出口
sbit RXD = 0xB0; 串行输入口
/* SCON */ 串口中断寄存器
sbit SM0 = 0x9F;串行口工作方式设置
sbit SM1 = 0x9E;串行口工作方式设置
sbit SM2 = 0x9D;多机通讯控制位
sbit REN = 0x9C;允许串行接收位
sbit TB8 = 0x9B;发送的第9位数据
sbit RB8 = 0x9A;接收的第9位数据
sbit TI = 0x99;串行口的发送中断请求标志位
sbit RI = 0x98;串行口的接收中断请求标志位
#endif
KUI 20170519