⑴ 單片機中的程序計數器PC是16位的定址范圍是64KB怎麼來的呀不太明白!
根據二進制編碼、解碼的原理,n根導線可以譯成2^n個地址號,單片機中的程序計數器PC是16位,也就是16根地址線,可以譯成2^16=65536個地址號,也成為16根地址線的最大定址范圍。
單片機中用於存放下一條指令所在單元的地址的就是程序計數器,其作用是保證程序(在操作系統中理解為進程)能夠連續地執行下去,又稱為指令計數器。
每當一個指令被獲取,程序計數器的存儲地址就加1,指向順序中的下一條指令,計算機重啟或復位後,程序計數器通常恢復到0。
(1)單片機讀十六位地址指令擴展閱讀
51單片機程序計數器中特殊功能單元:
1)0000H:8051單片機復位後,程序從0000H開始執行指令;
2)0003H:外部中斷0入口;
3)000BH:定時器0溢出中斷入口;
4)0013H:外部中斷1入口;
5)001BH:定時器1溢出中斷入口;
6)0023H:串列口中斷入口。
⑵ mcs-51單片機的數據指針DPTR是一個16位的專用地址指針寄存器,主要用來做什麼
如果是用c語言編程,可以不必注意這些問題,因為編程軟體會自動幫你分配,也不容易出錯!!
數據指針DPTR是80C51中一個功能比較特殊的寄存器。從結構DPTR是一個16位的特殊功能寄存器, 其高位位元組寄存器用DPH表示,低位位元組寄存器用DPL表示,DPTR既可以作為一個16位的寄存器來處理,也可以作為兩個獨立的8位寄存器來使用。主要功能是存放16位地址,作為片外RAM定址用的地址寄存器(間接定址),故稱數據指針。
訪問片外數據存儲器的指令為:
MOVX A,@DPTR 讀
MOVX @DPTR,A 寫
DPTR的另一個作用是變址定址,訪問程序存儲器,做查表指令:如:
以dptr為基址寄存器,將dptr的內容與累加器a的內容相加得到變址地址
movc a, @a+dptr ; (a)<-----((a)+(dptr))
⑶ AVR單片機SPI配置寄存器,地址和數據都是16位的,能寫進但讀出來不正確,求讀寄存器C語言程序
沒聽說過AVR單片機的地址和數據都是16位的,只知道AVR單片機哈佛結構指令長度是16位的。AVR單片機雖然有16位的寄存器,但AVR單片機還是8位機,不知你使用的AVR單片機的具體型號,或許是我孤陋寡問了。你所提到的SPI數據接收問題與上述問題無關,而與你對SPI特殊功能寄存器的配置以及相關程序有關,如果你將AVR單片機的SPI配置為主機,那麼:
unsigned char i;//定義一個變數
SPCR = 0x53;//配置AVR SPI為主機,CLK為fosc/128
SPDR = 0;//清0 SPI數據寄存器,同時啟動SPI接收,不一定要清0,寫入任意數據都可以
while(!(SPSR & 0x80));//等待數據由從機向主機移位結束
i = SPDR;//讀取數據
這樣寫你可能不一定明白,為什麼接收數據反要向SPDR寫入數據呢,但SPI主機就是這樣工作 的,更多的信息請參考數據手冊。
以上常式晶元型號:AVR Atmega169
編譯環境:ICCAVR
⑷ 急問!msc-51系列單片機程序地址指針為16位是什麼意思 新手求教!!
51單片機外部RAM的地址空間為64K,地址匯流排為16位,訪問外接RAM可執行如下4條指令:
MOVX A,@DPTR
MOVX @DPTR,A
MOVX A,@RI
MOVX @RI,A
其中DPTR為16位地址寄存器,地址高8位存於DPH,地址低8位存於DPL;Ri(I=0,1)是8位寄存器,作為地址指針時僅存低8位地址。
MCS-51執行上述指令時分為兩個階段:首先,是從外接程序存儲器中取出指令代碼,並進行分析。然後,執行對外接RAM的數據讀/寫操作。在這兩個階段,P0口、P1口上的地址選通是有區別的。
執行「MOVX A,@DPTR」和「MOVX @DPTR,A」指令時,在讀指令代碼階段,由程序計數器(PC)提供A0~A15,低8位地址穩定後,在單片機地址鎖存信號ALE作用下,P0.X口開始讀入MOVX指令代碼。在對缺燃外接RAM讀寫階段,其過程與前述相同伏態虛,只不過低8位地址不是來自程序計數器的低8位PCL,而是來自地址寄存器的高8位 DPH;高8位地址不是來自程序計數器的高8位PCH,而是來自地址寄存器的高8位PCH。當DPL穩定後,由地址鎖存器鎖存,P0.X口上出現的是讀/ 寫外接RAM的數據信息。
執行「MOVX A,@Ri」和「MOVX @RI,A」指令時,取指階段輿「movx a, @ dptr」和「movx @ dptr, a」過程完全相同。但在執行對外部RAM的讀/寫階段,低8位地址來自Ri;高8位地址來自閉知P2口鎖存器(P2 SFR)。
⑸ 單片機中怎樣看地址是8位還是16位
查看單片機地址是8位還是16位,只能用指令實現:
16位的單片機地址,向DPTR里邊傳送數據,不論NUM有多小,肯定是16位的數據傳送,如下:
MOV DPTR, #NUM
8位的單片機地址,向DPTR里邊傳送數據,則肯定是8位的數據傳送,如下:
MOV DPH, #NUM,
或:
MOV DPL, #NUM,
對大於8位而小於等於16位的數據進行加法運算,16位處理器可以一次完成,8位的則要拆分成多步來運算,即使二者的運算速度相同,處理16位數據8位處理器也會比16位處理器慢多了。
8位單片機,典型的是51系列的,再高級點用AVR、pic的,功能方面,似乎都不會很復雜,一般可能是控制類的多一下。一般不跑嵌入式OS。
16位的單片機,16位的單片機比較尷尬,高不成低不就,要求低一點,8位MCU就夠,高級點不如用32位MCU。
32位的,就高級點了,一般能跑嵌入式OS,例如ucos2,ucos3,uclinux等等,能做更多復雜的功能。用OS和不用OS的話,編程的思路差異比較大。功能一般有面向控制的,也有簡單消費類電子的。
⑹ 【單片機 ,匯編】最基本的語法,求解釋。關於16進制。
幫你解答:
ORG
0000H中的0000H是單片機的起始地址,即單片機開始執行指令的第一條指令的地址。
第一條指令
是LJMP
START
為一條轉移指令,轉到用戶主程序開始的地方,即START處。
因為單片機地址是16位的二進制地址,用十六進製表示即是4位十六進制數
如0000H
和0100H
這里H表示十六進制數
0100H地址是用戶主程序開始處
即START處。
MOV
SP,#70H;指令表示將立即數70H傳送給SP寄存器,因為寄存器是只能裝8位的二進制數,
用十六進製表示
即為2位的十六進制數
如70H
還有什麼問題
都可以問
如果滿意
就請給俺加分吧。哈哈