ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:45.08KB ,
资源ID:9350455      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9350455.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(003第三章ET44系列指令说明.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

003第三章ET44系列指令说明.docx

1、003第三章ET44系列指令说明 第三章 ET44系列指令說明3-1、 簡介微控制器所能執行的指令是二進位碼形式的指令,也就是所謂的機械碼(Machine Code)。對程式設計者而言,記憶機械碼指令是一件非常困難的事情,並且也很難從機械碼中了解指令的動作,因此將每一個指令以一個助憶碼來替代,由助憶碼來了解程式的運作,這也就是所謂的組合語言。由於微控制器只能執行機械碼指令,所以必須將組合語言指令轉換為機械碼指令,然後放入微控制器的程式記憶體中才能執行。將組合語言指令轉換為機械碼指令的過程稱為組譯(Assemble),做這件工作的程式稱為組譯器(Assembler)。如果所用的組譯器不同,則組合

2、語言程式的寫法也可能不同。3-2、 ET44M210組合語言ET44M210所用到的指令共有64個,比起其他微控制器而言,指令並不算太多。在剛開始學習時,可以先將所有的指令瀏覽過,大概知道每個指令的用法,等到開始寫程式之後再對指令加強了解,如此,便可以很快的了解指令的用法。ET44M210的指令格式包括標記欄、操作碼欄、運算元欄和註解欄。I. 標記欄(Label)標記欄代表一個記憶體位址,也就是表示該指令所在的記憶體位址。標記欄通常用來代表跳躍指令的進入點,例如以“JMP”指令跳躍至本指令時,“JMP”指令的運算元部分只需填入標記即可。並非每一個指令都需要加入標記,程式設計者可以視需要決定是否

3、在指令中加入標記。標記欄也可以是單獨一行,例如: Start: MOV A,#0XFFII. 操作碼欄操作碼欄有兩種情況:功能助憶碼(Mnemonics)及假指令(Pseudo Instruction)。功能助憶碼是用來告訴微控制器要做什麼動作,例如MOV、ADD等。假指令不會被組譯器組譯成機械碼指令,但它能幫助組譯器產生適當的機械碼指令,例如ORG、DB等。III. 運算元欄運算元則是提供微控制器所需要的資訊,以完成一個指令的動作。運算元的個數是由指令所決定的,可能有13個。若有超過2個以上的運算元,則必須以逗點將運算元分開。IV. 註解欄註解欄是供程式設計者寫文字說明的地方,增加程式的可讀

4、性,因此組譯器會在組譯的過程將其忽略。若註解欄的說明詳細,對程式的開發或除錯會有很大的幫助。註解欄是以“;”或“/”來當開頭字元,組譯器會在組譯的過程對“;” 或“/”後的資料完全忽略。程式設計者也可以用“/*及“*/”做多行的註解。例如:/*程式使用LCD,在LCD上顯示單一字元。LCMEN-PORTFBIT3LCMRS-PORTCBIT4D0D7-PORTDBIT07 */3-3、 ET44M210指令說明I. 系統控制指令(1) NOP (No Operation)1. NOP功能:不做任何動作。說明:NOP指令純粹是用來作時間延遲的指令。影響旗標:無。例如: BS PORTA,0NOP

5、 ;延遲兩個指令時間。NOPBC PORTA,0(2) WDTC (Clear Watch Dog Timer)1. WDTC功能:將WDT設為0。說明:WDTC指令是用來將Watch Dog Timer內的值重置。影響旗標:無。例如: BS PORTA,0 NOP NOP WDTC ;清除WDT內的值。(3) RET (Return From Subroutine)1. RET功能:從副程式返回。說明:從CALL呼叫的副程式,都是以RET為返回的指令。微控制器將堆疊最頂端的值取出,送到程式計數器繼續執行。影響旗標:無。例如: TEST: : : RETSTART: : : CALL TEST

6、 ;執行RET之前,堆疊最頂端值為HERE的位址HERE: ;執行RET之後,程式計數器值為HERE的位址 ADD A,#1(4) RETI (Return From Interrupt)1. RETI功能:從中斷副程式返回。說明:當中斷發生時,微控制器會將程式計數器的值存入堆疊中,並且跳到對應的中斷副程式上,最後會以RETI為返回的指令。影響旗標:無。例如: INTRTN: ;中斷副程式 : : RETISTART: : : ;中斷發生HERE: ;執行RETI之前,堆疊最頂端值為HERE的位址 : ;執行RETI之後,程式計數器值為HERE的位址 :(5) SLEP (Sleep)1. S

7、LEP功能:將WDT設為0,並且振盪器停止振盪。說明:SLEP指令會將Watch Dog Timer內的值重置,並且振盪器停止振盪讓微控制器進入睡眠模式。影響旗標:無。例如: BS PORTA,0 NOP NOP SLEP ;微控制器進入睡眠模式。(6) ENI (Enable Interrupt)1. ENI功能:將GIE設為1。說明:GIE是所有中斷致能的位元,執行此指令會將GIE設為1,以致能所有的中斷。當中斷發生時,微控制器會跳到對應的中斷副程式上。首先微控制器會將程式計數器的值存入堆疊中,重置GIE旗標並且除能其他中斷,之後微控制器會將程式計數器的值設在中斷向量上,並執行相關的程式,

8、中斷狀態暫存器會指出造成中斷的原因。影響旗標:無。例如: INTRTN: ;中斷副程式 : : RETISTART: : ENI ;中斷致能(7) DISI (Disable Interrupt)1. DISI功能:將GIE設為0。說明:執行此指令會將GIE設為0,以除能所有的中斷。影響旗標:無。例如: INTRTN: ;中斷副程式DISI ;中斷除能 : RETISTART: : ENI ;中斷致能(8) DAA (Decimal Adjust A)1. DAA功能:將ACC的值作十進位調整。說明:DAA是將ACC內八位元的二進位值,拆成兩個四位元值後,以十進位來表示(BCD)。影響旗標:C

9、旗標。例如: MOV A,#0X09ADD A,#0X06 ;9+6 DAA ;A=15H(BCD格式)II. 查表指令(1) TBRDP (Table Read Plus)此指令有兩種用法:1. TBRDP R功能:若TABPT的Bit00則RLow Byte(ROM(TABPT2);TABPT的Bit01則RHigh Byte(ROM(TABPT2);並且 TABPTTABPT1。 Note:TABPT為暫存器“HTBL”及“LTBL”的合稱。說明:在程式記憶體中的Table取得資料,並假設目前位址在TABPT2,執行此指令時,若TABPT的Bit00則會將 ROM(TABPT2)內容的L

10、ow Byte載入R暫存器;若TABPT的Bit01則會將 ROM(TABPT2)內容的High Byte載入R暫存器;TABPT會自動加1。影響旗標:無。2. TBRDP A功能:若TABPT的Bit00則ALow Byte(ROM(TABPT2);TABPT的Bit01則AHigh Byte(ROM(TABPT2);並且 TABPTTABPT1。 說明:在程式記憶體中的Table取得資料,並假設目前位址在TABPT2,執行此指令時,若TABPT的Bit00則會將 ROM(TABPT2)內容的Low Byte載入A暫存器;若TABPT的Bit01則會將 ROM(TABPT2)內容的High

11、Byte載入A暫存器;TABPT會自動加1。影響旗標:無。例如: ORG 0X0000MOV A,#(CHK*2)/0x100 MOV HTBL,A MOV A,#(CHK*2)%0x100 MOV LTBL,A NOP NOP TBRDP A : :ORG 0X0010CHK: DB 0xAA,0xBB,0xCC,0XDD 當上列程式經過組譯之後,其在ROM裡面的值入下所示:ROM位址 ROM的內容 程式碼0000 A700 MOV A,#(CHK*2)/0x1000001 A90C MOV HTBL,A 0002 A720 MOV A,#(CHK*2)%0x1000003 A90B MOV

12、 LTBL,A0004 0000 NOP0005 0000 NOP0006 000A TBRDP A : :0010 ORG 0X00100010 CHK:0010 BBAA DB 0xAA,0xBB,0xCC,0XDD0011 DDCC “CHK”Label在ROM位址0x0010,因此TABPTHTBL:LTBL0x0020, “HTBL”暫存器的值為0x00,“LTBL”暫存器的值為0x20。而執行TBRDP A指令時:ALow Byte (ROM(0x0010)0XAA),TABPT TABPT+10x 0021(2) TBRD (Table Read)此指令有兩種用法:1. TBRD

13、 R功能:若TABPT的Bit00則RLow Byte(ROM(TABPT2);TABPT的Bit01則RHigh Byte(ROM(TABPT2); 說明:在程式記憶體中的Table取得資料,並假設目前位址在TABPT2,執行此指令時,若TABPT的Bit00則會將 ROM(TABPT2)內容的Low Byte載入R暫存器;若TABPT的Bit01則會將 ROM(TABPT2)內容的High Byte載入R暫存器。影響旗標:無。2. TBRD A功能:若TABPT的Bit00則ALow Byte(ROM(TABPT2);TABPT的Bit01則AHigh Byte(ROM(TABPT2);

14、說明:在程式記憶體中的Table取得資料,並假設目前位址在TABPT2,執行此指令時,若TABPT的Bit00則會將 ROM(TABPT2)內容的Low Byte載入A暫存器;若TABPT的Bit01則會將 ROM(TABPT2)內容的High Byte載入A暫存器。影響旗標:無。例如: ORG 0X0000 MOV A,#(CHK*2)/0x100 MOV HTBL,A MOV A,#(CHK*2)%0x100 MOV LTBL,A NOP NOP TBRDP A:ORG 0X0010CHK: DB 0xAA,0xBB,0xCC,0XDD ;TABPT0x0020,AROM(0x0010)

15、0xAA,TABPT 0x0020(3) TBRDM (Table Read Minus)此指令有兩種用法:1. TBRDM R功能:若TABPT的Bit00則RLow Byte(ROM(TABPT2);TABPT的Bit01則RHigh Byte(ROM(TABPT2);並且 TABPTTABPT-1。 說明:在程式記憶體中的Table取得資料,並假設目前位址在TABPT2,執行此指令時,若TABPT的Bit00則會將 ROM(TABPT2)內容的Low Byte載入R暫存器;若TABPT的Bit01則會將 ROM(TABPT2)內容的High Byte載入R暫存器;TABPT會自動減1。影

16、響旗標:無。2. TBRDM A功能:若TABPT的Bit00則ALow Byte(ROM(TABPT2);TABPT的Bit01則AHigh Byte(ROM(TABPT2);並且 TABPTTABPT-1。 說明:在程式記憶體中的Table取得資料,並假設目前位址在TABPT2,執行此指令時,若TABPT的Bit00則會將 ROM(TABPT2)內容的Low Byte載入A暫存器;若TABPT的Bit01則會將 ROM(TABPT2)內容的High Byte載入A暫存器;TABPT會自動減1。影響旗標:無。例如: ORG 0X0000MOV A,#(CHK*2)/0x100 MOV HTB

17、L,A MOV A,#(CHK*2)%0x100 MOV LTBL,A NOP NOP TBRDP A:ORG 0X0010CHK: DB 0xAA,0xBB,0xCC,0XDD;TABPT0x0020,AROM(0x0010) 0xAA,TABPT TABPT-10x001F(4) TBL (Table Look Up)1. TBL功能:R2R2A。說明:將A暫存器的值加到R2(程式計數器)暫存器內,結果會取代R2(程式計數器)暫存器。影響旗標:Z,C,DC旗標。例如: TBL RETL #50 ;A=1 RETL #100 ;A=2 RETL #150 ;A=3 RETL #200 ;A=

18、4(5) RETL (Return Immediate Data To The A Register)1. RETL功能:A#k,堆疊最頂端的值取出,送到程式計數器。說明:此指令將資料“k”存入A暫存器,並且將堆疊最頂端的值取出,送到程式計數器繼續執行。影響旗標:無。III. 邏輯指令(1) OR (Inclusive OR)此指令有三種用法:1. OR A,R功能:AAR。 說明:將A暫存器與R暫存器作OR運算後,將結果存入A暫存器內。影響旗標:Z旗標。2. OR R,A功能:RRA。 說明:將A暫存器與R暫存器作OR運算後,將結果存入R暫存器內。影響旗標:Z旗標。3. OR A,#k功能:

19、AA#k。 說明:將A暫存器與k值作OR運算後,將結果存入A暫存器內。影響旗標:Z旗標。例如: R=0x40MOV A,#0x12MOV R,A ;R0x12MOV A,#0x03 OR A,R ;R0x12,A0x13(2) AND (And)此指令有三種用法:1. AND A,R功能:AA & R。 說明:將A暫存器與R暫存器作AND運算後,將結果存入A暫存器內。影響旗標:Z旗標。2. AND R,A功能:RR & A。 說明:將A暫存器與R暫存器作AND運算後,將結果存入R暫存器內。影響旗標:Z旗標。3. AND A,#k功能:AA & #k。 說明:將A暫存器與k值作AND運算後,將結

20、果存入A暫存器內。影響旗標:Z旗標。例如: R=0x40MOV A,#0x12MOV R,A ;R0x12MOV A,#0x03 OR A,R ;R0x12,A0x02(3) XOR (Exclusive OR)此指令有三種用法:1. XOR A,R功能:AAR。 說明:將A暫存器與R暫存器作XOR運算後,將結果存入A暫存器內。影響旗標:Z旗標。2. XOR R,A功能:RRA。 說明:將A暫存器與R暫存器作XOR運算後,將結果存入R暫存器內。影響旗標:Z旗標。3. XOR A,#k功能:AA#k。 說明:將A暫存器與k值作XOR運算後,將結果存入A暫存器內。影響旗標:Z旗標。例如: R=0x

21、40MOV A,#0x12MOV R,A ;R0x12MOV A,#0x03OR A,R ;R0x12,A0x11(4) COMA (Complement R,Place In A)1. COMA A功能:A/R。 說明:將R暫存器值作反向運算後,將結果存入A暫存器內。影響旗標:Z旗標。例如: R=0x40MOV A,#0x12MOV R,A ;R=0x12 COMA R ;R0x12,A0xED(5) COM (Complement R)1. COM R功能:R/R。 說明:將R暫存器值作反向運算後,將結果存入R暫存器內。影響旗標:Z旗標。例如: R=0x40MOV A,#0x12MOV R

22、,A ;R0x12 COM R ;R0xED,A0x12(6) RRCA (Rotate Right R Through Carry,Place In A)1. RRCA R,n功能:C,R右旋n個位元到C,A。 說明:將R暫存器與C旗標一起右旋n個位元後,將結果存入A暫存器內,R暫存器的值不變,如圖3-1所示。 右旋n次圖3-1:RRCA影響旗標:C旗標。例如: R=0x40MOV A,#0x12MOV R,A ;R0x12 RRCA R,2 ;R0x12,A0x04,n2,C1(7) RRC (Rotate Right R Through Carry)1. RRC R,n功能:C,R右旋n

23、個位元到C,R。 說明:將R暫存器與C旗標一起右旋n個位元後,將結果存入R暫存器,如圖3-2所示。右旋n次圖3-2:RRC影響旗標:C旗標。例如: R=0x40MOV A,#0x12MOV R,A ;R0x12 RRC R,2 ;R0x04,n2,C1(8) RLCA (Rotate Left R Through Carry,Place In A)1. RLCA R,n功能:C,R左旋n個位元到C,A 。 說明:將R暫存器與C旗標一起左旋n個位元後,將結果存入A暫存器內,R暫存器的值不變,如圖3-3所示。 左旋n次圖3-3:RLCA影響旗標:C旗標。例如: R=0x40MOV A,#0x12M

24、OV R,A ;R0x12 RLCA R,2 ;R0x12,A0x48,n2,C0(9) RLC (Rotate Left R Through Carry)1. RLC R,n功能:C,R左旋n個位元到C,R 。 說明:將R暫存器與C旗標一起左旋n個位元後,將結果存入R暫存器內,如圖3-4所示。左旋n次圖3-4:RLC影響旗標:C旗標。例如: R=0x40MOV A,#0x12MOV R,A ;R0x12 RLC R,2 ;R0x48,n2,C0(10) SHRA (Shift Right R,Place In A)1. SHRA R,n功能:C,R右移n個位元到A暫存器。 說明:將R暫存器右

25、移n個位元後,將C旗標插入高位元,並將結果存入A暫存器內,R暫存器的值不變,如圖3-5所示。右移n次圖3-5:SHRA影響旗標:無。例如: MOV A,#0x12MOV R,A ;R0x12 SHRA R,2 ;R0x12,A0x04,n2(11) SHLA (Shift Left R,Place In A)1. SHLA R,n功能:C,R左移n個位元到A暫存器。 說明:將R暫存器左移n個位元後,將C旗標插入低位元,並將結果存入A暫存器內,R暫存器的值不變,如圖3-6所示。 左移n次圖3-6:SHLA影響旗標:無。例如: MOV A,#0x12MOV R,A ;R0x12 SHLA R,2

26、;R0x12,A0x48,n2IV. 比較分支指令(1) JBC (Bit Test,Jump If Clear)1. JBC R,b,addr功能:若R(b) 0,jump to addr。 說明:若R暫存器的第“b”個位元等於0,則程式跳至addr執行。影響旗標:無。例如: R40_0 equal “1” JBC 0x10,0,addr ;測試R10的第0個位元是否為0 BS 0x40,0 ;若是則R40_0=0Addr: ;否則R40_0=1 BC 0x40,1(2) JBS (Bit Test,Jump If Set)1. JBS R,b,addr功能:若R(b) 1,jump to

27、addr。 說明:若R暫存器的第“b”個位元等於1,則程式跳至addr執行。影響旗標:無。例如: R40_0 equal “1” JBS 0x10,0,addr ;測試R10的第0個位元是否為1 BS 0x40,0 ;若是則R40_0=0Addr: ;否則R40_0=1 BC 0x40,1(3) DJZA (Decrement R,Place In A,Jump If 0)1. DJZA R,addr功能:若AR10,jump to addr。 說明:若R暫存器的值減1後存入A暫存器等於0,則程式跳至addr執行。影響旗標:無。例如: HERE: DJZA 0x40,SKIP ;AR401CONT: ;當A0,程式計數器=addr SKIP MOV A,#10 ;當A0,程式計數器=addr CONTSKIP: ADD A,#3(4) DJZ (Decrement R,Jump If 0)1. DJZ R,addr功能:若RR10,jump to addr。 說明:若R暫存器的值減1後存入R暫存器等於0,則程式跳至addr執行。影響旗標:無。例如: HERE: DJ

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1