維晟WS51F7030 系列的總體架構
總體架構
1.1 8051 內核
1.1.1 簡介
標準 8051 即 mcs-51 為 12 周期的 8051 cpu,而 ws51f7030 系列芯片采用的是單周期 8051 cpu,完全兼容mcs-51 指令集。
1.1.2 尋址方式
8051 的內核尋址方式有:立即尋址、直接尋址、間接尋址、寄存器尋址、相對尋址、變址尋址和位尋址。
1.1.2.1 立即尋址
立即尋址是在指令操作數中直接給出參與運算的操作數,指令舉例如下:
mov a, #60h (這條指令把 60h 直接送到累加器 a)
1.1.2.2 直接尋址
直接尋址指令操作數給出的是參與運算操作數的地址。直接尋址方式只能用于特殊功能寄存器、內部數據區和位地址空間,而特殊功能寄存器和位地址空間只能用直接尋址方式訪問。指令舉例如下:
anl 50h, #91h (把 50h 單元中的數與 91h 相“與”,結果存放在 50h 單元中,其中 50h 為內部 ram的地址)
1.1.2.3 間接尋址
間接尋址采用 r0 或 r1 前添加”@”符號。假設 r1 中的數據是 40h,內部數據存儲器 40h 單元的數據為 55h,則指令為mov a, @r1 (把數據 55h 傳送至累加器 a)
1.1.2.4 寄存器尋址
寄存器尋址對選定的工作寄存器 r7-r0、累加器 a、通用寄存器 b、地址寄存器和進位 c 中的數進行操作,其中寄存器 r7-r0 由指令碼的低 3 位,acc、b、dptr 及進位 c 隱含在指令碼中。因此,寄存器尋址也包含一種隱含尋址方式。工作寄存器工作區由狀態寄存器 psw 的 rs1、rs0 決定。指令操作數指定的寄存器均指當前工作區的寄存器。
inc r0 (r0 中的數據+1 寫回 r0)
1.1.2.5 相對尋址
相對尋址是將程序計數器 pc 中的當前值與指令第二字節給出的數相加,其結果作為轉移指令的轉移地址。轉移地址也成為轉移目的地址,pc 中的當前值成為基地址,指令第二字節給出的數成為偏移量。由于目的地址是相對于 pc 中的基地址而言,所以這種尋址方式成為相對尋址。偏移量為帶符號的數,范圍為+127--128。這種尋址方式主要用于轉移指令。
jc $+50h (若進位位 c 為 0,則程序計數器 pc 中的內容不改變,即不轉移。若進位位 c 為 1,則以 pc 中的當前值及基地址,加上偏移量 50h 后得到的結果作為該轉移指令的目的地址)
1.1.2.6 變址尋址
在變址尋址方式中,指令操作數制定一個存放變址基址的變址寄存器。變址尋址時,偏移量與變址基值相加,其結果作為操作數的地址。變址寄存器有程序計數器 pc 和地址寄存器 dptr。
movc a, @a+dptr (累加器 a 為偏移量寄存器,其內容與地址寄存器 dptr 中的內容相加,其結果作為操作數的地址,取出該單元中的數送入累加器 a 中)
1.1.2.7 位尋址
位尋址是指對一些可進行位操作的內部 ram 和特殊功能寄存器進行位操作時的尋址方式。在進行位操作時,借助于進位位 c 作為位操作累加器,指令操作數直接給出該位的地址,然后根據操作碼對該位進行位操作。mov c, 20h (將地址為 20h 的位操作寄存器值送入進位位 c 中)
1.1.3 寄存器描述
1.1.3.1 程序計數器 pc
程序計數器 pc 寄存器為 16 位,是專門用來控制指令執行順序的寄存器,它沒有寄存器地址。單片機上電或復位后,pc 值為 0,單片機從零地址開始執行程序。
1.1.3.2 累加器 acc
累加器 acc 是一個常用的專用寄存器,指令系統中采用 a 作為累加器的助記符,常用于存放算術或邏輯運算的操作數及運算結果。
1.1.3.3 通用寄存器 b
b 在乘除法運算中需要和 acc 配合使用。mul ab 指令把 acc 和 b 中 8 位無符號數相乘,所得的 16 位乘積的低字節存放在 a 中,高字節存放在 b 中。div ab 指令用 b 除以 a,整數商存放在 a 中,余數存放在 b 中。寄存器 b 還可以用作通用暫存寄存器。
1.1.3.4 堆棧指針 sp
堆棧指針 sp 是一個 8 位專用寄存器。它指示出堆棧頂部在內部 ram 塊中的位置。系統復位后,sp 初始化位 07h,使得堆棧事實上由 08h 單元開始,考慮 08h-1fh 單元分別屬于工作寄存器組 1-3,若在程序設計中用到這些區,則 sp 改變為 80h 或更大的為宜。在程序調試中,經常出現堆棧溢出的情況,為了方便找到程序故障,設置了一個記錄堆棧的寄存器 spmax,可以通過 debug 接口讀出,地址 0x1a。
1.1.3.5 數據指針 dptr
數據指針 dptr0/dptr1 是兩個 16 位專用寄存器,它們的高位字節寄存器用 dp0h/dp1h,低位字節寄存器用 dp0l/dp1l ,通過 dps(psw.1)可選擇使用 dptr0/dptr1。每個 dptr 既可以作為一個 16 位寄存器來處理,也可以作為 2 個獨立的 8 位寄存器 dp0h/dp1h 和 dp0l/dp1l 來處理。
1.1.3.6 狀態寄存器 psw
狀態寄存器 psw 是 cpu 的狀態寄存器。在 cpu 做算術運算或者邏輯運算時,對應的 psw 狀態位會發生改變。