关于郭天祥单片机书上第68页89C52内部寄存器地址及位地址

关于郭天祥单片机书上第6889C52内部寄存器地址及位地址

 

此处的位地址不是单片机内部寄存器上的地址【蓝线标示的】,而是将0xA8这个地址展开后,在上面进行位偏移(bit offset)的结果。

 

 

 

为什么要展开呢?我们之前在52reg.h头文件中使用sfr关键字将特殊寄存器展开以方便使用每个特殊功能寄存器,至此,我们的IE寄存器中又有8个特殊功能的位,所以我们又要将这8个位展开,已方便使用指定的特殊位。

我们可从附录二中推出以上论断的正确性:

 

 

地址号为0XAF的寄存器功能为IE2(中断允许寄存器2)

位地址为0XAF的功能是EA(中断允许寄存器1的全局中断允许位)

附录一中的IE寄存器位展开之后。

附录二中也将52单片机中几乎所有寄存器全部展开,这个头文件的风格值得我们学习,我们也要将经常使用的寄存器,位地址定义成我们最喜欢的名称。

 


附录一

SFR

MSB              位地址/位定义                       LSB

字节地址

B

F7

F6

F5

F4

F3

F2

F1

F0

F0H

 

 

 

 

 

 

 

 

ACC

E7

E6

E5

E4

E3

E2

E1

E0

E0H

 

 

 

 

 

 

 

 

PSW

D7

D6

D5

D4

D3

D2

D1

D0

D0H

CY

AC

F0

RS1

RS0

OV

F1

P

IP

BF

BE

BD

BC

BB

BA

B9

B8

B8H

PS

PT1

PX1

PT0

PX0

P3

B7

B6

B5

B4

B3

B2

B1

B0

B0H

P3.7

P3.6

P3.5

P3.4

P3.3

P3.2

P3.1

P3.0

IE

AF

AE

AD

AC

AB

AA

A9

A8

A8H

EA

ES

ET1

EX1

ET0

EX0

P2

A7

A6

A5

A4

A3

A2

A1

A0

A0H

P2.7

P2.6

P2.5

P2.4

P2.3

P2.2

P2.1

P2.0

SBUF

 

 

 

 

 

 

 

 

(99H)

SCON

9F

9E

9D

9C

9B

9A

99

98

98H

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

P1

97

96

95

94

93

92

91

90

90H

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

TH1

 

 

 

 

 

 

 

 

(8DH)

TH0

 

 

 

 

 

 

 

 

(8CH)

TX1

 

 

 

 

 

 

 

 

(8BH)

TX0

 

 

 

 

 

 

 

 

(8AH)

TMOD

GATE

C/T

M1

M0

GATE

C/T

M1

M0

(89H)

TCON

8F

8E

8D

8C

8B

8A

89

88

88H

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

PCON

SMOD

GF1

GF0

PD

IDL

87H

DPH

 

 

 

 

 

 

 

 

83H) 

DPL

 

 

 

 

 

 

 

 

82H

SP

 

 

 

 

 

 

 

 

81H

P0

87

86

85

84

83

82

81

80

80H

P0.7

P0.6

P0.5

P0.4

P0.3

P0.2

P0.1

P0.0

 

 


附录二

/*--------- 8051内核特殊功能寄存器 -------------*/

sfr ACC = 0xE0;             //累加器

sfr B = 0xF0;  //B 寄存器

sfr PSW    = 0xD0;           //程序状态字寄存器

sbit CY    = PSW^7;       //进位标志位

sbit AC    = PSW^6;        //辅助进位标志位

sbit F0    = PSW^5;        //用户标志位0

sbit RS1   = PSW^4;        //工作寄存器组选择控制位

sbit RS0   = PSW^3;        //工作寄存器组选择控制位

sbit OV    = PSW^2;        //溢出标志位

sbit F1    = PSW^1;        //用户标志位1

sbit P     = PSW^0;        //奇偶标志位

sfr SP    = 0x81;            //堆栈指针寄存器

sfr DPL  = 0x82;            //数据指针0低字节

sfr DPH  = 0x83;            //数据指针0高字节

/*------------ 系统管理特殊功能寄存器 -------------*/

sfr PCON  = 0x87;           //电源控制寄存器

sfr AUXR = 0x8E;              //辅助寄存器

sfr AUXR1 = 0xA2;             //辅助寄存器1

sfr WAKE_CLKO = 0x8F;        //时钟输出和唤醒控制寄存器

sfr CLK_DIV  = 0x97;          //时钟分频控制寄存器

sfr BUS_SPEED = 0xA1;        //总线速度控制寄存器

/*----------- 中断控制特殊功能寄存器 IE--------------*/    

sfr IE     = 0xA8;           //中断允许寄存器

sbit EA    = IE^7;  //总中断允许位     (位地址为0XAF

sbit ELVD  = IE^6;           //低电压检测中断控制位

sbit EADC  = IE^5;           //ADC中断允许控制位

sbit ES    = IE^4;         //串口1中断允许位

sbit ET1   = IE^3;         //定时器1溢出中断允许位

sbit EX1   = IE^2;         //外部中断1允许位

sbit ET0   = IE^1;         //定时器0溢出中断允许位

sbit EX0   = IE^0;         //外部中断0允许位

sfr IE2  = 0xAF;         //中断允许寄存器2     (寄存器地址为0XAF)

sfr IP     = 0xB8;          //中断优先级寄存器

sbit PPCA  = IP^7;          // PCA中断优先级控制位

sbit PLVD  = IP^6;            //低电压检测中断优先级控制位

sbit PADC  = IP^5;            //ADC中断优先级控制位

sbit PS    = IP^4;         //串口1中断优先级控制位

sbit PT1   = IP^3;         //定时器1中断优先级控制位

sbit PX1   = IP^2;         //外部中断1优先级控制位

sbit PT0   = IP^1;         //定时器0中断优先级控制位

sbit PX0   = IP^0;         //外部中断0优先级控制位

sfr IPH  = 0xB7;              //中断优先级高位寄存器

sfr IP2  = 0xB5;              //第二中断优先级寄存器低字节

sfr IPH2 = 0xB6;              //第二中断优先级寄存器高字节

/*--------------- I/O 口特殊功能寄存器 -------------------*/

sfr P0    = 0x80;          //P0口寄存器

sfr P0M1  = 0x93;             //P0口工作模式寄存器1

sfr P0M0  = 0x94;             //P0口工作模式寄存器0

sfr P1    = 0x90;            //P1口寄存器

sfr P1M1  = 0x91;             //P1口工作模式寄存器1

sfr P1M0  = 0x92;             //P1口工作模式寄存器0

sfr P1ASF = 0x9D;             //P1口模拟量功能设置寄存器

sfr P2     = 0xA0;           //P2口寄存器

sfr P2M1  = 0x95;             //P2口工作模式寄存器1

sfr P2M0  = 0x96;             //P2口工作模式寄存器0

sfr P3     = 0xB0;           //P3口寄存器

sbit T1    = P3^5;       //定时器1外部输入

sbit T0    = P3^4;         //定时器0外部输入

sbit INT1  = P3^3;         //外部中断1

sbit INT0  = P3^2;         //外部中断0

sbit TXD   = P3^1;         //串行输入通道

sbit RXD   = P3^0;         //串行输出通道

sfr P3M1  = 0xB1;             //P3口工作模式寄存器1

sfr P3M0  = 0xB2;             //P3口工作模式寄存器0

sfr P4   = 0xC0;               //P4口寄存器

sfr P4M1  = 0xB3;             //P4口工作模式寄存器1

sfr P4M0  = 0xB4;             //P4口工作模式寄存器0

sfr P4SW = 0xBB;              //P4口功能切换寄存器

sfr P5   = 0xC8;               //P5口(只有P5.3  P5.2  P5.1  P5.0

sfr P5M1 = 0xC9;               //P5口工作模式寄存器1

sfr P5M0 = 0xCA;              //P5口工作模式寄存器0.

/*----------------- 定时器特殊功能寄存器 -----------------*/

sfr TCON  = 0x88; //定时/计数控制寄存器

sbit TF1   = TCON^7; //定时器1溢出中断标志

sbit TR1   = TCON^6; //定时器1运行控制位

sbit TF0   = TCON^5; //定时器0溢出中断标志

sbit TR0   = TCON^4; //定时器0运行控制位

sbit IE1   = TCON^3; //外部中断1请求标志

sbit IT1   = TCON^2; //选择外部中断请求1为边沿触发方式的控制位

sbit IE0   = TCON^1;    //外部中断0请求标志

sbit IT0   = TCON^0;    //选择外部中断请求0为边沿触发方式的控制位

sfr TMOD  = 0x89;            //定时/计数模式控制寄存器

sfr TL0   = 0x8A;            //定时/计数器0低字节

sfr TH0   = 0x8C;            //定时/计数器0高字节

sfr TL1   = 0x8B;            //定时/计数器1低字节

sfr TH1   = 0x8D;            //定时/计数器1高字节

/*-------------- 串行口特殊功能寄存器 ------------------*/

sfr SCON = 0x98;            //串行口控制寄存器

sbit SM0   = SCON^7;       //串行口工作方式设定控制位0(与FE功能复用)

sbit FE   = SCON^7;

sbit SM1   = SCON^6;         //串行口工作方式设定控制位1

sbit SM2   = SCON^5;         //UARTSM2设定

sbit REN   = SCON^4;         //接收允许位

sbit TB8   = SCON^3;         //发送数据的第九位

sbit RB8   = SCON^2;         //接收数据的第九位

sbit TI    = SCON^1;         //发送中断标志

sbit RI    = SCON^0;         //接收中断标志

sfr SBUF  = 0x99;            //串口数据缓冲器

sfr SADEN = 0xB9;            //从机地址掩码寄存器

sfr SADDR = 0xA9;            //从机地址寄存器

sfr S2CON = 0x9A;            //串行口2控制寄存器

sfr S2BUF = 0x9B;            //串行口2数据缓冲器

sfr BRT = 0x9C;              //独立波特率定时器

/*---------------- 看门狗定时器寄存器 ------------------*/

sfr  WDT_CONTR = 0xC1;  //看门狗定时器控制寄存器

/*---------------- PCA 寄存器 -----------------*/

sfr CCON   = 0xD8;     //PCA控制寄存器

sbit CF    = CCON^7;     //PCA计数器溢出(CH,CLFFFFH变为0000H)标志

sbit CR    = CCON^6;     //PCA计数器计数允许控制位

sbit CCF1  = CCON^1;     //PCA模块1中断标志

sbit CCF0  = CCON^0;     //PCA模块0中断标志

sfr CMOD   = 0xD9;     //PCA工作模式寄存器

sfr CL     = 0xE9;       //PCA计数器低8

sfr CH     = 0xF9;       //PCA计数器高8

sfr CCAPM0 = 0xDA;     //PAC模块0的工作模式寄存器

sfr CCAPM1 = 0xDB;     //PAC模块1的工作模式寄存器

sfr CCAP0L = 0xEA;      //PAC模块0捕捉/比较寄存器低8

sfr CCAP0H = 0xFA;      //PAC模块0捕捉/比较寄存器高8

sfr CCAP1L = 0xEB;      //PAC模块1捕捉/比较寄存器低8

sfr CCAP1H = 0xFB;      //PAC模块1捕捉/比较寄存器高8

sfr PCA_PWM0 = 0xF2;    //PCA模块0 PWM寄存器

sfr PCA_PWM1 = 0xF3;    //PCA模块1 PWM寄存器

/*----------------- ADC 寄存器 -----------------*/

sfr ADC_CONTR  = 0xBC;     //ADC控制寄存器本寄存器不支持位操作

sfr ADC_RES   = 0xBD;      //ADC转换结果高8位寄存器

sfr ADC_RESL  = 0xBE;      //ADC转换结果低2位寄存器

/*---------------- SPI 寄存器 --------------------*/

sfr SPSTAT  = 0xCD;         //SPI状态寄存器,本寄存器不支持位操作

sfr SPCTL   = 0xCE;         //SPI控制寄存器

sfr SPDAT   = 0xCF;         //SPI数据寄存器

/*----------------- ISP_IAP_EEPROM 寄存器 ------------------*/

sfr IAP_DATA  = 0xC2;       //ISP/IAP Flash数据寄存器

sfr IAP_ADDRH = 0xC3;      //ISP/IAP Flash地址高字节

sfr IAP_ADDRL = 0xC4;      //ISP/IAP Flash地址低字节

sfr IAP_CMD   = 0xC5;      //ISP/IAP Flash命令寄存器

sfr IAP_TRIG  = 0xC6;       //ISP/IAP Flash命令触发器

sfr IAP_CONTR = 0xC7;      //ISP/IAP控制寄存器

 

你可能感兴趣的:(89C51)