關於郭天祥單片機書上第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控制寄存器

 

發佈了29 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章