/*--------------------------------------------------------------------------
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;
/*
D7 D6 D5 D4 D3 D2 D1 D0
GATE C/T M1 M0 GATE C/T M1 M0
GATE=1 T0/T1 必须在INT0/INT1 是高点位才初始化
C/T =1 使用外部引脚进行计数脉冲
C/T =0 使用TH TL 做定时器
计数器工作模式
M1 M0 工作模式 说明
0 0 0 13位计时计数器 8192
0 1 1 16位计时计数器 65536
1 0 2 8位计数器,可自动重新载入计数值 256
1 1 3 当两组独立的8位计数器 256 T0 T1不能同时用
*/
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;
sfr T2CON = 0xC8;
sfr T2MOD = 0xC9;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
/* BIT Registers */
/*程序状态字*/
/* PSW */
/*CY=1 表示运算有进位*/
sbit CY = PSW^7;
/*补助进位 AC=1 表示运算时低4位有进位产生*/
sbit AC = PSW^6;
/*用户自行设置*/
sbit F0 = PSW^5;
/*
RS1 RS0
0 0 寄存器组0
0 1 寄存器组1
1 0 寄存器组2
1 1 寄存器组3
*/
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
/*OV=1 表示有溢出产生*/
sbit OV = PSW^2;
/*P=0 A中1的个数为偶数*/
sbit P = PSW^0; //8052 only
/*计数器控制寄存器*/
/* TCON */
/*TF1=1 T1有中断产生*/
sbit TF1 = TCON^7;
/*TR1=1 T1开始运行*/
sbit TR1 = TCON^6;
/*TF0=1 T0 有中断产生*/
sbit TF0 = TCON^5;
/*TR0=1 T0 开始运行*/
sbit TR0 = TCON^4;
/*IE1/0 =1 INT1/0 有中断产生*/
sbit IE1 = TCON^3;
/*IT1/0 =1 INT1/0为下降沿触发,IT1/0 =1, INT1/0 为上升沿触发*/
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
/*中断允许寄存器*/
/* IE */
/*EA=1 整体中断允许位*/
sbit EA = IE^7;
/*ET2=1 T2 中断允许*/
sbit ET2 = IE^5; //8052 only
/*ES=1 串行允许位*/
sbit ES = IE^4;
/*ET1=1 T1中断允许*/
sbit ET1 = IE^3;
/*INT1 中断允许位*/
sbit EX1 = IE^2;
/*T0 中断允许位*/
sbit ET0 = IE^1;
/*INT0 中断允许位*/
sbit EX0 = IE^0;
/*中断优先次序寄存器*/
/* IP */
/*T2*/
sbit PT2 = IP^5;
/*串行口*/
sbit PS = IP^4;
/*T1*/
sbit PT1 = IP^3;
/*INT1*/
sbit PX1 = IP^2;
/*T0*/
sbit PT0 = IP^1;
/*INT0*/
sbit PX0 = IP^0;
/* P3 */
sbit RD = P3^7;
sbit WR = P3^6;
/*定时器1*/
sbit T1 = P3^5;
/*定时器0*/
sbit T0 = P3^4;
/*中断1*/
sbit INT1 = P3^3;
/*中断0*/
sbit INT0 = P3^2;
/*串口发*/
sbit TXD = P3^1;
/*串口收*/
sbit RXD = P3^0;
/*串行口控制寄存器*/
/* SCON */
/*
SM0 SM1 工作模式 说明 波特率
0 0 0 移位寄存器 F/2
0 1 1 8bit UART T1 SMOD 决定
1 0 2 9bit UART F/64 F/32
1 1 3 9bit UART T1 SMOD 决定
*/
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
/*
工作模式0 SM2=0
工作模式1 SM2=1 只有收到有效的停止位才激活RI
工作模式2/3 多机通讯控制位 SM2=1 则接受的第9位数据为0 时不激活RI
*/
sbit SM2 = SCON^5;
/*REN=1 允许接收数据*/
sbit REN = SCON^4;
/*模式2 3时为第9位的 发送位 */
sbit TB8 = SCON^3;
/*模式2 3时为第9位的 接收位 方式1 SM2=1,RB8为接收停止位 */
sbit RB8 = SCON^2;
/*TI=1 表示UART 传送完成 产生中断*/
sbit TI = SCON^1;
/*RI=1 表示UART 接收完成 产生中断*/
sbit RI = SCON^0;
/*
PCON
D7 D6 D5 D4 D3 D2 D1 D0
SMOD CF1 GF0 PD IDL
SMOD=1 波特率倍增位是 16位 SMOD=0是32位
PD=1 进入停止模式 复位或外部中断产生时回复
闲置模式控制位 IDL=1 进入闲置模式 复位或者重新上电时恢复
*/
/*sbit SMOD = PCON^7;*/
/*
常用波特率计算 11.0592M
波特率 TH1 SMOD
1200 E8 0
2400 F4 0
4800 FA 0
9600 FD 0
19200 FD 1
方式1
SMOD=0 brate = 1/32 * fc/(12*(256-TH1))
SMOD=1 brate = 1/16 *fc/(12*(256-TH1))
方式2
SMOD=0 brate = 1/32 * fc/12
SMOD=1 brate = 1/16 *fc/12
*/
/* P1 */
sbit T2EX = P1^1; // 8052 only
sbit T2 = P1^0; // 8052 only
/*定时器T2*/
/* T2CON */
/*T2中断溢出标志位 方式2 3 置TF2 方式3不置*/
sbit TF2 = T2CON^7;
/*T2 外部中断标志位,EXF2=1 P1.1发生下降沿时会置EXF2*/
sbit EXF2 = T2CON^6;
/*T2 工作方式
RCLK/TCLK CP/RL2 TR2 工作方式 备注
0 0 1 1 16位常数自动再装入方式
0 1 1 2 16位捕获模式
1 X 1 3 串行口波特率发生方式
X X X 4 停止
*/
sbit RCLK = T2CON^5;
sbit TCLK = T2CON^4;
sbit EXEN2 = T2CON^3;
sbit TR2 = T2CON^2;
/*外部计数器/定时器选择位, C/T2=1 为计数器 计数脉冲来自 P1.0 C/T2=0为定时器,以振荡脉冲的12分频信号为计数信号*/
sbit C_T2 = T2CON^1;
/*CP/RL2 =1 捕获模式 CP/RL2 =0 自动再装入方式 RCLK或TCLK 为1 此位可忽略*/
sbit CP_RL2 = T2CON^0;
#endif
51单片机寄存器备注版本
最新推荐文章于 2024-10-17 15:21:17 发布