① 80C51的特殊功能寄存器SFR有多少個可以位定址的有多少個
80C51的特殊功能寄存器(SFR)共有21個,其中可以位定址的有11個。這些SFR分布在128位元組的存儲空間中,地址范圍從80H到FFH。以下是詳細列表:
1. B寄存器 - 地址:F0H
2. 累加器ACC - 地址:E0H
3. 程序狀態字PSW - 地址:D0H
4. 中斷優先順序控制寄存器IP - 地址:B8H
5. P3口鎖存器 - 地址:B0H
6. 中斷允許控制寄存器IE - 地址:A8H
7. P2口鎖存器 - 地址:A0H
8. 串列口鎖存器SBUF - 地址:99H
9. 串列口控制寄存器SCON - 地址:98H
10. P1口鎖存器 - 地址:90H
11. 定時器/計數器1(高8位)TH1 - 地址:8DH
12. 定時器/計數器1(低8位)TH0 - 地址:8CH
13. 定時器/計數器0(高8位)TL1 - 地址:8BH
14. 定時器/計數器0(低8位)TL0 - 地址:8AH
15. 定時器/計數器方式控制寄存器TMOD - 地址:89H
16. 定時器/計數器控制寄存器TCON - 地址:88H
17. 數據地址指針(高8位)DPH - 地址:83H
18. 數據地址指針(低8位)DPL - 地址:82H
以上是80C51單片機中的11個可以位定址的特殊功能寄存器。
② 單片機ACC.0是什麼意思,作何用
ACC累加器=A
ACC.0=E0H
ACC.0就是ACC的第0位。Acc可以位定址。
累加器ACC是一個8位的存儲單元,是用來放數據的。但是,這個存儲單元有其特殊的地位,是單片機中一個非常關鍵的單元,很多運算都要通過ACC來進行。以後在學習指令時,常用A來表示累加器。但有一些地方例外,比如在PUSH指令中,就必須用ACC這樣的名字。一般的說法,A代表了累加器中的內容、而ACC代表的是累加器的地址。
③ 單片機中A與Acc有什麼區別
累加器A與ACC區別
累加器寫成A或ACC在51匯編語言指令中是有區別的。
ACC在匯編後的機器碼必有一個位元組的操作數,是累加器的位元組地址E0H,A在匯編後則隱含在指令操作碼中。
所以在指令中A不能用ACC來替代,而對A的特殊功能寄存器直接定址和累加器某一位的定址要用ACC,而不能寫成A。
例如,指令INCA的機器碼是04H,屬於寄存器定址,寫成ACC後則成了INCDIRECT的格式,對應機器碼為05E0H。
A和ACC都表示累加器,但A是累加器的代號,在指令中默認是無地址的,而ACC是累加器在中的直接地址(OEH),可出現在用直接定址的任何地方,例如:
PUSHACC
POPACC
類似:工作寄存器R0~R7在指令中也有兩種不同的寫法,生成的機器碼也不同,如:
MOV40H,R0,
MOV40H,00H
假設當前工作寄存器為0組,前者屬於寄存器定址,後者屬於存儲器直接定址。但R0和00H的級別不同,00H只是RAM區的一個普通單元,其讀寫速度要比慢得多。微型計算機內部通常設置工作寄存器組,運算的結果可以放在寄存器中而不必每次都放到存儲器里,可以提高機器的工作速度。其實寄存器也是一種存儲器,只不過它是CPU中的部件,速度最快而已。
寄存器和一般的存儲器是混疊的,同一單元用不同的指令,它就會執行不同的功能。
一般的說法:A表示了累加器中的內容【寄存器定址】;ACC表示了累加器的地址【直接定址】。
A和ACC的實質是一樣的,對應地址都是0E0H,只是匯編在使用時,在格式上取了兩個名字。使用有一定的規律:
當其要進行位表示時,必須用ACC,比如要寫成ACC.7,而不能寫成A.7;
但當其作為8位二進制數時,ACC和A都能用,但還是有區別:比如INCACC和INCA都能用,還有PUSHACC,POPACC不可以寫成PUSHA和POPA
在KeilC中用了這樣一個命令:PUSHA,匯編時提示錯誤,後來我把PUSHA改為PUSHACC就可以通過了,請問這是什麼回事?A與ACC是同一個寄存器嗎?
所謂「A」是相關指令對累加器A的預設指定(不佔操作數指令),而PUSH和POP沒有預設指定累加器,要訪問累加器就必須採用其所允許的直接定址方式,「ACC」就是累加器A的地址。PUSH是直接定址,後面一定跟的是直接地址。你可以看到reg51.h中ACC的直接地址是0xe0;也可以PUSHE0h;累加器有A、ACC和E0H三種表示形式,分屬兩種不同的定址方法,使用A時,為寄存器定址,指令碼為04H,使用ACC和E0H時,為直接定址,指令碼為05E0H。可A的位7,為什麼非得用ACC.7而不用A.7。這與位定址有關系,位地址有四種:直接位地址;位元組地址加位序號;位名稱;特殊寄存器加位序號。
為什麼pushacc必須用acc,而不能用a,相反movx@dptr,a只能用a,而不能用ac?acc和a有什麼區別?ACCisregister。Aisaunseparatablepartofopcode。
在mov指令中可通用,用"a"時為2位元組1周期;用"acc"時為3位元組2周期。
盡管物理地址相同,但push是對寄存器操作,而movx是對累加器操作。
匯編結果:"inca"為"04h"運行時間1周期;"incacc"為"05h,e0h"運行時間2周期。
通俗的解釋為:acc是地址為E0H的寄存器,A是標準的無地址的累加器,自然後者便捷,但兩者在值上互為鏡像
④ 指令寄存器ir從prom接收到指令字後的運行過程如何,起什麼作用
計算機每執行條指令都三階段進行即取指令-----析指令-----執行指令
取指令任務:根據程序計數器PC值程序存儲器讀現行指令送指令寄存器
析指令階段任務:指令寄存器指令操作碼取進行解碼析其指令性質指令要求操作數則尋找操作數址
計算機執行程序程實際逐條指令重復述操作程直至遇停機指令循環等待指令
般計算機進行工作首先要通外部設備程序數據通輸入介面電路數據匯流排送入存儲器逐條取執行單片機程序般事先我都已通寫入器固化片內或片外程序存儲器機即執行指令
面我舉實例說明指令執行程:
機程序計算器PC變0000H單片機序電路作用自進入執行程序程執行程實際取指令(取存儲器事先存放指令階段)執行指令(析執行指令)循環程
例執行指令:MOV A,#0E0H其機器碼74H E0H該指令功能操作數E0H送入累加器
0000H單元已存放74H0001H單元已存放E0H單片機始運行首先進入取指階段其序:
1 程序計數器內容(0000H)送址寄存器;
2 程序計數器內容自加1(變0001H);
3 址寄存器內容(0000H)通內部址匯流排送存儲器存儲器址解碼電跟使址0000H單元選;
4 CPU使讀控制線效;
5 讀命令控制選存儲器單元內容(應74H)送內部數據匯流排取指階段所該內容通數據匯流排送指令寄存器至取指階段完進入解碼析執行指令階段
由於本進入指令寄存器內容74H(操作碼)解碼器解碼單片機知道該指令要數送A累加器該數代碼存儲單元所執行該指令必須數據(E0H)存儲器取送CPU即要存儲器取第二位元組其程與取指階段相似PC已0001H指令解碼器結合序部件產74H操作碼微操作系列使數字E0H0001H單元取指令要求取數送A累加器所取數字經內部數據匯流排進入A累加器進入指令寄存器至條指令執行完畢單片機PC="0002H"PCCPU每向存儲器取指或取數自加1單片機進入取指階段程直重復直至收暫停指令或循環等待指令暫停CPU條條執行指令完所規定