- 單片機(jī)開(kāi)發(fā)從入門(mén)到精通(第2版)
- 白林鋒 曲培新等編著
- 1936字
- 2024-06-26 16:45:07
1.2.4 專(zhuān)用寄存器
單片機(jī)內(nèi)部與程序運(yùn)行有關(guān)的特殊功能寄存器稱(chēng)為單片機(jī)的專(zhuān)用寄存器,這些寄存器在單片機(jī)程序運(yùn)行過(guò)程中起重要作用,用戶(hù)可以通過(guò)軟件查詢(xún)的方法去觀察寄存器的結(jié)果,有的寄存器也可通過(guò)軟件改變其狀態(tài)。
(1)累加器(ACC/A)
累加器(A)為8位寄存器,是最常用的專(zhuān)用寄存器,功能較多,使用最為頻繁。它既可用于存放操作數(shù),也可用來(lái)存放運(yùn)算的中間結(jié)果。51系列單片機(jī)中大部分單操作數(shù)指令的操作數(shù)就取自累加器,許多雙操作數(shù)指令中的一個(gè)操作數(shù)也取自累加器。累加器有自己的地址,因而可以進(jìn)行地址操作。
在C語(yǔ)言編程中,如果想讓累加器中的內(nèi)容為十進(jìn)制56,簡(jiǎn)單的語(yǔ)句為
A=56;
在匯編語(yǔ)言中則要用到數(shù)據(jù)傳輸指令,命令格式為
MOV A,#56;
(2)B寄存器
B寄存器是一個(gè)8位寄存器,主要用于乘除運(yùn)算。乘法運(yùn)算時(shí),B提供乘數(shù)。乘法操作后,乘積的高8位存于B中。除法運(yùn)算時(shí),B提供除數(shù)。除法操作后,余數(shù)存于B中。此外,B寄存器也可作為一般數(shù)據(jù)寄存器使用。如在C語(yǔ)言中“B=56;”或“abc=B;”,abc為用戶(hù)自定義變量。
(3)程序狀態(tài)字(PSW)
程序狀態(tài)字是一個(gè)8位寄存器,用于存放程序運(yùn)行中的各種狀態(tài)信息。其中有些位的狀態(tài)是由程序執(zhí)行結(jié)果決定,硬件自動(dòng)設(shè)置的,而有些位的狀態(tài)則使用軟件方法設(shè)定。PSW的位狀態(tài)可以用專(zhuān)門(mén)指令進(jìn)行測(cè)試,也可以用程序讀出。一些條件轉(zhuǎn)移指令可以根據(jù)PSW特定位的狀態(tài)進(jìn)行程序轉(zhuǎn)移。PSW各位標(biāo)示符定義格式為

PSW.7為進(jìn)/借位標(biāo)志位(Carry, CY):表示運(yùn)算是否有進(jìn)位或借位。其功能有二:一是存放算術(shù)運(yùn)算的進(jìn)/借位標(biāo)志,在進(jìn)行加或減運(yùn)算時(shí),如果操作結(jié)果的最高位有進(jìn)位或借位時(shí),CY由硬件置“1”,否則清“0”;二是在位操作指令中,作位累加器使用。
PSW.6為輔助進(jìn)/借位標(biāo)志位(Auxiliary Carry, AC),也叫半/借進(jìn)位標(biāo)志位。在進(jìn)行加減運(yùn)算中,當(dāng)?shù)?位向高4位進(jìn)位或借位時(shí),AC由硬件置“1”,否則AC位被清“0”。在BCD碼的加法調(diào)整中也要用到AC位。
PSW.5為用戶(hù)標(biāo)志位F0(Flag 0),是一個(gè)供用戶(hù)定義的標(biāo)志位,可以利用軟件方法置位或復(fù)位。
PSW.4/PSW.3為寄存器組選擇位RS1/RS0(Register Selection),用于選擇CPU當(dāng)前使用的工作寄存器組,其對(duì)應(yīng)關(guān)系見(jiàn)表1-3。
表1-3 寄存器組的映射表對(duì)應(yīng)關(guān)系

這兩個(gè)選擇位的狀態(tài)是由程序設(shè)置的,被選中的寄存器組即為當(dāng)前寄存器組。單片機(jī)上電或復(fù)位后,RS1/RS0=00,即默認(rèn)的工作寄存器組是第0組。
PSW.2為溢出標(biāo)志位OV(Overflow)。在帶符號(hào)數(shù)的加減運(yùn)算中,OV=1表示加減運(yùn)算超出了累加器A所能表示的符號(hào)數(shù)有效范圍(-128~+127),即產(chǎn)生了溢出,表示A中的數(shù)據(jù)只是運(yùn)算結(jié)果的一部分;OV=0表示運(yùn)算正確,即無(wú)溢出產(chǎn)生,表示A中的數(shù)據(jù)就是全部運(yùn)算結(jié)果。在乘法運(yùn)算中,OV=1表示乘積超過(guò)255,即乘積分別在B與A中;否則,OV=0,表示乘積只在A中。在除法運(yùn)算中,OV=1表示除數(shù)為0,除法不能進(jìn)行;否則,OV=0,除數(shù)不為0,除法可正常進(jìn)行。
PSW.1為用戶(hù)標(biāo)志位F1(Flag 1),也是一個(gè)供用戶(hù)定義的標(biāo)志位,與F0類(lèi)似。
PSW.0為奇偶標(biāo)志位P(Parity),表示累加器A中“1”的個(gè)數(shù)奇偶性。如果A中有奇數(shù)個(gè)“1”,則P置“1”,否則置“0”,即完全由累加器的運(yùn)算結(jié)果中“1”的個(gè)數(shù)為奇數(shù)還是偶數(shù)決定。注意標(biāo)志位P并非用于表示累加器A中數(shù)的奇偶性。凡是改變累加器A中內(nèi)容的指令均會(huì)影響標(biāo)志位P。標(biāo)志位P對(duì)串行通信中的數(shù)據(jù)傳輸有重要的意義。在串行通信中常采用奇偶校驗(yàn)的辦法來(lái)校驗(yàn)數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
(4)數(shù)據(jù)指針(DPTR)
DPTR為16位寄存器。編程時(shí),DPTR既可以按16位寄存器使用,也可以按兩個(gè)8位寄存器分開(kāi)使用,即DPTR的高位字節(jié)DPH和DPTR的低位字節(jié)DPL。
在系統(tǒng)擴(kuò)展中,DPTR作為程序存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器的地址指針,用來(lái)指示要訪問(wèn)的ROM和片外RAM的單元地址。由于DPTR是16位寄存器,因此,通過(guò)DPTR可尋址64KB的地址空間。
(5)堆棧指針(SP)
堆棧是一個(gè)特殊的存儲(chǔ)區(qū),用來(lái)暫存系統(tǒng)的數(shù)據(jù)或地址,它是按“先進(jìn)后出”或“后進(jìn)先出”的原則來(lái)存取數(shù)據(jù)的,系統(tǒng)對(duì)堆棧的管理是通過(guò)8位的SP寄存器來(lái)實(shí)現(xiàn)的,SP總是指向最新的棧頂位置。堆棧的操作分為進(jìn)棧和出棧兩種。
由于MCS-51系列單片機(jī)的堆棧設(shè)在片內(nèi)RAM中,SP是一個(gè)8位寄存器。系統(tǒng)復(fù)位后,SP的初值為07H,但堆棧實(shí)際上是從08H單元開(kāi)始的。由于08H~1FH單元分別屬于工作寄存器1~3區(qū),20H~2FH是位尋址區(qū),如果程序要用到這些單元,最好把SP值改為2FH或更大的值。一般在片內(nèi)RAM的30H~7FH單元中設(shè)置堆棧。SP的內(nèi)容一經(jīng)確定,堆棧的位置也就跟著確定下來(lái)。由于SP可初始化為不同值,因此堆棧的具體位置是浮動(dòng)的。
(6)P0~P3寄存器
P0~P3是和輸出/輸入有關(guān)的4個(gè)特殊寄存器,實(shí)際上是4個(gè)鎖存器。每個(gè)鎖存器加上相應(yīng)的驅(qū)動(dòng)器和輸入緩沖器就構(gòu)成一個(gè)并行口,為單片機(jī)外部提供32根I/O引腳,命名為P0~P3口。
前面提到的程序計(jì)數(shù)器(PC)是一個(gè)16位的加1計(jì)數(shù)器,其作用是控制程序的執(zhí)行順序,而其內(nèi)容為將要執(zhí)行指令的ROM地址,尋址范圍是64KB。它并不在片內(nèi)RAM的高128B內(nèi)。
- 輕松學(xué)會(huì)單片機(jī)
- FPGA嵌入式項(xiàng)目開(kāi)發(fā)三位一體實(shí)戰(zhàn)精講
- 現(xiàn)代嵌入式系統(tǒng)開(kāi)發(fā)專(zhuān)案實(shí)務(wù)
- 單片機(jī)應(yīng)用基礎(chǔ)教程(第二版)
- 單片機(jī)原理與應(yīng)用:基于Keil+Proteus
- 單片機(jī)應(yīng)用技術(shù)
- 零起點(diǎn)學(xué)Proteus單片機(jī)仿真技術(shù)
- AVR單片機(jī)實(shí)用程序設(shè)計(jì)
- 嵌入式Linux與物聯(lián)網(wǎng)軟件開(kāi)發(fā):ARM處理器開(kāi)發(fā)自學(xué)教程
- 51單片機(jī)工程師是怎樣煉成的:基于C語(yǔ)言+Proteus仿真
- AVR單片機(jī)原理與應(yīng)用實(shí)例
- 單片機(jī)技術(shù)及應(yīng)用(C語(yǔ)言版)
- 案例解說(shuō)組態(tài)軟件典型控制應(yīng)用
- 單片機(jī)原理與工程應(yīng)用
- 基于Quartus II的FPGA/CPLD設(shè)計(jì)實(shí)例精解