特殊功能寄存器
8051有21個特殊功能寄存器,其中大部分是8位的,還有一些是16位的。我們對51單片機的操作實質是對特殊功能寄存器的操作。SFR是我們操作的對象,對他們進行讀和寫就是在操作51單片機。
PSW(程序狀態字寄存器):保存程序在執行過程中一些狀態。
CY:進位位CY是在執行加法(減法)時,如果第7位有進位(借位),則將CY置1。
AC:輔助進位位AC,是指第3位向第4位有進位(借位)時,將AC置1.
F0:是用戶標志位,留給我們用的
RS1和RS0是工作寄存器組選擇位,由RS1和RS0控制選擇哪一組工作寄存器工作。
OV:溢出標志位,在加減法運算的過程中,當第6位或者第7位其中的某一位有進位的時候,OV置1.
即第6位進位和第7位進位的異或(D6⊕D7)。
—:這個是保留位,在一些書中也寫作是F1。和F0位差不多
P:奇偶校驗位,8051進行的是偶校驗。即當累加器ACC的內容中1的個數是奇數個,那么P就被置1,否則清零。
寄存器B:在乘除法運算中與累加器A配合使用。MUL AB把累加器A和寄存器B中的8位無符號數相乘,結果的高8位存在寄存器B中,低8位存在累加器A中。DIV AB用B除以A,把商存在A中,余數存在B中。在不做乘除法運算時,B還可以作為通用寄存器來使用。
累加器A:8051的大多數指令都需要使用累加器A,他是使用頻率最高的寄存器。外部存儲器的讀寫必須使用A。
堆棧指針sp:堆棧指針存放當前棧的棧頂指針。數據在進棧之前SP先加1,然后數據進棧;數據在出棧時,先將數據彈出,然后SP減1。51的棧是向上生長的。對於8051來說,棧是被放在內部的RAM中,因此棧的最大地址是7FH。在系統復位后SP的初始值是07H。
數據指針DPTR:數據指針是一個16位的寄存器。可分為DPL和DPH兩個8位的寄存器。它是唯一一個直接可以做16位數據操作的寄存器。例如:MOV DPTR ,#1000H。
端口寄存器:即就是P0到P3這四個特殊功能寄存器。所有的端口都可以位尋址(支持位操作)。也就是說引腳的操作本質是對其內存映射以后的特殊功能寄存器進行的操作。
中斷允許寄存器:(IE)8051擁有中斷系統,他可以觸發5個中斷源,以及兩個中斷優先級(即就是最多允許兩層的中斷嵌套)。
EA:控制中斷的總開關,EA置1時中斷總允許打開。否則中斷關閉。
ET2:啟用/禁用定時器2的溢出或捕捉中斷(僅對於8052)
ES :啟用/禁用串行端口中斷
ET1 :啟用/禁用定時器1溢出中斷
EX1 :啟用/禁用外部中斷1
ET0 :啟用/禁用定時器0溢出中斷
EX0 : 啟用/禁用外部中斷0
中斷優先級寄存器:(IP)8051的中斷有兩個中斷優先級,默認的優先級從高到低是:外部中斷0,定時/計數器0,外部中斷1,定時/計數器1,串行口,(8052有定時/計數器2)。
當把相應的位置1時,優先級變高,置0時,優先級變低。當全為1或者全為0時,優先級按照默認的優先級來執行。
(IP的每個位名字和IE寄存器每個位是相似的)
定時器控制寄存器(TCON):
TF1(TF0):定時/計數器T1(TF0)的溢出標志,T1(T0)計數滿后,該位由硬件置1.並向CPU發出中斷請求。若CPU開放該中斷,則進入中斷服務子程序,並由硬件將該位清0.
TR1(TR0):T1(T0)的運行控制位。用軟件控制,置1時,啟動T1(T0);清0時,停止T1(T0)。
IE1(IE0):外部中斷1(0)的中斷標志位。置1時,向CPU發出中斷請求。
IT1(IT0):外部中斷1(0)的中斷觸發方式選擇位。ITx = 1時,設置為邊沿觸發方式(下降沿);ITx = 0時,設置為電平觸發方式(低電平)。在邊沿觸發方式下,CPU在響應中斷請求之后,會由硬件將IEx清0.
定時器方式選擇寄存器:(TMOD)該寄存器不能位尋址,只能整個字節操作。
其中高4位是控制定時器T1的,低4位是控制定時器T0的。
GATE:
當GATE = 0
則TR0置位,啟動定時器T0;
則TR1置位,啟動定時器T1。
C/T:定時/計數器方式選擇位,C/T = 1時,工作在計數器模式下;當C/T = 0時。工作在定時器模式下。
M1和M0:定時/計數器工作方式選擇位。
8051系列單片機的定時/計數器加1工作方式,因此需要將定時/計數的初值送到T0(T1)。
T1和T0是兩個16位的定時器,但是不能直接進行16位數據的讀和寫,只能分成兩個8位來進行讀和寫操作。例如想給T1設置初值為0C89H,指令書寫應該如下:
MOV TH1,#0CH
MOV TL1,#89H
串行口控制寄存器(SCON):
SM0和SM1是串行口4種工作方式的選擇位,它們控制串行口工作在哪種方式之下。
SM2是模式2和模式3的多機通信控制位。
REN :允許串行口接受位,REN = 1允許接受;REN = 0禁止接受,由軟件置位或清零。
TB8:在方式2和3,作為第9位數據發送,在雙機通信中常作為奇偶校驗位,在多機通信中,常作為數據幀或地址幀的標識,TB8 = 1為地址幀,TB8 = 0為數據幀。
RB8:在模式2和3下,為接收到的第9位數據。
TI:發送中斷標志位(中斷源),硬件置位,軟件清零。
RI:接受中斷標志位(中斷源),硬件置位,軟件清零。
串行口作為一個中斷源,中斷入口地址只有一個(0023H),當用中斷方式進行發送和接受時,需要查詢是TI還是RI引發的中斷請求。
串行數據緩存器(SBUF):實際上SBUF是兩個在物理書獨立的發送,接受緩沖器,可以同時發送,接收數據。兩個緩沖器共用一個字節地址99H。可以通過對SBUF的讀和寫來進行區分是哪一個寄存器。