總體架構(gòu)?
1.1 8051?內(nèi)核?
1.1.1?簡介?
標(biāo)準(zhǔn)?8051?即?MCS-51?為?12?周期的?8051 CPU,而?WS51F7030?系列芯片采用的是單周期?8051 CPU,完全兼容MCS-51?指令集。?
1.1.2?尋址方式?
8051?的內(nèi)核尋址方式有:立即尋址、直接尋址、間接尋址、寄存器尋址、相對尋址、變址尋址和位尋址。?
1.1.2.1?立即尋址?
立即尋址是在指令操作數(shù)中直接給出參與運(yùn)算的操作數(shù),指令舉例如下:?
MOV A, #60H?(這條指令把?60H?直接送到累加器?A)?
1.1.2.2?直接尋址?
直接尋址指令操作數(shù)給出的是參與運(yùn)算操作數(shù)的地址。直接尋址方式只能用于特殊功能寄存器、內(nèi)部數(shù)據(jù)區(qū)和位地址空間,而特殊功能寄存器和位地址空間只能用直接尋址方式訪問。指令舉例如下:
ANL 50H,?#91H?(把?50H?單元中的數(shù)與?91H?相“與”,結(jié)果存放在?50H?單元中,其中 50H?為內(nèi)部?RAM的地址)?
1.1.2.3?間接尋址?
間接尋址采用?R0?或?R1?前添加”@”符號來表示。假設(shè)?R1?中的數(shù)據(jù)是?40H,內(nèi)部數(shù)據(jù)存儲器 40H?單元的數(shù)據(jù)為?55H,則指令為MOV A, @R1?(把數(shù)據(jù)?55H?傳送至累加器?A)?
1.1.2.4?寄存器尋址?
寄存器尋址對選定的工作寄存器?R7-R0、累加器?A、通用寄存器?B、地址寄存器和進(jìn)位?C?中的數(shù)進(jìn)行操作,其中寄存器 R7-R0?由指令碼的低?3?位表示,ACC、B、DPTR?及進(jìn)位?C?隱含在指令碼中。因此,寄存器尋址也包含一種隱含尋址方式。工作寄存器工作區(qū)由狀態(tài)寄存器?PSW?的?RS1、RS0?決定。指令操作數(shù)指定的寄存器均指當(dāng)前工作區(qū)的寄存器。?
INC R0?(R0?中的數(shù)據(jù)+1?寫回?R0)?
1.1.2.5?相對尋址?
相對尋址是將程序計數(shù)器?PC?中的當(dāng)前值與指令第二字節(jié)給出的數(shù)相加,其結(jié)果作為轉(zhuǎn)移指令的轉(zhuǎn)移地址。轉(zhuǎn)移地址也成為轉(zhuǎn)移目的地址,PC?中的當(dāng)前值成為基地址,指令第二字節(jié)給出的數(shù)成為偏移量。由于目的地址是相對于?PC?中的基地址而言,所以這種尋址方式成為相對尋址。偏移量為帶符號的數(shù),所能表示的范圍為+127--128。這種尋址方式主要用于轉(zhuǎn)移指令。?
JC $+50H?(表示若進(jìn)位位?C?為?0,則程序計數(shù)器?PC?中的內(nèi)容不改變,即不轉(zhuǎn)移。若進(jìn)位位?C?為?1,則以?PC?中的當(dāng)前值及基地址,加上偏移量?50H?后得到的結(jié)果作為該轉(zhuǎn)移指令的目的地址)
1.1.2.6?變址尋址?
在變址尋址方式中,指令操作數(shù)制定一個存放變址基址的變址寄存器。變址尋址時,偏移量與變址基值相加,其結(jié)果作為操作數(shù)的地址。變址寄存器有程序計數(shù)器 PC?和地址寄存器?DPTR。?
MOVC A,?@A+DPTR?(表示累加器?A?為偏移量寄存器,其內(nèi)容與地址寄存器?DPTR?中的內(nèi)容相加,其結(jié)果作為操作數(shù)的地址,取出該單元中的數(shù)送入累加器 A?中)?
1.1.2.7?位尋址?
位尋址是指對一些可進(jìn)行位操作的內(nèi)部?RAM?和特殊功能寄存器進(jìn)行位操作時的尋址方式。在進(jìn)行位操作時,借助于進(jìn)位位 C?作為位操作累加器,指令操作數(shù)直接給出該位的地址,然后根據(jù)操作碼對該位進(jìn)行位操作。MOV C, 20H?(將地址為?20H?的位操作寄存器值送入進(jìn)位位?C?中)?
1.1.3?寄存器描述?
1.1.3.1?程序計數(shù)器 PC?
程序計數(shù)器?PC?寄存器為?16?位,是專門用來控制指令執(zhí)行順序的寄存器,它沒有寄存器地址。單片機(jī)上電或復(fù)位后,PC?值為?0,單片機(jī)從零地址開始執(zhí)行程序。?
1.1.3.2?累加器 ACC?
累加器?ACC?是一個常用的專用寄存器,指令系統(tǒng)中采用?A?作為累加器的助記符,常用于存放算術(shù)或邏輯運(yùn)算的操作數(shù)及運(yùn)算結(jié)果。
1.1.3.3?通用寄存器 B?
B?在乘除法運(yùn)算中需要和?ACC?配合使用。MUL AB?指令把?ACC?和?B?中?8?位無符號數(shù)相乘,所得的?16?位乘積的低字節(jié)存放在?A?中,高字節(jié)存放在 B?中。DIV AB?指令用?B?除以?A,整數(shù)商存放在?A?中,余數(shù)存放在?B?中。寄存器?B?還可以用作通用暫存寄存器。
1.1.3.4?堆棧指針 SP?
堆棧指針?SP?是一個?8?位專用寄存器。它指示出堆棧頂部在內(nèi)部?RAM?塊中的位置。系統(tǒng)復(fù)位后,SP?初始化位?07H,使得堆棧事實(shí)上由?08H?單元開始,考慮?08H-1FH?單元分別屬于工作寄存器組 1-3,若在程序設(shè)計中用到這些區(qū),則SP?改變?yōu)?80H?或更大的為宜。在程序調(diào)試中,經(jīng)常出現(xiàn)堆棧溢出的情況,為了方便找到程序故障,設(shè)置了一個記錄堆棧的寄存器 SPMAX,可以通過?Debug?接口讀出,地址?0x1A。
1.1.3.5?數(shù)據(jù)指針 DPTR?
數(shù)據(jù)指針?DPTR0/DPTR1?是兩個?16?位專用寄存器,它們的高位字節(jié)寄存器用?DP0H/DP1H表示,低位字節(jié)寄存器用?DP0L/DP1L?表示,通過?DPS(PSW.1)可選擇使用?DPTR0/DPTR1。每個?DPTR?既可以作為一個?16?位寄存器來處理,也可以作為?2?個獨(dú)立的?8?位寄存器?DP0H/DP1H?和?DP0L/DP1L?來處理。
1.1.3.6?狀態(tài)寄存器 PSW?
狀態(tài)寄存器?PSW?是?CPU?的狀態(tài)寄存器。在?CPU?做算術(shù)運(yùn)算或者邏輯運(yùn)算時,對應(yīng)的?PSW?狀態(tài)位會發(fā)生改變。
審核編輯:符乾江
評論