Ⅰ 當前工作寄存器組是如何設定的
由程序狀態標志寄存器psw中的rs1和rs0兩位決定的,rs1=0,rs0=0,則選擇的是工作寄存器0組,rs1=0,rs0=1,則選擇的是工作寄存器1組,rs1=1,rs0=0,則選擇的是工作寄存器2組,rs1=1,rs0=1,則選擇的是工作寄存器3組,只要改變rs1和rs0的值就可以改變當前工作寄存器。
Ⅱ 求助,如何配置msp430f5529串口收發的寄存器
#include <msp430f5529.h>
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P3SEL = BIT3+BIT4;
UCA0CTL1|=UCSWRST;
UCA0CTL1|=UCSSEL_1;
UCA0BR0=0X03;
UCA0BR1=0X00;
UCA0MCTL=UCBRS_3+UCBRF_0;
UCA0CTL1&=~UCSWRST;
UCA0IE|=UCRXIE;
__bis_SR_register(LPM3_bits + GIE);
}
#pragma vector=USCI_A0_VECTOR
__interrupt void TIMER1_A1_ISR(void)
{
switch(__even_in_range(UCA0IV,14))
{
case 0: break;
case 2:
while((!UCA0IFG&UCTXIFG));
UCA0TXBUF=UCA0RXBUF;
break;
case 4:
break;
default: break;
}
}
Ⅲ 嵌入式linux驅動程序中如何設置控制設備的寄存器
歸根揭底
在驅動程序中操作的還是寄存器
在頭文件中定義一下寄存器的絕對地址 然後操作寄存器的
舉個例子 #define config @0x00000120
然後在驅動程序.C中讀寫config寄存器 就行了
Ⅳ 在匯編中,要計數或是定址,怎麼知道要用哪個寄存器
想知道他們怎麼用,就必須了解他們的用途,他們和其他寄存器如何合作,寄存器定址和存儲器定址如何完成?單說這幾個段寄存器,不涉及其他寄存器,是不能真正了解掌握他們的。學習需要循序漸進,「莫在浮沙築高台」
---------------
寄存器是中央處理器內的組成部份。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數器(PC)。在中央處理器的算術及邏輯部件中,包含的寄存器有累加器(ACC)。
寄存器是內存階層中的最頂端,也是系統獲得操作資料的最快速途徑。寄存器通常都是以他們可以保存的位元數量來估量,舉例來說,一個 「8 位元寄存器」或 「32 位元寄存器」。寄存器現在都以寄存器檔案的方式來實作,但是他們也可能使用單獨的正反器、高速的核心內存、薄膜內存以及在數種機器上的其他方式來實作出來。
寄存器通常都用來意指由一個指令之輸出或輸入可以直接索引到的暫存器群組。更適當的是稱他們為 「架構寄存器」。
例如,x86 指令及定義八個 32 位元寄存器的集合,但一個實作 x86 指令集的 CPU 可以包含比八個更多的寄存器。
寄存器是CPU內部的元件,寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非常快。
[編輯本段]寄存器用途
1.可將寄存器內的數據執行算術及邏輯運算;
2.存於寄存器內的地址可用來指向內存的某個位置,即定址;
3.可以用來讀寫數據到電腦的周邊設備。
[編輯本段]數據寄存器
8086 有14個16位寄存器,這14個寄存器按其用途可分為(1)通用寄存器、(2)指令指針、(3)標志寄存器和(4)段寄存器等4類。
(1)通用寄存器有8個, 又可以分成2組,一組是數據寄存器(4個),另一組是指針寄存器及變址寄存器(4個).
數據寄存器分為:
AH&AL=AX(accumulator):累加寄存器,常用於運算;在乘除等指令中指定用來存放操作數,另外,所有的I/O指令都使用這一寄存器與外界設備傳送數據.
BH&BL=BX(base):基址寄存器,常用於地址索引;
CH&CL=CX(count):計數寄存器,常用於計數;常用於保存計算值,如在移位指令,循環(loop)和串處理指令中用作隱含的計數器.
DH&DL=DX(data):數據寄存器,常用於數據傳遞。
他們的特點是,這4個16位的寄存器可以分為高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。這2組8位寄存器可以分別定址,並單獨使用。
另一組是指針寄存器和變址寄存器,包括:
SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置;
BP(Base Pointer):基址指針寄存器,可用作SS的一個相對基址位置;
SI(Source Index):源變址寄存器可用來存放相對於DS段之源變址指針;
DI(Destination Index):目的變址寄存器,可用來存放相對於 ES 段之目的變址指針。
這4個16位寄存器只能按16位進行存取操作,主要用來形成操作數的地址,用於堆棧操作和變址運算中計算操作數的有效地址。
(2) 指令指針IP(Instruction Pointer)
指令指針IP是一個16位專用寄存器,它指向當前需要取出的指令位元組,當BIU從內存中取出一個指令位元組後,IP就自動加1,指向下一個指令位元組。注意,IP指向的是指令地址的段內地址偏移量,又稱偏移地址(Offset Address)或有效地址(EA,Effective Address)。
(3)標志寄存器FR(Flag Register)
8086有一個18位的標志寄存器FR,在FR中有意義的有9位,其中6位是狀態位,3位是控制位。
OF: 溢出標志位OF用於反映有符號數加減運算所得結果是否溢出。如果運算結果超過當前運算位數所能表示的范圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。
DF:方向標志DF位用來決定在串操作指令執行時有關指針寄存器發生調整的方向。
IF:中斷允許標志IF位用來決定CPU是否響應CPU外部的可屏蔽中斷發出的中斷請求。但不管該標志為何值,CPU都必須響應CPU外部的不可屏蔽中斷所發出的中斷請求,以及CPU內部產生的中斷請求。具體規定如下:
(1)、當IF=1時,CPU可以響應CPU外部的可屏蔽中斷發出的中斷請求;
(2)、當IF=0時,CPU不響應CPU外部的可屏蔽中斷發出的中斷請求。
TF:跟蹤標志TF。該標志可用於程序調試。TF標志沒有專門的指令來設置或清楚。
(1)如果TF=1,則CPU處於單步執行指令的工作方式,此時每執行完一條指令,就顯示CPU內各個寄存器的當前值及CPU將要執行的下一條指令。
(2)如果TF=0,則處於連續工作模式。
SF:符號標志SF用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統中,有符號數採用補碼表示法,所以,SF也就反映運算結果的正負號。運算結果為正數時,SF的值為0,否則其值為1。
ZF: 零標志ZF用來反映運算結果是否為0。如果運算結果為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標志位。
AF:下列情況下,輔助進位標志AF的值被置為1,否則其值為0:
(1)、在字操作時,發生低位元組向高位元組進位或借位時;
(2)、在位元組操作時,發生低4位向高4位進位或借位時。
PF:奇偶標志PF用於反映運算結果中「1」的個數的奇偶性。如果「1」的個數為偶數,則PF的值為1,否則其值為0。
CF:進位標志CF主要用來反映運算是否產生進位或借位。如果運算結果的最高位產生了一個進位或借位,那麼,其值為1,否則其值為0。)
4)段寄存器(Segment Register)
為了運用所有的內存空間,8086設定了四個段寄存器,專門用來保存段地址:
CS(Code Segment):代碼段寄存器;
DS(Data Segment):數據段寄存器;
SS(Stack Segment):堆棧段寄存器;
ES(Extra Segment):附加段寄存器。
當一個程序要執行時,就要決定程序代碼、數據和堆棧各要用到內存的哪些位置,通過設定段寄存器 CS,DS,SS 來指向這些起始位置。通常是將DS固定,而根據需要修改CS。所以,程序可以在可定址空間小於64K的情況下被寫成任意大小。 所以,程序和其數據組合起來的大小,限制在DS 所指的64K內,這就是COM文件不得大於64K的原因。8086以內存做為戰場,用寄存器做為軍事基地,以加速工作。
以上是8086寄存器的整體概況, 自80386開始,PC進入32bit時代,其定址方式,寄存器大小,功能等都發生了變化。
=============================以下是80386的寄存器的一些資料======================================
寄存器都是32-bits寬。
A、通用寄存器
下面介紹通用寄存器及其習慣用法。顧名思義,通用寄存器是那些你可以根據自己的意願使用的寄存器,修改他們的值通常不會對計算機的運行造成很大的影響。通用寄存器最多的用途是計算。
EAX:通用寄存器。相對其他寄存器,在進行運算方面比較常用。在保護模式中,也可以作為內存偏移指針(此時,DS作為段 寄存器或選擇器)
EBX:通用寄存器。通常作為內存偏移指針使用(相對於EAX、ECX、EDX),DS是默認的段寄存器或選擇器。在保護模式中,同樣可以起這個作用。
ECX:通用寄存器。通常用於特定指令的計數。在保護模式中,也可以作為內存偏移指針(此時,DS作為 寄存器或段選擇器)。
EDX:通用寄存器。在某些運算中作為EAX的溢出寄存器(例如乘、除)。在保護模式中,也可以作為內存偏移指針(此時,DS作為段 寄存器或選擇器)。
同AX分為AH&AL一樣,上述寄存器包括對應的16-bit分組和8-bit分組。
B、用作內存指針的特殊寄存器
ESI:通常在內存操作指令中作為「源地址指針」使用。當然,ESI可以被裝入任意的數值,但通常沒有人把它當作通用寄存器來用。DS是默認段寄存器或選擇器。
EDI:通常在內存操作指令中作為「目的地址指針」使用。當然,EDI也可以被裝入任意的數值,但通常沒有人把它當作通用寄存器來用。DS是默認段寄存器或選擇器。
EBP:這也是一個作為指針的寄存器。通常,它被高級語言編譯器用以建造『堆棧幀'來保存函數或過程的局部變數,不過,還是那句話,你可以在其中保存你希望的任何數據。SS是它的默認段寄存器或選擇器。
注意,這三個寄存器沒有對應的8-bit分組。換言之,你可以通過SI、DI、BP作為別名訪問他們的低16位,卻沒有辦法直接訪問他們的低8位。
C、段選擇器:
實模式下的段寄存器到保護模式下搖身一變就成了選擇器。不同的是,實模式下的「段寄存器」是16-bit的,而保護模式下的選擇器是32-bit的。
CS 代碼段,或代碼選擇器。同IP寄存器(稍後介紹)一同指向當前正在執行的那個地址。處理器執行時從這個寄存器指向的段(實模式)或內存(保護模式)中獲取指令。除了跳轉或其他分支指令之外,你無法修改這個寄存器的內容。
DS 數據段,或數據選擇器。這個寄存器的低16 bit連同ESI一同指向的指令將要處理的內存。同時,所有的內存操作指令 默認情況下都用它指定操作段(實模式)或內存(作為選擇器,在保護模式。這個寄存器可以被裝入任意數值,然而在這么做的時候需要小心一些。方法是,首先把數據送給AX,然後再把它從AX傳送給DS(當然,也可以通過堆棧來做).
ES 附加段,或附加選擇器。這個寄存器的低16 bit連同EDI一同指向的指令將要處理的內存。同樣的,這個寄存器可以被裝入任意數值,方法和DS類似。
FS F段或F選擇器(推測F可能是Free?)。可以用這個寄存器作為默認段寄存器或選擇器的一個替代品。它可以被裝入任何數值,方法和DS類似。
GS G段或G選擇器(G的意義和F一樣,沒有在Intel的文檔中解釋)。它和FS幾乎完全一樣。
SS 堆棧段或堆棧選擇器。這個寄存器的低16 bit連同ESP一同指向下一次堆棧操作(push和pop)所要使用的堆棧地址。這個寄存器也可以被裝入任意數值,你可以通過入棧和出棧操作來給他賦值,不過由於堆棧對於很多操作有很重要的意義,因此,不正確的修改有可能造成對堆棧的破壞。
* 注意 一定不要在初學匯編的階段把這些寄存器弄混。他們非常重要,而一旦你掌握了他們,你就可以對他們做任意的操作了。段寄存器,或選擇器,在沒有指定的情況下都是使用默認的那個。這句話在現在看來可能有點稀里糊塗,不過你很快就會在後面知道如何去做。
指令指針寄存器:
EIP 這個寄存器非常的重要。這是一個32位寬的寄存器 ,同CS一同指向即將執行的那條指令的地址。不能夠直接修改這個寄存器的值,修改它的唯一方法是跳轉或分支指令。(CS是默認的段或選擇器)
上面是最基本的寄存器。下面是一些其他的寄存器,你甚至可能沒有聽說過它們。(都是32位寬):
CR0, CR2, CR3(控制寄存器)。舉一個例子,CR0的作用是切換實模式和保護模式。
還有其他一些寄存器,D0, D1, D2, D3, D6和D7(調試寄存器)。他們可以作為調試器的硬體支持來設置條件斷點。
TR3, TR4, TR5, TR6 和 TR? 寄存器(測試寄存器)用於某些條件測試。
Ⅳ 什麼是配置寄存器設置
starting-config,進入默認配置
配置模式就是含有你已經配置了的內容,比如:介面ip,路由協議等
默認配置不包含你的配置信息
Ⅵ 如何配置寄存器的地址
配置寄存器是一個16位的虛擬寄存器,用於指定路由器啟動的次序、中斷參數和設置控制台波特率等。該寄存器的值通常是以十六進制來表示的。
利用配置命令config register可以改變配置寄存器的值。
2. 啟動次序
配置寄存器的最後4位,指定的是,路由器在啟動的時候必須使用的啟動文件所在的位置:
<>
l 0x0001指定從ROM中啟動
l 0x0002-0x000F的值則參照在NVRAM配置文件中命令boot system指定的順序
如果配置文件中沒有boot system命令,路由器會試圖用系統Flash存儲器中的第一個文件來啟動,如果失敗,路由器就會試圖用TFTP從網路上載入一個預設文件名的文件(由boot域的值確定,如cisco2-4500),如果還失敗,系統就從啟動Flash中載入啟動。
預設的文件名是採用單詞cisco、啟動位的值以及路由器類型或處理器的名稱構成。例如某台4500上啟動欄位設為3,那麼預設的啟動文件名就是cisco3-4500。
以MC3819(CPU型號,大多採用MOTOROLA)路由器啟動順序為例,下面就是啟動的四個階段:
1. 系統自舉
2. 啟動載入(讀取配置信息和啟動Flash文件系統的最小功能)
3. 啟動系統IOS鏡像文件
4. 介面初始化/系統重啟
3. 配置寄存器
3.1. 各位的含義
通過show version命令可以看到路由器配置寄存器的值,預設情況下為0x2102。這四個數字每一個均有著重要的意義。下面從低到高進行一一的介紹。
第一個2,還原成二進制為0010,這一部分為boot field,對路由器IOS的啟動起著至關重要的作用,當boot field 的值為2-15中的任何一個時,路由器屬於正常啟動,當此值為0時,路由器啟動後會進入ROMMON模式,此值為1時,路由器進入到RXBOOT模式(2500路由器的FLASH在配置寄存器的值為2102時屬性為只讀,如果要升級IOS必須把寄存器的值修改為2101)
0,還原成二進制為0000,這四位中,起關鍵作用的是第三位(即整個寄存器裡面的BIT 7),值為0,當路由器啟動後會從NVRAM裡面的配置文件調到RAM里運行,值為1,路由器啟動後會忽略NVRAM的配置(這就是我們在進行PASSWORD RECOVERY時把寄存器的值改為2142的原因 )
1,還原成二進值為0001,我們來關注BIT8,值為0時,路由器在正常運行模式下CTRL + BREAK無效;值為1,路由器在任何運行模式下只要按下CTRL + BREAK均會立即進入ROMMON模式。
第二個2,還原成二進制為0100,其中BIT13,當值為0時,路由器如果進行網路啟動會嘗試無窮多次。當值為1時,路由器最多進行5次的網路啟動嘗試。
寄存器位數 十六進制 功能描述
0-3(啟動次序) 0x0000-0x000F 啟動欄位:0000-停留在引導提示符下(>或rommon >下)0001-從ROM中引導,
4 - 未使用
5 - 未使用
6 0x0040 配置系統忽略NVRAM中的配置信息
7 0x0080 啟動OEM位
8 0x0100 設置之後,暫停鍵在系統運行時無法使用;如果沒有設置,系統會進入引導監控模式下(rommon>)
9 -
10 0x0400 全0的就是廣播地址
11-12 0x0800到0x1800 控制台線路速度,默認的就是00即9600bps
13 0x2000 如果啟動失敗,系統以預設ROM軟體啟動
14 0x4000 -
15 0x8000 該設置能夠啟用診斷消息,並忽略NVRAM的內容
典型參數
l 0x2102: 運行過程中中斷鍵被屏蔽,路由器會查看NVRAM中配置的內容以確定啟動次序,如果啟動失敗會採用預設的ROM軟體進行啟動。
l 0x2142:恢復密碼時候使用。忽略NVRAM配置信息而進入初始配置對話模式中去
3.2. 密碼恢復
路由器的密碼恢復是將路由器重啟、中斷再進入ROM監控模式,將設備設置為忽略配置文件,然後再重啟,退出初始配置對話模式,配置存儲器,然後讀出或重新設置密碼即可。
根據路由器的處理器不同,需要分兩種情況進行處理。
l 適用於精簡指令集計算機(RISC):
1. 關掉路由器電源,然後重新打開電源
2. 按下break鍵或別的鍵盤組合將路由器置入ROM監控模式。Break鍵對不同計算機或終端軟體是不同的,按鍵的次序可能是CTRL-D,CTRL-Break等。
3. 在rommon> 提示符下,鍵入conf reg 0x2142以設置路由器下一次從Flash載入啟動的時候不要載入NVRAM中的啟動配置信息
4. 鍵入reset命令,路由器將重啟但忽略NVRAM中的配置信息
5. 路由器運行設置對話模式。輸入no或按下CTRL-C以跳過初始設置對話模式
6. 在router>提示符下輸入enable以進入特權執行模式
7. 使用config memory或者 startup running命令將啟動配置信息拷貝到運行配置中去。不要輸入config terminal,否則將覆蓋NVRAM中的配置信息
8. show running查看配置信息的內容,
9. 輸入config terminal進入配置模式,根據需要改變線路密碼或enable密碼
10. 這時所有的介面都處於關閉狀態,因此在每一個需要使用的介面上no shutdown
11. 輸入config reg 0x2102命令設置路由器下次按照正常的方式啟動
12. 按下CTRL-Z或End退出配置模式
13. write memory或 run start命令保存所有所作的更改
14. 重啟路由器並驗證密碼
非RISC:
1. 關掉路由器電源,然後重新打開電源
2. 按下break鍵或其他鍵進入ROM 監控模式
3. 在>提示符下,輸入o命令以記錄配置寄存器的當前值(通常是0x2102或0x0102)
4. 鍵入o/r 0x2142設置路由器下次啟動不要載入NVRAM中的配置信息
5. 鍵入i重啟路由器
6. 以下步驟和RISC處理器相關步驟一樣
4. 路由器工作模式
l ROM監控模式:路由器已啟動但是沒有載入任何IOS,提示符為:>或rommon>
l 啟動模式:啟動Flash里含有最小化IOS啟動程序,提示符為:router(boot)>
l 用戶執行模式:成功載入啟動了一份完整的IOS代碼,可以顯示系統信息、執行基本的測試等。不能查看配置文件和使用debug命令
l 特權執行模式:完全訪問的第二級模式。可以現實系統設置和狀態信息,可以進入配置模式,可以運行debug命令
l 配置模式:在enable模式中輸入config terminal命令進入配置模式。可以對介面、路由器以及線路配置進行設置
l 初始配置對話模式;啟動時候,如果路由器沒有進行配置(可能是因為路由器是新的或配置文件被write erase命令刪除了)的話,進入系統配置對話模式。可以依次進行主機名、執行密碼以及enable密碼的設置;還可對網路管理介面的IP和子網掩碼配置。然後保存到NVRAM中去。
Ⅶ 說明AVR單片機I/O口3個寄存器的名稱和作用是什麼當I/O口用於輸入和輸出時,如何設置和應用這3個寄存器
拿A口作例子
DDRA是數據方向寄存器,用來選擇引腳的方向,某位為1配置為輸出,某位為0配置為輸入。
DDRA相應位輸出,PORTA用來設置埠電平。
DDRA相應位輸入,PORTA配置上拉電阻,為1帶上拉電阻,為0不帶上拉電阻。
輸出:
DDRA=0xFF;//全作輸出,設置一次即可
PORTA=0xFF;//全為1,全輸出高電平
PORTA=0;//全為0,全輸出低電平
輸入:
DDRA=0;//全作輸入,設置一次即可
PORTA=0xFF;//全帶上拉電阻,設置一次即可
PORTA=0;//全不帶上拉電阻,設置一次即可
a=PINA;//讀A口。不論何時都可以讀PINA來獲得埠電平,不過因為鎖存會有延時
注意,因為一個埠有8個引腳(少數不夠8個腳),所以可以精確控制某一位或者某幾位而不影響別的位。
DDRA|=1;//A口第0位變成輸出,不影響別的位,也不管第0位原來是輸出還是輸入
DDRA&=~1;//A口第0位變成輸入,不影響別的位,也不管0位原來是輸出還是輸入
PORTA類似
a=PINA;//一次讀8個引腳狀態,在程序中再處理a的相應位好了。
Ⅷ 歐姆龍PLC中,如何知道輸入輸出點的寄存器類型和地址
以CJ2M/CJ2M為例:
DI模塊:寄存器16位,前綴符號為I,可以按字或位訪問。
DO模塊:寄存器16位,前綴符號為Q,可以按字或位訪問。
AI模塊:寄存器16位,前綴符號為I,按字訪問,數值范圍0~4000。
DO模塊:寄存器16位,前綴符號為Q,按字訪問,數值范圍0~4000。
DI和DO模塊的地址按照其模塊安裝位置排列。比如從左到右分別安裝了ID211、ID211、OC201三個模塊,它們的地址分別是:I0、I1和Q2。
AI、AO模塊的地址要稍微復雜一些,具體的還是自己看編程手冊吧。
如有需要,可以留下郵箱。我給你發例子程序。(需要給我加分啊!)
Ⅸ STC11F02E的單片機,我想使用內部波特率發生器,不知道怎樣配置其寄存器要求9600的波特率。
需要配置BRT和AUXR寄存器,不知道寄存器的看晶元手冊
BRT = 0XFD; //設置獨立波特率發生器的重裝值
AUXR = 0X11;//設置獨立波特率發生器,並啟用獨立波特率發生器