C51寄存器詳解(Reg51.h)


Reg51.h

 

這個頭文件將C程序中能用到的寄存器名或寄存器中某位的名稱與硬件地址值做了對應,在程序中直接寫出這些名稱,集成開發環境就能識別,並最終轉換成機器代碼,實現對單片機各硬件資源的准確操控。

 

REG51內部規定的SFR寄存器的地址,1.SFR是Special Function Register(特殊功能寄存器)的縮寫。

  SFR是80C51單片機中各功能部件對應的寄存器,用於存放相應功能部件的控制命令,狀態或數據。它是80C51單片機中最具有特殊的部分,現在所有80C51系列功能的增加和擴展幾乎都是通過增加特殊功能寄存器SFR來達到目的的。

  對於80C51系列中的80C51,共定義了21個特殊功能寄存器。在80C52中,除了80C51的21個特殊功能寄存器,還增加了5個,共計26個:

 
* 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; //寄存器,主要用於乘除
sfr SP = 0x81; //堆棧指針,初始化為07;先加1后壓棧,先出棧再減1,
sfr DPL = 0x82;
sfr DPH = 0x83; //數據指針,用途大
sfr PCON = 0x87; //電源控制
sfr TCON = 0x88; //Timer/Counter控制
sfr TMOD = 0x89; //Timer/Counter方式控制
sfr TL0 = 0x8A;
sfr TL1 = 0x8B; //
sfr TH0 = 0x8C; //存着當前的計數值
sfr TH1 = 0x8D; //我就想不明白,當時設計的時候,為什么不把TH0,TL0放在連續的地址!
sfr IE = 0xA8; //好東西,中斷控制
sfr IP = 0xB8; //中斷優先級控制,沒有設計過要求時間嚴格的系統,所以至今沒有用過
sfr SCON = 0x98; //哇,熟悉,串口控制寄存器
sfr SBUF = 0x99; //哇,更熟悉,串口緩沖寄存器




sbit CY = 0xD7; //進位或借位,有就是1,沒有就是0
sbit AC = 0xD6; //輔助進借位,(麻煩b)
sbit F0 = 0xD5; //沒有具體用途,可以由用戶決定他的意義,所以它就沒有意義
sbit RS1 = 0xD4;
sbit RS0 = 0xD3; //工作寄存器選擇,這個在下面解釋
sbit OV = 0xD2; //over!溢出,有是1,沒有是0
sbit P = 0xD0; //奇偶校驗,奇數個1是1


sbit TF1 = 0x8F; //T1的中斷請求標志
sbit TR1 = 0x8E; //Timer 1 running,好記吧~
sbit TF0 = 0x8D; //
sbit TR0 = 0x8C; //把上面兩個1換成0
sbit IE1 = 0x8B; //interrupt external 1 外中斷請求標志
sbit IT1 = 0x8A; //interrupt triggle 1 外中斷觸發方式
sbit IE0 = 0x89;
sbit IT0 = 0x88; //同樣,把上面的兩個1換成0


sbit EA = 0xAF; //Enable all哇,重要,全局中斷控制,光着他,哈哈,什么都不用作了,就像放假一樣
sbit ES = 0xAC; //Enable Serial,開串口中斷
sbit ET1 = 0xAB; //Enable Timer/Counter 1
sbit EX1 = 0xAA; //Enable External 1
sbit ET0 = 0xA9; //Enable Timer/counter 0
sbit EX0 = 0xA8; //Enable External 0


sbit PS = 0xBC; //串行中斷優先級
sbit PT1 = 0xBB; //T1優先級
sbit PX1 = 0xBA; //外部中斷1優先級
sbit PT0 = 0xB9; //
sbit PX0 = 0xB8; //上面兩個1換成0

//控制寄存器!!!!
sbit RD = 0xB7; //讀
sbit WR = 0xB6; //寫
sbit T1 = 0xB5; //T/C1
sbit T0 = 0xB4; //T/C0
sbit INT1 = 0xB3; //外中斷1
sbit INT0 = 0xB2; //外中斷0
sbit TXD = 0xB1; //串行發送
sbit RXD = 0xB0; //串行接收


sbit SM0 = 0x9F; //
sbit SM1 = 0x9E; //串口工作方式
sbit SM2 = 0x9D; //什么鬼特征位,要用查書,或者等我以后解釋,啊哈
sbit REN = 0x9C; //串行接收允許
sbit TB8 = 0x9B; //收到的第九位
sbit RB8 = 0x9A; //要發的第九位
sbit TI = 0x99; //哇,熟悉吧,發送完成中斷標志
sbit RI = 0x98; //接收完成中斷標志


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM