單片機(jī)實(shí)例教程秒脈沖發(fā)生器電路課件_第1頁(yè)
單片機(jī)實(shí)例教程秒脈沖發(fā)生器電路課件_第2頁(yè)
單片機(jī)實(shí)例教程秒脈沖發(fā)生器電路課件_第3頁(yè)
單片機(jī)實(shí)例教程秒脈沖發(fā)生器電路課件_第4頁(yè)
單片機(jī)實(shí)例教程秒脈沖發(fā)生器電路課件_第5頁(yè)
已閱讀5頁(yè),還剩139頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、秒脈沖發(fā)生器電路學(xué)習(xí)目標(biāo)通過(guò)本項(xiàng)目的學(xué)習(xí),能夠闡述尋址方式的種類和功能;能夠理解匯編指令,包括數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯操作指令、移位類指令、跳轉(zhuǎn)指令、轉(zhuǎn)移和循環(huán)控制指令、相關(guān)堆棧指令及其他各種指令;熟悉偽指令概念及用途。能夠根據(jù)上述匯編指令編寫簡(jiǎn)單的匯編程序。學(xué)習(xí)要求能夠闡述尋址方式的種類和功能能夠理解匯編指令熟悉偽指令概念及用途能夠根據(jù)上述匯編指令編寫簡(jiǎn)單的匯編程序項(xiàng)目導(dǎo)入由飛思卡爾MC9S08GB60單片機(jī)組成最小應(yīng)用系統(tǒng),產(chǎn)生一個(gè)秒脈沖信號(hào),控制發(fā)光二極管(LED)每一秒亮一次。即設(shè)定控制LED發(fā)光二極管每1s亮一次,秒脈沖的周期T=1s,若每隔0.5s將PTA0端口取反,即可以

2、在PTA0端口輸出1Hz的方波。如圖1-1所示。項(xiàng)目分析1用最少的元器件構(gòu)成一個(gè)單片機(jī)的最小應(yīng)用系統(tǒng)。2LED發(fā)光二極管的“定時(shí)亮滅”控制,可以利用延時(shí)方法來(lái)實(shí)現(xiàn),現(xiàn)常用的有兩種方法:一是用定時(shí)器中斷來(lái)實(shí)現(xiàn)(定時(shí)器的硬件和寄存器知識(shí)將在項(xiàng)目8介紹),二是用指令循環(huán)來(lái)實(shí)現(xiàn)。在系統(tǒng)控制內(nèi)容允許的情況下,可以采用第二種方法。在動(dòng)手實(shí)現(xiàn)利用單片機(jī)的最小應(yīng)用系統(tǒng)控制LED發(fā)光二極管的定時(shí)亮滅(即秒脈沖發(fā)生器)時(shí),先讓我們學(xué)習(xí)飛思卡爾單片機(jī)的尋址方式和匯編指令系統(tǒng)的相關(guān)知識(shí)。項(xiàng)目分析在動(dòng)手實(shí)現(xiàn)利用單片機(jī)的最小應(yīng)用系統(tǒng)控制LED發(fā)光二極管的定時(shí)亮滅(即秒脈沖發(fā)生器)時(shí),先讓我們學(xué)習(xí)飛思卡爾單片機(jī)的尋址方式和

3、匯編指令系統(tǒng)的相關(guān)知識(shí)。相關(guān)知識(shí)3.1 尋址方式3.2 匯編指令系統(tǒng)及應(yīng)用舉例 3.3 偽指令3.4 基本程序設(shè)計(jì)范例3.1 尋址方式指令的一個(gè)重要組成部分是操作數(shù),由它指定參與運(yùn)算的數(shù)據(jù)或數(shù)據(jù)所在的存儲(chǔ)器單元或寄存器或I/O接口的地址。指令中所規(guī)定的尋找操作數(shù)的方式就是尋址方式。每一種計(jì)算都具有多種尋址方式,尋址方式越多,單片機(jī)的功能就越強(qiáng),靈活性就越大。尋址方式的多少及尋址功能是反映指令系統(tǒng)優(yōu)劣的主要因素之一。要掌握指令系統(tǒng)也可從尋址方式入手。3.1 尋址方式HCS08系列單片機(jī)采用的尋址方式有7種:隱含尋址方式(INH)、相對(duì)尋址方式(REL)、立即尋址方式(#IMM)、直接尋址方式(D

4、IR)、擴(kuò)展尋址方式(EXT)、變址尋址方式(間接尋址方式)。每種尋址方式分述如下:3.1 尋址方式3.1.1隱含尋址方式(INH)隱含尋址方式(Inherent addressing mode,INH)是當(dāng)CPU 知道要完成指令的所有信息而源碼中卻沒(méi)有提供地址時(shí)使用的一種尋址方式。在隱含尋址方式中,執(zhí)行指令的所有信息均在操作碼中,CPU不需要從寄存器、存儲(chǔ)器中取操作數(shù),操作數(shù)隱含在累加器、變址寄存器或狀態(tài)標(biāo)志寄存器中。具有隱含尋址方式的指令全為單字節(jié)指令,匯編后生成的操作碼在程序存儲(chǔ)器中只占用一個(gè)字節(jié)的空間。 3.1 尋址方式例如:INCA;累加器A中的內(nèi)容加1INCX;變址寄存器X中的內(nèi)容

5、加1DECA;累加器A中的內(nèi)容減1SEI;中斷屏蔽位I置1CLI;中斷屏蔽位I清03.1 尋址方式3.1.2相對(duì)尋址方式(REL)相對(duì)尋址方式(Relative addressing mode ,REL)是將程序計(jì)數(shù)器PC中的當(dāng)前內(nèi)容與指令第二個(gè)字節(jié)所給出的數(shù)相加,其和為跳轉(zhuǎn)指令的偏移地址。在這種尋址方式中,CPU首先測(cè)試給定的條件,如果滿足條件,則發(fā)生相對(duì)轉(zhuǎn)移,即把當(dāng)前程序計(jì)數(shù)器PC的值加上指令碼所占字節(jié)數(shù),再加上指令操作碼后的8位有符號(hào)數(shù),使程序轉(zhuǎn)移到PC指定的新地址處,否則CPU執(zhí)行該條指令的下一條指令。具有相對(duì)尋址方式的指令為2字節(jié)指令,一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)為相對(duì)偏移量。 3.

6、1 尋址方式例如:BRA rel;無(wú)條件轉(zhuǎn)移到標(biāo)號(hào)為rel的指令處執(zhí)行程序BSRInit;調(diào)用子程序Init3.1.3立即尋址方式(IMM)隱含尋址方式(Immediate addressing mode ,IMM)是單片機(jī)的指令系統(tǒng)查找數(shù)據(jù)的一種信息定位方式,在一定程度上可以把它和高級(jí)語(yǔ)言的常數(shù)對(duì)應(yīng)起來(lái)。字面上的解釋,是指數(shù)據(jù)本身直接出現(xiàn)在指令中,也就是說(shuō)數(shù)據(jù)本身是整個(gè)指令編碼的一部分。具有立即尋址方式的指令主要用于訪問(wèn)常數(shù),多為2字節(jié)指令,第一個(gè)字節(jié)為操作碼,后面字節(jié)為立即數(shù),立即數(shù)前面的符號(hào)前綴“#”說(shuō)明操作碼后面的是操作數(shù)值而不是操作數(shù)地址。 3.1 尋址方式例如:MOV #$100,

7、PTAD;給一個(gè)寄存器PTAD賦初值,這里的100是直接出現(xiàn)在指令中的操作數(shù),它就是立即數(shù),它的尋址方式就是立即尋址方式.如果查看它轉(zhuǎn)換的對(duì)應(yīng)的機(jī)器語(yǔ)言代碼,會(huì)發(fā)現(xiàn)100是指令編碼的一部分ADC#$30;將累加器A中的內(nèi)容與十六進(jìn)制立即數(shù)30進(jìn)行帶進(jìn)位 加運(yùn)算,結(jié)果存放至累加器A中立即操作數(shù)的長(zhǎng)度是根據(jù)指令隱含的CPU 寄存器大小來(lái)定義。編譯器會(huì)自動(dòng)縮位或擴(kuò)展操作數(shù)去匹配指令需要的長(zhǎng)度。例如:LDA#$08;將立即操作數(shù)08傳送給累加器A,立即操作數(shù)的長(zhǎng)度 為8位操作數(shù)STAPTAD;將累加器A內(nèi)容傳送給寄存器PTAD,立即操作數(shù)的長(zhǎng) 度為8位操作數(shù)LDHX#$012A;將立即操作數(shù)012 A

8、傳送給變址寄存器H:X,立即操作 數(shù)的長(zhǎng)度為16位操作數(shù)STHXVOLM;將變址寄存器H:X傳送給變量VOLM:VOLM+1,操 作數(shù)的長(zhǎng)度為16位操作數(shù)3.1 尋址方式3.1.4直接尋址方式(DIR)在直接尋址方式(Direct addressing mode ,DIR)中,操作數(shù)的有效地址包含于操作碼后的一個(gè)字節(jié)中。由于操作數(shù)的有效地址公為一個(gè)字節(jié),因此直接尋址方式只能對(duì)存儲(chǔ)器0頁(yè)的256B空間($0000$00FF)進(jìn)行操作。0頁(yè)存儲(chǔ)區(qū)含有I/O控制和狀態(tài)寄存器,還有部分用戶數(shù)據(jù)RAM區(qū)。一般將經(jīng)常要訪問(wèn)的數(shù)據(jù)放在0頁(yè)的用戶數(shù)據(jù)RAM中,以節(jié)省程序空間,提高數(shù)據(jù)訪問(wèn)速度。具有直接尋址方式

9、的指令為2字節(jié)指令,指令的第一個(gè)字節(jié)是操作碼,第地個(gè)字節(jié)為操作數(shù)的有效地址。3.1 尋址方式例如:LDA#$00;將$0000單元中的內(nèi)容送入累加器A中STA$04 ;將累加器A中的內(nèi)容傳送給$0004單元地址中 3.1 尋址方式3.1.5擴(kuò)展尋址方式(EXT)在擴(kuò)展尋址方式(Extended addressing mod,EXT)中,操作數(shù)的有效地址包含于操作碼后的兩個(gè)字節(jié)中。由于操作數(shù)的有效地址僅為2字節(jié),因此,采用擴(kuò)展尋址方式的指令可以訪問(wèn)64KB內(nèi)的任何存儲(chǔ)器空間。具有該尋址方式的指令一般為3字節(jié)指令,指令的第一個(gè)字節(jié)是操作碼,第二、三個(gè)字節(jié)是操作數(shù)的有效地址。 3.1 尋址方式例如:

10、LDA$0A0D;將$0A0D單元中的內(nèi)容送入累加器A中STA$0809;將累加器A中的內(nèi)容送入$0809單元中 3.1 尋址方式3.1.6 變址尋址方式變址尋址方式有時(shí)被稱為間接尋址方式,是以CPU 變址寄存器H:X作為參考地址加上偏移地址,其結(jié)果作為目的地址來(lái)存取操作數(shù)的尋址方式。有些情況下變址寄存器中的值會(huì)自動(dòng)增加用來(lái)存取目的操作數(shù)。變址尋址方式的重要特征是:操作數(shù)地址取決于當(dāng)前CPU 變址寄存器的內(nèi)容而不是常數(shù)地址。變址尋址方式可分為以下幾種類型:3.1 尋址方式(1)無(wú)偏移量變址方式(IX)(2)無(wú)偏移量變址、變址加1尋址方式(IX+)(3)8位偏移量變址方式(IX1)(4)8位偏移

11、量變址、變址加1尋址方式(IX1+)(5)16位偏移量變址方式(IX2)3.1 尋址方式例如:LDA$0110,X;將以H:X 寄存器中的值加上$0110所得的值為地址的存儲(chǔ)單 元的內(nèi)容送至累加器A中AND$1030,X;將以H:X 寄存器中的值加上$1030所得的值為地址的存儲(chǔ)單 元的內(nèi)容與累加器A中的值進(jìn)行邏輯運(yùn)算,結(jié)果存至累加器 A中 3.1 尋址方式3.1.7 堆棧尋址方式在堆棧尋址方式或,操作數(shù)的有效地址由16位堆棧指針SP中的內(nèi)容和跟在操作碼后的無(wú)符號(hào)偏移量決定,根據(jù)偏移量的多少,堆棧尋址又分為8位偏移量堆棧尋址和16位偏移量堆棧尋址兩種尋址方式。用堆棧方式尋址的指令功能與對(duì)應(yīng)變址

12、尋址指令相似,只是與堆棧指針SP有關(guān)的指令要求預(yù)先訪問(wèn)一個(gè)字節(jié),因此它要比對(duì)應(yīng)的變址指令多用一個(gè)時(shí)鐘周期。3.1 尋址方式(1)8位偏移量堆棧尋址方式(SP1)例如:LDA$20,SP;將以SP中的值加上$20所得的和為地址的存儲(chǔ)單元中的值送 至累加器A中INC $20,SP;將以SP中的值加上$20所得的和為地址的存儲(chǔ)單元中的值加13.1 尋址方式(2)16位偏移量堆棧尋址方式(SP2)在這種變址方式中,無(wú)符號(hào)的16 位偏移量與堆棧指針(SP)相加,得到要訪問(wèn)的操作數(shù)地址。該尋址方式用于訪問(wèn)棧中深度超過(guò)255 的數(shù)據(jù)。如果偏移量小于或等于255,編譯器將自動(dòng)使用更有效率的SP1 尋址方式。

13、3.1 尋址方式例如:LDA$0110,SP;將以SP中的值加上$0110所得的和為地址的存儲(chǔ)單元中 的值送至累加器A中 3.2匯編指令系統(tǒng)及應(yīng)用舉例HCS08系列單片機(jī)指令系統(tǒng)有數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯操作指令、移位類指令、跳轉(zhuǎn)指令、轉(zhuǎn)移和循環(huán)控制指令、相關(guān)堆棧指令及其他各種指令。本節(jié)將按照類型分別介紹各條指令的功能、指令代碼及其使用。 3.2匯編指令系統(tǒng)及應(yīng)用舉例3. 2.1數(shù)據(jù)傳送指令這組指令主要用于CPU 寄存器、立即數(shù)、內(nèi)部存儲(chǔ)器單元之間的數(shù)據(jù)傳送。在讀入、存儲(chǔ)和數(shù)據(jù)傳送時(shí)指令會(huì)根據(jù)數(shù)據(jù)的值自動(dòng)更新條件碼,這使得BEQ、BNE、BPL 和BMI 等指令不需要運(yùn)行特殊的測(cè)試或比

14、較指令就可以立即進(jìn)行條件轉(zhuǎn)移。3.2匯編指令系統(tǒng)及應(yīng)用舉例1.LDA指令將存儲(chǔ)器的數(shù)值送到累加器A中 2.LDHX指令 將存儲(chǔ)器的數(shù)值傳送到變址寄存器H:X 3.LDX指令 將存儲(chǔ)器的數(shù)值送到寄存器X(變址寄存器) 4.STA指令 將累加器A的內(nèi)容傳送到存儲(chǔ)器中 3.2匯編指令系統(tǒng)及應(yīng)用舉例5.STHX指令 將變址寄存器H:X的內(nèi)容送到目的地址 6.STX指令 將變址寄存器X內(nèi)容送到目的地址 7.MOV指令 將存儲(chǔ)器內(nèi)容送到目的地址 8.TAX指令 將累加器A的內(nèi)容送到變址寄存器X中 3.2匯編指令系統(tǒng)及應(yīng)用舉例9.TXA指令 將變址寄存器X的內(nèi)容送到累加器中 10.TAP指令 將累加器A的內(nèi)

15、容送到寄存器CCR中 11.TPA指令將寄存器CCR的內(nèi)容送到累加器A中 12.NSA指令半字節(jié)交換累加器A的數(shù)值 3.2匯編指令系統(tǒng)及應(yīng)用舉例13.BSET指令 將存儲(chǔ)器opr8a中的第n位置1 14.BCLR指令 將存儲(chǔ)器opr8a中的第n位清0 3.2匯編指令系統(tǒng)及應(yīng)用舉例例如:LDA #$55 ;將十六進(jìn)制立即數(shù)55送到累加器A中LDA $01 ;將$01單元中的內(nèi)容送入累加器A 中(尋址范圍:256B)LDHX #%010111111010 ;將二進(jìn)制立即數(shù)送入變址寄存器H:X中LDHX $20 ;將$20單元的內(nèi)容送入變址寄存器H,將$20+1單元的內(nèi)容送入變址寄存器X中3.2匯編

16、指令系統(tǒng)及應(yīng)用舉例LDX PTAPE ;將PTAPE單元的內(nèi)容送入變址寄存器X中LDX #$5A ;將十六進(jìn)制數(shù)5A送入變址寄存器X中STA PTAD ;將累加器A的內(nèi)容送至PTAD寄存器中STA X ;將累加器A的內(nèi)容送至X寄存器中3.2匯編指令系統(tǒng)及應(yīng)用舉例STX PTEDD ;將變址寄存器X內(nèi)容送到PTEDD寄存器STX DATA ;將變址寄存器X內(nèi)容送到變量DATAMOV #$03,PTAD ; 將十六制立即數(shù)03傳送給寄存器PTAD中 MOV #$0F,PTADD ; 將十六制立即數(shù)0F傳送給寄存器PTADD中3.2匯編指令系統(tǒng)及應(yīng)用舉例LDA #$55 ;將十六進(jìn)制立即數(shù)55送到累

17、加器A中 TAX ;將累加器內(nèi)容55送到變址寄存器X中LDA #$55 ;將十六進(jìn)制立即數(shù)55送到累加器A中 TAP ;將累加器內(nèi)容送到寄存器CCR中3.2匯編指令系統(tǒng)及應(yīng)用舉例BSET 1,PTAD ;將寄存器PTAD的第1位置1BSET 7,PTCDD ;將寄存器PTCDD的第7位置1BSET TE,SCI1C2 ;將寄存器SCI1C2的第TE位置1BCLR 2,PTCD ;將寄存器PTCD的第2位清03.2匯編指令系統(tǒng)及應(yīng)用舉例3.2.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令包含了傳統(tǒng)的加、減、乘和除操作,還包含常用的指令,如加一、減一、清零、求補(bǔ)(2 進(jìn)制補(bǔ)碼)、比較、測(cè)試和為處理BCD 碼的十進(jìn)

18、制調(diào)整指令。比較指令實(shí)際上就是減操作,影響CCR 狀態(tài)位但結(jié)果不返回到CPU 寄存器。測(cè)試指令影響著N和Z 位,但是不影響被測(cè)試的數(shù)據(jù)。3.2匯編指令系統(tǒng)及應(yīng)用舉例1.ADC指令 帶進(jìn)位的加法運(yùn)算 2. ADD指令 不帶進(jìn)位的加法運(yùn)算 3.AIX指令 變址寄存器H:X的內(nèi)容加上立即數(shù)再送入變址寄存器中, AIX 指令不影響CCR 位4.SUB指令 將累加器A 中的數(shù)據(jù)減去存儲(chǔ)器中的數(shù)據(jù),然后將結(jié)果存儲(chǔ)到累加器A中。對(duì)于這個(gè)指令,進(jìn)位狀態(tài)位是借位指示器, 3.2匯編指令系統(tǒng)及應(yīng)用舉例5.SBC指令 將累加器A 中的數(shù)據(jù)減去由前一次操作所影響的借位,再減去存儲(chǔ)器中的數(shù)據(jù),然后將結(jié)果存儲(chǔ)回寄存器A

19、中 6MUL指令 將寄存器X 中無(wú)符號(hào)8 位2 進(jìn)制數(shù)與累加器A 中的無(wú)符號(hào)的8 位2 進(jìn)制數(shù)相乘,然后存儲(chǔ)16 位結(jié)果到X:A 中,高8 位的結(jié)果存儲(chǔ)在X 中,低8 位存儲(chǔ)在A中。這種情況下不可能發(fā)生進(jìn)位(或者是溢出),其結(jié)果將總是適合X:A 的大小。因此進(jìn)行這個(gè)操作后C 將被清零。 3.2匯編指令系統(tǒng)及應(yīng)用舉例7DIV指令 將H:A 中16位無(wú)符號(hào)數(shù)值除以X中無(wú)符號(hào)的8位數(shù)值,所得的結(jié)果(8位)存儲(chǔ)到累加器A中,余數(shù)存儲(chǔ)到H 寄存器中。在計(jì)算中,X 中的除數(shù)數(shù)值無(wú)變化,因此它能夠在隨后的操作中繼續(xù)被使用。如果商為0 則Z 標(biāo)志被置1。如果商大于255 就會(huì)有溢出發(fā)生,發(fā)生溢出或除數(shù)為0時(shí)C

20、 位將被置1。 3.2匯編指令系統(tǒng)及應(yīng)用舉例8INC指令 操作數(shù)自加 9DEC指令 操作數(shù)自減1 10CLR指令 操作數(shù)清零 11.NEG指令 取補(bǔ)指令執(zhí)行了二進(jìn)制數(shù)的補(bǔ)碼操作,求補(bǔ)指令等同于將一個(gè)8 位有符號(hào)數(shù)乘以-1。功能上等同于將寄存器A、X 或者存儲(chǔ)器中的數(shù)據(jù)全部取反,然后加一。 3.2匯編指令系統(tǒng)及應(yīng)用舉例12.CMP指令 CMP 指令是將累加器A的內(nèi)容與存儲(chǔ)器的內(nèi)容進(jìn)行比較,所得的結(jié)果會(huì)影響CCR寄存器的位,但其結(jié)果不會(huì)存儲(chǔ)回累加器A中,因此累加器A和存儲(chǔ)器的數(shù)值在運(yùn)算后是不發(fā)生變化的。注意,比較指令是比較累加器A、變址寄存器X (或H:X)的內(nèi)容與存儲(chǔ)器中的內(nèi)容。 3.2匯編指令

21、系統(tǒng)及應(yīng)用舉例13.CPHX指令 在CPHX 指令執(zhí)行時(shí),存儲(chǔ)單元M指向存儲(chǔ)單元位置的首地址,變址寄存器H與存儲(chǔ)器位置M相對(duì)應(yīng),變址寄存器X與存儲(chǔ)器位置M+1 相對(duì)應(yīng)。CPHX 執(zhí)行一個(gè)16 位減法指令時(shí),存儲(chǔ)結(jié)果不返回H:X 中。 3.2匯編指令系統(tǒng)及應(yīng)用舉例14.CPX指令 將X變址寄存器和存儲(chǔ)單元相比較,運(yùn)算后CCR寄存器相應(yīng)的位會(huì)發(fā)生變化,但操作數(shù)不改變 15.TST指令 該指令用于測(cè)試?yán)奂悠鰽、變址寄存器X、存儲(chǔ)單元的值是否小于等于0,它執(zhí)行減0的操作,但不改變?cè)僮鲾?shù)的值,只是根據(jù)結(jié)果改變CCR寄存器的N、Z標(biāo)志位。 3.2匯編指令系統(tǒng)及應(yīng)用舉例16.DAA指令 該指令用于BCD碼

22、的調(diào)整。在BCD 碼數(shù)值中,用十六進(jìn)制數(shù)表示十進(jìn)制數(shù)值0 9。當(dāng)兩個(gè)8 位的BCD 數(shù)值相加時(shí),CPU 實(shí)際上執(zhí)行的是普通的二進(jìn)制加法,對(duì)于BCD 碼,這個(gè)運(yùn)算結(jié)果可能不再是一個(gè)有效的BCD 碼了。DAA 指令根據(jù)加法(ADD 或ADC )指令運(yùn)算所改變的標(biāo)志位(如H 和C標(biāo)志位)對(duì)結(jié)果進(jìn)行修正,使其結(jié)果成為有效的BCD 數(shù)值 ,而且還修正了C 標(biāo)志位的內(nèi)容,使其正確的表示使用BCD 加法后的結(jié)果。在早期的單片機(jī)系統(tǒng)中,由于還沒(méi)出現(xiàn)該條指令,要完成這些操作是非常復(fù)雜的過(guò)程,而現(xiàn)在,DAA 指令則能很簡(jiǎn)單的完成這個(gè)操作。 3.2匯編指令系統(tǒng)及應(yīng)用舉例;-CMP指令例子 LDA #$0F CMP

23、#$3F MOV #$0E,VOLM CMP VOLM LDHX #$0005 CMP ,X 結(jié)果是? 3.2匯編指令系統(tǒng)及應(yīng)用舉例;-NEGA指令例子 LDA #$02 NEGA NEG VOLM NEGX LDHX #$0021 NEG ,X 結(jié)果是?3.2匯編指令系統(tǒng)及應(yīng)用舉例 ;-CPHX指令例子 LDHX #$0080 STA ,X INCX STA ,X LDHX #$0201 CPHX VOLM結(jié)果是? 3.2匯編指令系統(tǒng)及應(yīng)用舉例 ;-CPX指令例子 LDX #$05 CPX #$04 ;-TST指令例子 LDA #$01 TSTA LDX #$00 TSTX結(jié)果是?3.2匯編

24、指令系統(tǒng)及應(yīng)用舉例3.2.3 邏輯操作指令這組指令執(zhí)行8 位操作數(shù)的并行布爾運(yùn)算,包括與操作、或操作、異或操作、取反操作和位測(cè)試操作。取反指令是將指定的寄存器或者存儲(chǔ)器中的操作數(shù)按位取反,其他邏輯指令均包括了兩個(gè)操作數(shù),一個(gè)是累加器A,另一個(gè)是存在存儲(chǔ)器中。立即尋址、直接尋址、擴(kuò)展尋址或變址尋址等尋址方式都可應(yīng)用該組指令來(lái)訪問(wèn)操作數(shù)。注意,累加器A的每個(gè)位都可執(zhí)行與、或和異或操作,操作的結(jié)果返回累加器A中,覆蓋原來(lái)的操作數(shù)。3.2匯編指令系統(tǒng)及應(yīng)用舉例1.AND指令 該指令進(jìn)行邏輯與操作,將累加器A中的內(nèi)容與相應(yīng)的操作數(shù)進(jìn)行按位與操作,再將操作結(jié)果存入累加器A中,同時(shí)把CCR寄存器中的標(biāo)志位V

25、清為0,影響N、Z標(biāo)志位,對(duì)其他標(biāo)志位無(wú)影響 3.2匯編指令系統(tǒng)及應(yīng)用舉例2.ORA指令 該指令進(jìn)行邏輯或操作,將累加器A中的內(nèi)容與相應(yīng)的操作數(shù)進(jìn)行按位或操作,再將操作結(jié)果存入累加器A中,結(jié)果對(duì)CCR寄存器的影響同AND指令一樣。 3.EOR指令 該指令進(jìn)行邏輯異或操作,將累加器A中的內(nèi)容與相應(yīng)的操作數(shù)進(jìn)行按位異或操作,再將操作結(jié)果存入累加器A中,結(jié)果對(duì)CCR寄存器的影響同AND指令一樣。 3.2匯編指令系統(tǒng)及應(yīng)用舉例4.COM指令 該指令進(jìn)行取反操作,該指令簡(jiǎn)單地轉(zhuǎn)換操作數(shù)的每個(gè)位,但與求補(bǔ)指令是不同的,取反指令執(zhí)行的是一條算術(shù)運(yùn)算指令,即等效于與一個(gè) -1 相乘。 3.2匯編指令系統(tǒng)及應(yīng)用

26、舉例5.BIT指令 該指令進(jìn)行位測(cè)試,將相應(yīng)存儲(chǔ)地址中的操作數(shù)與累加器A的每個(gè)位進(jìn)行“與操作”,但是結(jié)果不存儲(chǔ)在累加器A中。在執(zhí)行位測(cè)試指令后,根據(jù)“與操作”的結(jié)果來(lái)置位或清零CCR條件碼寄存器的N 和Z 位,以實(shí)現(xiàn)條件跳轉(zhuǎn)。如果使用“掩碼”方法進(jìn)行編程,則掩碼中的每個(gè)對(duì)應(yīng)位將被測(cè)試,執(zhí)行BIT位測(cè)試指令后,若測(cè)試位均不是1,則Z 位被置位。 3.2匯編指令系統(tǒng)及應(yīng)用舉例;-DAA指令例子 LDA #$0E ADD #$06 DAA ;-AND指令例子 LDA #$5B AND #$0F LDHX #$0080 AND ,X 3.2匯編指令系統(tǒng)及應(yīng)用舉例 ;-ORA指令例子 LDA #$0C

27、ORA #$0A ;-EOR指令例子 LDA #$5A EOR #$03 STA VOLM ;-COM指令例子 LDA #$05 COMA 3.2匯編指令系統(tǒng)及應(yīng)用舉例 ;-BIT指令例子 LDA #$02 MOV #$01,VOLM BIT VOLM 3.2匯編指令系統(tǒng)及應(yīng)用舉例3.2.4 移位指令移位指令的操作是在9位的空間上進(jìn)行的,這個(gè)空間是由8 位的累加器A、變址寄存器X 或者存儲(chǔ)單元和CCR寄存器中的C 位組成。移位指令的操作包括邏輯左移、邏輯右移、算術(shù)左移、算術(shù)右移、循環(huán)左移和循環(huán)右移等操作 3.2匯編指令系統(tǒng)及應(yīng)用舉例 1. LSL指令 該指令進(jìn)行邏輯左移操作,就是簡(jiǎn)單地把0移位

28、到有效值的最低位b0,有效值的最高位b7移到進(jìn)位C中 3.2匯編指令系統(tǒng)及應(yīng)用舉例2.LSR指令 該指令進(jìn)行邏輯右移,就是簡(jiǎn)單地把0移位到有效值的最高位b7,有效值的最低位移b0到進(jìn)位C中 3.2匯編指令系統(tǒng)及應(yīng)用舉例3.ASL指令 該指令進(jìn)行算術(shù)左移(和LSL相似),類似于乘2 操作,在功能上與LSL指令沒(méi)有較大的區(qū)別 3.2匯編指令系統(tǒng)及應(yīng)用舉例4.ASR指令 該指令進(jìn)行算術(shù)右移,類似于除2 操作。算術(shù)右移(ASR)指令復(fù)制最初的最高有效位(b7)返回到b7,以保護(hù)操作數(shù)符號(hào) 3.2匯編指令系統(tǒng)及應(yīng)用舉例5.ROL指令 該指令進(jìn)行循環(huán)左移,就是簡(jiǎn)單地將有效值的最高位b7移位到進(jìn)位C,進(jìn)位C

29、原來(lái)的值移位到有效值的最低位b0,其余各位向左移一位 3.2匯編指令系統(tǒng)及應(yīng)用舉例6.ROR指令 該指令進(jìn)行循環(huán)右移,就是簡(jiǎn)單地將有效值的最低位b0移位到進(jìn)位C,進(jìn)位C原來(lái)的值移位到有效值的最高位b7,其余各位向右移一位 3.2匯編指令系統(tǒng)及應(yīng)用舉例 ;-LSL指令例子 LDA #$01 LSLA LSLA ;-LSR指令例子 LDA #$80 LSRA LSRA3.2匯編指令系統(tǒng)及應(yīng)用舉例3.2.5 轉(zhuǎn)移類指令這組指令分類有條件轉(zhuǎn)移類指令和無(wú)條件轉(zhuǎn)移類指令。有條件轉(zhuǎn)移指令在條件滿足時(shí)轉(zhuǎn)移到程序計(jì)數(shù)器PC指定的相應(yīng)地址處執(zhí)行,否則順序執(zhí)行程序。有條件轉(zhuǎn)移類指令又可分為累加器A比較相等轉(zhuǎn)移指令、

30、減1不為轉(zhuǎn)移指令、CCR轉(zhuǎn)移指令、位測(cè)試轉(zhuǎn)移指令等。無(wú)條件轉(zhuǎn)移指令(也稱跳轉(zhuǎn)指令)則無(wú)條件限制,直接轉(zhuǎn)移到程序計(jì)數(shù)器PC指定的地址處執(zhí)行程序,例如,BRA、JMP指令。另外,循環(huán)控制指令也屬于有條件轉(zhuǎn)移類指令的范疇。3.2匯編指令系統(tǒng)及應(yīng)用舉例有條件轉(zhuǎn)移指令和循環(huán)控制指令都使用了相對(duì)尋址方式,有條件地轉(zhuǎn)移到一個(gè)與轉(zhuǎn)移相關(guān)的位置。CCR寄存器根據(jù)條件分支或循環(huán)控制指令,決定執(zhí)行新的地址還是繼續(xù)順序執(zhí)行下一條指令。注意,BRA指令是個(gè)特殊的指令,因?yàn)闊o(wú)條件轉(zhuǎn)移總是會(huì)發(fā)生;BRN指令也一樣,因?yàn)闊o(wú)條件轉(zhuǎn)移從不發(fā)生;BIL 和BIH指令也是很特別的,是因?yàn)樗鼈儧Q定是否需要轉(zhuǎn)移,查看IRQ引腳的狀態(tài)而不

31、是CCR寄存器中的條件位。3.2匯編指令系統(tǒng)及應(yīng)用舉例1.JMP指令 JMP指令是將其后面所接的操作數(shù)為地址值送至16位程序計(jì)數(shù)器PC,使程序跳至該指令所指定的地址處執(zhí)行,該指令可以實(shí)現(xiàn)64KB($0000$FFFF)空間任一有效地址的跳轉(zhuǎn)。它具有5種尋址方式,而且不影響CCR寄存器的標(biāo)志位。 3.2匯編指令系統(tǒng)及應(yīng)用舉例2.BRA指令 該指令是無(wú)條件轉(zhuǎn)移指令的其中一種,只有相對(duì)尋址方式(REL),實(shí)現(xiàn)無(wú)條件相對(duì)轉(zhuǎn)移,由于是相對(duì)尋址,本身又為2字節(jié)指令,故其無(wú)條件相對(duì)轉(zhuǎn)移的范圍為相對(duì)于存放BRA機(jī)器指令碼地址的-126+129字節(jié)空間。 3.2匯編指令系統(tǒng)及應(yīng)用舉例3.BRN指令 該指令無(wú)條件

32、不轉(zhuǎn)移,即是不具有任何轉(zhuǎn)移功能,它只是消耗3個(gè)總線周期的空操作。 3.2匯編指令系統(tǒng)及應(yīng)用舉例4.BEQ指令 該指令主要用于表格查找子程序的快速跳轉(zhuǎn),它檢測(cè)累加器A中的值是否與某一立即數(shù)或存儲(chǔ)單元的值相等,若相等則CC寄存器的Z標(biāo)志位被置為1,如果(Z)=1則使程序轉(zhuǎn)移到指令所指定的地址處執(zhí)行,否則順序執(zhí)行下一指令,它不改變?nèi)魏卧僮鲾?shù)的值。 3.2匯編指令系統(tǒng)及應(yīng)用舉例5.BNE指令 該指令的功能恰好與BEQ指令相反,若累加器A中的值與某一立即數(shù)或存儲(chǔ)單元的值不相等則轉(zhuǎn)移指令。 3.2匯編指令系統(tǒng)及應(yīng)用舉例6.BCC指令 該指令根據(jù)CC寄存器的進(jìn)位標(biāo)志位C的情況決定是否轉(zhuǎn)移,若進(jìn)位為0則轉(zhuǎn)移

33、,否則順序執(zhí)行程序。 3.2匯編指令系統(tǒng)及應(yīng)用舉例7.BCS指令 該指令的功能恰好與BCC指令相反,若進(jìn)位為1則轉(zhuǎn)移指令,否則順序執(zhí)行程序。 8.BPL指令 該指令根據(jù)CC寄存器的負(fù)標(biāo)志位N的情況決定是否轉(zhuǎn)移,若負(fù)標(biāo)志位N=0則轉(zhuǎn)移,否則順序執(zhí)行程序。 3.2匯編指令系統(tǒng)及應(yīng)用舉例9.BMI指令 該指令的功能恰好與BPL指令相反,若負(fù)標(biāo)志位N=1則轉(zhuǎn)移,否則順序執(zhí)行程序。 10.BIL指令 該指令根據(jù)IRQ引腳電平的高低來(lái)決定是否進(jìn)行轉(zhuǎn)移操作,如果IRQ引腳為低電平則程序計(jì)數(shù)器PC轉(zhuǎn)移至指定的地址處執(zhí)行程序。 3.2匯編指令系統(tǒng)及應(yīng)用舉例11.BIH指令 該指令的功能恰好與BIL指令相反,如果

34、IRQ引腳為高電平則程序計(jì)數(shù)器PC轉(zhuǎn)移至指定的地址處執(zhí)行程序。 12.BMC指令 該指令根據(jù)CC寄存器的中斷屏蔽標(biāo)志位I的情況決定是否轉(zhuǎn)移,若中斷屏蔽標(biāo)志位I=0則轉(zhuǎn)移,否則順序執(zhí)行程序 3.2匯編指令系統(tǒng)及應(yīng)用舉例13.BMS指令 該指令的功能恰好與BMC指令相反, 若中斷屏蔽標(biāo)志位I=1則轉(zhuǎn)移,否則順序執(zhí)行程序。 14BHCC指令 該指令根據(jù)CC寄存器的半進(jìn)位標(biāo)志位H的情況決定是否轉(zhuǎn)移,若半進(jìn)位標(biāo)志位H=0則轉(zhuǎn)移,否則順序執(zhí)行程序。 3.2匯編指令系統(tǒng)及應(yīng)用舉例15BHCS指令 該指令的功能恰好與BHCC指令相反,根據(jù)CC寄存器的半進(jìn)位標(biāo)志位H的情況決定是否轉(zhuǎn)移,若半進(jìn)位標(biāo)志位H=1則轉(zhuǎn)移

35、,否則順序執(zhí)行程序。 3.2匯編指令系統(tǒng)及應(yīng)用舉例16BLT指令 該指令根據(jù)CC寄存器的溢出標(biāo)志位V和負(fù)標(biāo)志位N的情況決定是否轉(zhuǎn)移,若溢出標(biāo)志位V和負(fù)標(biāo)志位N狀態(tài)不一致時(shí)則轉(zhuǎn)移,否則順序執(zhí)行程序。也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)小于后一個(gè)操作數(shù)則轉(zhuǎn)移。該指令通常與比較指令、減法運(yùn)算指令配合使用。 3.2匯編指令系統(tǒng)及應(yīng)用舉例17BLE指令 該指令根據(jù)CC寄存器的零標(biāo)志位Z、溢出標(biāo)志位V和負(fù)標(biāo)志位N的情況決定是否轉(zhuǎn)移,若(Z) | (N V) = 1時(shí)則轉(zhuǎn)移,否則順序執(zhí)行程序。也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)小于或等于后一個(gè)操作數(shù)則轉(zhuǎn)移,同樣該指令也與比較指令、減法運(yùn)算指令配合使

36、用。 3.2匯編指令系統(tǒng)及應(yīng)用舉例18BGE指令 該指令根據(jù)CC寄存器溢出標(biāo)志位V和負(fù)標(biāo)志位N的情況決定是否轉(zhuǎn)移,若 (N V) = 0時(shí)則轉(zhuǎn)移,否則順序執(zhí)行程序。也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)大于或等于后一個(gè)操作數(shù)則轉(zhuǎn)移。 3.2匯編指令系統(tǒng)及應(yīng)用舉例19BGT指令 該指令的功能與BLT指令相反,它根據(jù)CC寄存器的零標(biāo)志位Z、溢出標(biāo)志位V和負(fù)標(biāo)志位N的情況決定是否轉(zhuǎn)移,若(Z) | (N V) = 0時(shí)則轉(zhuǎn)移,也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)大于后一個(gè)操作數(shù)則轉(zhuǎn)移。同樣該指令也與比較指令、減法運(yùn)算指令配合使用 3.2匯編指令系統(tǒng)及應(yīng)用舉例20BLO指令 該指令根據(jù)CC寄存器

37、的進(jìn)位標(biāo)志位C的情況決定是否轉(zhuǎn)移,如果(C)=1,程序計(jì)數(shù)器PC則轉(zhuǎn)移。也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)小于后一個(gè)操作數(shù)則轉(zhuǎn)移,它與BCS指令相似。 3.2匯編指令系統(tǒng)及應(yīng)用舉例21BLS指令 該指令根據(jù)CC寄存器的進(jìn)位標(biāo)志位C和零標(biāo)志位Z的情況決定是否轉(zhuǎn)移,如果(C) | (Z) = 1,程序計(jì)數(shù)器PC則轉(zhuǎn)移。也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)小于或等于后一個(gè)操作數(shù)則轉(zhuǎn)移。 3.2匯編指令系統(tǒng)及應(yīng)用舉例22BHS指令 該指令根據(jù)CC寄存器的進(jìn)位標(biāo)志位C的情況決定是否轉(zhuǎn)移,如果(C) = 0,程序計(jì)數(shù)器PC則轉(zhuǎn)移。也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)大于或等于后一個(gè)操作數(shù)則轉(zhuǎn)

38、移,它與BCC指令相似, 3.2匯編指令系統(tǒng)及應(yīng)用舉例23BHI指令 該指令根據(jù)CC寄存器的進(jìn)位標(biāo)志位C和零標(biāo)志位Z的情況決定是否轉(zhuǎn)移,如果(C) | (Z) = 0,程序計(jì)數(shù)器PC則轉(zhuǎn)移。也就是兩個(gè)操作數(shù)進(jìn)行比較,若前一個(gè)操作數(shù)大于后一個(gè)操作數(shù)則轉(zhuǎn)移。 3.2匯編指令系統(tǒng)及應(yīng)用舉例24BRCLR指令 該指令是根據(jù)存儲(chǔ)單元的位的狀態(tài)來(lái)決定是否轉(zhuǎn)移,如果存儲(chǔ)單元中第n位為0則轉(zhuǎn)移 25BRSET指令 該指令的功能與BRCLR指令相反,如果存儲(chǔ)單元中第n位為1則轉(zhuǎn)移指令 3.2匯編指令系統(tǒng)及應(yīng)用舉例CBEQ指令 CBEQ 指令是比較累加器A和某個(gè)存儲(chǔ)單元的內(nèi)容,如果它們彼此相等就轉(zhuǎn)移至指定的地址處

39、執(zhí)行。即是兩操作數(shù)相比較,相等則轉(zhuǎn)移。注意,CBEQA指令是累加器A與一個(gè)立即數(shù)相比較,CBEQX 指令是變址寄存器X與一個(gè)立即數(shù)相比較。CBEQ 指令采用變址尋址方式時(shí),當(dāng)比較累加器A和變址存儲(chǔ)單元的內(nèi)容后,變址寄存器H:X 會(huì)自動(dòng)加1。 3.2匯編指令系統(tǒng)及應(yīng)用舉例27DBNZ 該指令是累加器A、變址寄存器X或存儲(chǔ)單元的內(nèi)容先進(jìn)行減1操作,再判斷結(jié)果是否為0,如果不為0則程序計(jì)數(shù)器PC轉(zhuǎn)移指定的地址處執(zhí)行程序。 3.2匯編指令系統(tǒng)及應(yīng)用舉例JMP LOOP ;跳轉(zhuǎn)到標(biāo)號(hào)LOOPBRA Wei ;無(wú)條件轉(zhuǎn)移到標(biāo)號(hào) WeiCMP PTAD ; 寄存器PTAD與累加器相比較BEQ YY ;兩者比

40、較若相等,(Z)=1,則轉(zhuǎn)移到標(biāo)號(hào)YCMP PTBD ; 寄存器PTBD與累加器相比較 BNE JJ ;兩者比較若不相等,(Z)=0,則轉(zhuǎn)移到標(biāo)號(hào)JJ3.2匯編指令系統(tǒng)及應(yīng)用舉例BPL TK ;如果(N)=0則轉(zhuǎn)移到標(biāo)號(hào)TKBMI TT ;如果(N)=1則轉(zhuǎn)移到標(biāo)號(hào)TTBIH DELAY ;如果IRQ引腳=1,則程序計(jì)數(shù)器PC轉(zhuǎn)移至標(biāo)號(hào) DELAY CLI ;把CC寄存器的中斷屏蔽標(biāo)志位I清0BMC LOOP ;經(jīng)過(guò)上一條指令的執(zhí)行,(I)=0,則程序計(jì)數(shù)器 PC轉(zhuǎn)移至標(biāo)號(hào)LOOPCLI;把CC寄存器的中斷屏蔽標(biāo)志位I清0 BMC LOOP;經(jīng)過(guò)上一條指令的執(zhí)行,(I)=0,則程 序計(jì)數(shù)器PC

41、沒(méi)有轉(zhuǎn)移到 標(biāo)號(hào)LOOP,而是 順序執(zhí)行下一條指令 LDA #$0A;這時(shí)程序計(jì)數(shù)器PC跳到此處執(zhí)行3.2匯編指令系統(tǒng)及應(yīng)用舉例ADD #$01;累加器A的內(nèi)容加上二進(jìn)制立即數(shù)00000001 BHCC KEY ;假設(shè)累加器A的內(nèi)容00001111,運(yùn)算后(H)=1,累加器A的內(nèi)容00010000,此時(shí)程序計(jì)數(shù)器PC不轉(zhuǎn)移至標(biāo)號(hào)KEY STA PTAD ;程序計(jì)數(shù)器PC繼續(xù)順序執(zhí)行程ADD #$01;累加器A的內(nèi)容加上二進(jìn)制立即數(shù)00000001 BHCS KEY ;假設(shè)累加器A的內(nèi)容00001111,運(yùn)算后(H)=1,累加器A的內(nèi)容00010000,此時(shí)程序計(jì)數(shù)器PC轉(zhuǎn)移至標(biāo)號(hào)KEYCPM

42、#$08 ; 將累加器A的內(nèi)容與十六進(jìn)制立即數(shù)08進(jìn)行比較 BLT LK ;若累加器A的內(nèi)容小于十六進(jìn)制立即數(shù)08,(N V ) =1,程序計(jì)數(shù)器PC轉(zhuǎn)移至標(biāo)號(hào)LK3.2匯編指令系統(tǒng)及應(yīng)用舉例 SUB #$02;將累加器A的內(nèi)容減去十六進(jìn)制立 即數(shù)02 BGE YY ;如果累加器A的內(nèi)容大于或等于十六 進(jìn)制立即數(shù),取02 (N V) = 0, 程序計(jì)數(shù)器PC 轉(zhuǎn)移至標(biāo)號(hào)YYCPM #$09;將累加器A的內(nèi)容與十六進(jìn)制數(shù)09 相比較 BGE YY ;如果累加器A的內(nèi)容大于十六進(jìn)制數(shù)09, (Z) | (N V) = 0,程 序計(jì)數(shù)器PC 轉(zhuǎn)移至標(biāo)號(hào)YYSUB #$02;將累加器A的內(nèi)容減去十六進(jìn)

43、制立即數(shù)02 BLO WW ;假設(shè)累加器A的內(nèi)容小于十六進(jìn)制數(shù)02,(C) =1,程序計(jì)數(shù)器PC 轉(zhuǎn)移至標(biāo)號(hào)WW3.2匯編指令系統(tǒng)及應(yīng)用舉例3.2.6 相關(guān)堆棧指令堆棧指令包括入棧指令和出棧指令。HCS08系列單片機(jī)的堆棧指令只能將累加器A、變址寄存器H:X中的內(nèi)容壓入堆棧,或者將堆棧中的內(nèi)容彈出到累加器A、變址寄存器H:X中。入棧操作按照先壓入,后堆棧指針寄存器SP減1的規(guī)則;出棧操作先執(zhí)照堆棧指針寄存器SP加1,后彈出的規(guī)則。它不影響CCR寄存器的標(biāo)志位。3.2匯編指令系統(tǒng)及應(yīng)用舉例1RSP指令堆棧指針復(fù)位(RSP)指令的操作是采用隱含尋址方式,它兼容于早期的M6805系列單片機(jī)。該指令使

44、用存儲(chǔ)單元$FF加載到堆棧指針寄存器SP 的低8 位,但不影響堆棧指針寄存器SP的高8 位。在早期的體系結(jié)構(gòu)中,SP寄存器的高8 位難以改為$00,因此RSP 需要強(qiáng)迫堆棧指針寄存器SP復(fù)位到其原始狀態(tài)($00FF)。在HCS08 系列中,$00FF 很少被用來(lái)作為堆棧的起始指針。所以,也不能夠確定高半部分會(huì)保持$00,因此,RSP 在新的HCS08 程序中通常不是太常用。 3.2匯編指令系統(tǒng)及應(yīng)用舉例2PSHA 指令該指令將累加器A的內(nèi)容壓入堆棧,然后堆棧指針寄存器SP自減1。 3PSHH指令 該指令將變址寄存器H的內(nèi)容壓入堆棧,然后堆棧指針寄存器SP自減1。 4PSHX指令 該指令將變址寄

45、存器X壓入堆棧,堆棧指針寄存器SP自減1。 3.2匯編指令系統(tǒng)及應(yīng)用舉例5PULA指令 該指令將累加器A的內(nèi)容出棧,指令執(zhí)行的步驟是:堆棧指針寄存器SP自加1,再把累加器A的內(nèi)容彈出 6PULH指令 該指令將變址寄存器H的內(nèi)容出棧,指令執(zhí)行的步驟是:堆棧指針寄存器SP自加1,再把變址寄存器H的內(nèi)容彈出。 3.2匯編指令系統(tǒng)及應(yīng)用舉例7PULX指令 該指令將變址寄存器X的內(nèi)容出棧,指令執(zhí)行的步驟是:堆棧指針寄存器SP自加1,再把變址寄存器X的內(nèi)容彈出 8AIS指令 該指令是將堆棧指針寄存器SP加上立即數(shù),所得的結(jié)果作為新的堆棧指針指向的地址。 3.2匯編指令系統(tǒng)及應(yīng)用舉例LDHX #$107F;

46、將十六進(jìn)制立即數(shù)107F送至變址寄存器 H:XTXS;將變址寄存器H:X送至堆棧指針寄存器SP,此 時(shí),堆棧就處于存儲(chǔ)器中107F地址處LDA #$08;將十六進(jìn)制數(shù)08適至累加器APSHA;累加器A的內(nèi)容壓入堆棧,堆棧指針寄存 器SP自減1,執(zhí)行完 這條指令后,存儲(chǔ)單 元107F的內(nèi)容為累加器A的內(nèi)容08,堆棧 指針寄存器SP指向的地址為107EPULA;堆棧指針寄存器SP自加1后指向的地址為 107F,而存儲(chǔ)單元107F 的內(nèi)容為08,再 把存儲(chǔ)單元107F的內(nèi)容傳至累加器 3.2匯編指令系統(tǒng)及應(yīng)用舉例3.2.7 其他各種指令1TST指令 該指令用于測(cè)試?yán)奂悠鰽、變址寄存器X和存儲(chǔ)單元的內(nèi)

47、容是否小于等于0,它執(zhí)行減0操作,但不改變操作數(shù)的內(nèi)容,只是根據(jù)結(jié)果改變N、Z標(biāo)志位。 3.2匯編指令系統(tǒng)及應(yīng)用舉例2TSX指令 該指令的功能恰好與TXS指令相反,將堆棧指針寄存器SP的內(nèi)容傳至到變址寄存器H:X。它采用隱含尋址方式尋址。使用該指令后,若要在隨后的程序訪問(wèn)堆棧中的變量時(shí),可以用TXS指令恢復(fù)堆棧指針寄存器SP的內(nèi)容,這在效率上比應(yīng)用相關(guān)變址指令有微小的優(yōu)勢(shì),因?yàn)槎褩V羔樇拇嫫鱏P在指向下一個(gè)堆棧可用的位置時(shí),指針值會(huì)自動(dòng)加1,很明顯,這個(gè)操作占用了時(shí)間,因此TSX指令會(huì)比變址指令快。 3.2匯編指令系統(tǒng)及應(yīng)用舉例3JSR指令 該指令使程序計(jì)數(shù)器PC跳轉(zhuǎn)至子程序標(biāo)號(hào)處執(zhí)行,執(zhí)行完

48、子程序后再返回原先的地址處繼續(xù)執(zhí)行。它具有5種尋址方式,可調(diào)用64KB地址空間中任一有效地址處的子程序。 該指令的執(zhí)行順序是:程序計(jì)數(shù)器PC加n。其中n的取值有1、2和3,具體依據(jù)該指令的尋址方式。此步驟的目的是待子程序結(jié)束返回時(shí)能使程序計(jì)數(shù)器PC正確指向該指令的下一條指令。把程序計(jì)數(shù)器PC的低8位值壓入堆棧,然后堆棧指針寄存器SP減1。把程序計(jì)數(shù)器PC的高8位值壓入堆棧,然后堆棧指針寄存器SP減1。把子程序標(biāo)號(hào)的地址傳送至程序計(jì)數(shù)器PC。3.2匯編指令系統(tǒng)及應(yīng)用舉例4BSR指令 該指令使程序計(jì)數(shù)器PC跳轉(zhuǎn)至子程序標(biāo)號(hào)處執(zhí)行轉(zhuǎn)移到子程序,執(zhí)行完子程序后再返回原先的地址處繼續(xù)執(zhí)行。它采用相對(duì)尋址

49、方式尋址,只能調(diào)用相對(duì)于本指令地址-126+129地址空間內(nèi)的子程序。該指令的執(zhí)行順序與JSR指令相似,區(qū)別是執(zhí)行該指令時(shí),程序計(jì)數(shù)器PC是加2。 3.2匯編指令系統(tǒng)及應(yīng)用舉例5RTS指令 該指令也稱為子程序返回指令。通常,它在子程序的結(jié)尾,當(dāng)調(diào)用完子程序后,它使程序計(jì)數(shù)器PC指向調(diào)用處的下一條指令。該指令的執(zhí)行順序是:堆棧指針寄存器SP加1,程序計(jì)數(shù)器PC的高8位出棧。堆棧指針寄存器SP加1,程序計(jì)數(shù)器PC的低8位出棧。3.2匯編指令系統(tǒng)及應(yīng)用舉例6SWI 指令該指令也稱軟件中斷(SWI)指令,它和JSR 指令相似,但它要把程序計(jì)數(shù)器PC、變址寄存器X、累加器A 和CCR 寄存器中的內(nèi)容保存

50、到堆棧中,執(zhí)行完中斷服務(wù)子程序后可以返回上述幾個(gè)寄存器的值。該指令的執(zhí)行順序是:程序計(jì)數(shù)器PC加1,此步驟的目的是待子程序結(jié)束返回時(shí)能使程序計(jì)數(shù)器PC正確指向該指令的下一條指令。把程序計(jì)數(shù)器PC的低8位值壓入堆棧,然后堆棧指針寄存器SP減1。把程序計(jì)數(shù)器PC的高8位值壓入堆棧,然后堆棧指針寄存器SP減1。把變址寄存器X的值壓入堆棧,然后堆棧指針寄存器SP減1。把累加器A的值壓入堆棧,然后堆棧指針寄存器SP減1。把CCR 寄存器的值壓入堆棧,然后堆棧指針寄存器SP減1。屏蔽中斷標(biāo)志位I,即中斷標(biāo)志位I的值為1。把中斷地址的高8位傳送至程序計(jì)數(shù)器PC的高8位,把中斷地址的低8位傳送至程序計(jì)數(shù)器PC

51、的低8位。3.2匯編指令系統(tǒng)及應(yīng)用舉例7RTI 指令該指令也稱軟件中斷返回指令。一般地,它處在中斷服務(wù)程序的最后,當(dāng)執(zhí)行完中斷服務(wù)程序后,它恢復(fù)了CCR 寄存器、累加器A、變址寄存器X、程序計(jì)數(shù)器PC的值,之前這些寄存器按相反的順序被保存在堆棧中。該指令的執(zhí)行順序是:堆棧指針寄存器SP加1,CCR 寄存器的值出棧。堆棧指針寄存器SP加1,累加器A的值出棧。堆棧指針寄存器SP加1,變址寄存器X的值出棧。堆棧指針寄存器SP加1,程序計(jì)數(shù)器PC的高8位值出棧。堆棧指針寄存器SP加1,程序計(jì)數(shù)器PC的低8位值出棧。3.2匯編指令系統(tǒng)及應(yīng)用舉例8NOP指令 該指令也稱空操作指令,它沒(méi)有操作,只是用于產(chǎn)生

52、1個(gè)總線周期的延時(shí)。 9SEC指令 該指令設(shè)定CCR 寄存器的進(jìn)位標(biāo)志位C為1,通常用于在執(zhí)行左移或右移指令前,改變進(jìn)位標(biāo)志 3.2匯編指令系統(tǒng)及應(yīng)用舉例10CLC指令 該指令的功能恰好與SEC指令相反,它設(shè)定CCR 寄存器的進(jìn)位標(biāo)志位C為0,通常用于在執(zhí)行左移或右移指令前,改變進(jìn)位標(biāo)志 11SEI指令 該指令設(shè)定CCR 寄存器的中斷屏蔽標(biāo)志位I為1,主要用于禁止中斷。在上電復(fù)位或其它幾種復(fù)位開始,至堆棧指針和其他系統(tǒng)條件初始化之前的這段時(shí)間,可通過(guò)SET指令設(shè)置I 位為1來(lái)禁止中斷,以防意想不到的事件發(fā)生 3.2匯編指令系統(tǒng)及應(yīng)用舉例12CLI指令 該指令的功能恰好與SEI指令相反,它設(shè)定C

53、CR 寄存器的中斷屏蔽標(biāo)志位I為0,主要用于開戶中斷。當(dāng)完成系統(tǒng)初始化后,需要用CLI 指令來(lái)啟動(dòng)中斷 3.2匯編指令系統(tǒng)及應(yīng)用舉例13BGND指令 該指令的用法特殊,用于CPU 停止執(zhí)行新指令且不知道要持續(xù)多長(zhǎng)時(shí)間的情況,BGND指令通常被開發(fā)系統(tǒng)用于設(shè)置用戶調(diào)試程序,以實(shí)現(xiàn)軟件斷點(diǎn)。當(dāng)ENBDM=1時(shí),進(jìn)入背景調(diào)試狀態(tài)。相對(duì)于M68HC08系列單片機(jī), BGND指令是HCS08的新增指令。普通用戶程序中不會(huì)使用BGND,因?yàn)樗鼜?qiáng)制CPU 停止處理用戶指令而進(jìn)入背景調(diào)試模式。要重新執(zhí)行用戶程序的唯一方法是通過(guò)復(fù)位,或由主機(jī)調(diào)試系統(tǒng)通過(guò)背景調(diào)試接口發(fā)出GO、TRACE1或AGGO等串行命令。3

54、.2匯編指令系統(tǒng)及應(yīng)用舉例14WAIT指令 該指令使CPU進(jìn)入低功耗模式,使能中斷,接著處于等待中斷的狀態(tài)。該指令被執(zhí)行后,會(huì)引發(fā)CPU 關(guān)閉時(shí)鐘以節(jié)省功耗,但其他的外圍系統(tǒng)繼續(xù)運(yùn)行,一旦有中斷源(外部的IRQ引腳或者來(lái)自內(nèi)部的外圍設(shè)備)到來(lái),即可喚醒WAIT 模式下的CPU。另外,復(fù)位也可以喚醒WAIT 模式下的CPU 3.2匯編指令系統(tǒng)及應(yīng)用舉例15STOP指令 該指令與WAIT指令一樣,使CPU進(jìn)入低功耗模式,使能中斷,停止處理相應(yīng)的MCU工作,接著處于等待中斷的狀態(tài)。該指令被執(zhí)行后,會(huì)強(qiáng)迫MCU 關(guān)掉所有的系統(tǒng)時(shí)鐘以減少系統(tǒng)功率,達(dá)到最小的功率。在這種模式下,振蕩器和時(shí)基模塊的雙穩(wěn)態(tài)多

55、諧振蕩器的時(shí)鐘均已停止,因此系統(tǒng)功耗減至最小狀態(tài) 3.2匯編指令系統(tǒng)及應(yīng)用舉例LDA#$0A;把十六進(jìn)制數(shù)0A存入 累加器A中NOP ;沒(méi)有操作,1個(gè)總線周期NOP ;沒(méi)有操作,1個(gè)總線周期JSR DELAY ;調(diào)用子程序 DELAY3.3 偽指令匯編語(yǔ)言在源程序中使助記符和符號(hào)給編程帶來(lái)了極大的方便,同時(shí)也給匯編帶來(lái)了因難,因?yàn)閰R編程序無(wú)法區(qū)分源程序中的符號(hào)是數(shù)據(jù)還是地址,也無(wú)法識(shí)別數(shù)據(jù)的類型,還不知道程序的定位、分段等情況。為了解決這些問(wèn)題,匯編語(yǔ)言中專門設(shè)置了偽指令。偽指令只為匯編程序?qū)⒎?hào)指令編譯成機(jī)器指令碼提供信息,它們本身并不生成代碼,匯編工作結(jié)束后它們就不再存在。 偽指令是指令助

56、記符里保留的命令字, 它可以設(shè)置一段程序的起始地址,可以使一個(gè)標(biāo)號(hào)和一個(gè)值等同起來(lái),可以確定程序變量在存儲(chǔ)器中的位置,也可以為RAM 變量預(yù)留空間,還可以控制打印、為編譯器配置選項(xiàng)等等。3.3 偽指令1BASE設(shè)定編譯器的缺省數(shù)進(jìn)制一般地,編譯器默認(rèn)用十進(jìn)制數(shù),但是有些編譯器默認(rèn)把沒(méi)有前綴的數(shù)字當(dāng)作16 進(jìn)制數(shù)來(lái)處理。如果想使用十進(jìn)制作為默認(rèn)的數(shù)進(jìn)制,那么可在源文件的開頭使用BASE指令設(shè)置。 3.3 偽指令2INCLUDE指定附加源文件在編寫工程源代碼時(shí),將一個(gè)工程項(xiàng)目的所有源代碼放在一個(gè)單獨(dú)的文件里往往是不恰當(dāng)?shù)?,如果編寫的源代碼太多,就不容易編輯和管理這個(gè)源代碼文件了,因此,可以將一個(gè)工

57、程項(xiàng)目拆分為兩個(gè)或更多的獨(dú)立源文件。而INCLUDE 偽指令就是這些獨(dú)立源文件的紐帶。一般地,在主源文件中使用INCLUDE 指令包含其他的源文件,當(dāng)編譯器遇到一個(gè)INCLUDE 指令時(shí),它就會(huì)將附加源文件的內(nèi)容轉(zhuǎn)換到被包含的文件里,直到檢測(cè)測(cè)到一個(gè)文件的結(jié)束信息為止。該偽指令的常用用法是包含一個(gè)芯片的定義文件(有時(shí)被稱為通用文件)。這個(gè)文件定義了有關(guān)寄存器的相關(guān)地址,所以,在編寫源程序時(shí)能在項(xiàng)目里直接使用寄存器和位名。 3.3 偽指令3.NOLIST/LIST關(guān)閉或打開文件列表在將一個(gè)程序的源文件編譯成目標(biāo)代碼文件的同時(shí),編譯器會(huì)讀一個(gè)源文件并且生成一個(gè)復(fù)合的列表文件。列表文件是一個(gè)包含了目

58、標(biāo)代碼和生成的行號(hào)以及原始文件信息的純文本文件。NOLIST 和LIST 指令允許控制列表文件的產(chǎn)生。這些指令通常應(yīng)用在編譯器處理MCU 的通用文件時(shí)壓縮列表 3.3 偽指令4ORG設(shè)置程序的起始位置在編譯過(guò)程中,編譯器保留一個(gè)“單元計(jì)數(shù)器”,這計(jì)數(shù)器可以跟蹤下一個(gè)可用的存儲(chǔ)單元以便存儲(chǔ)代碼和變量。ORG 指令可以將這個(gè)計(jì)數(shù)器設(shè)置為一個(gè)具體的地址值,在目標(biāo)文件里它不產(chǎn)生任何實(shí)際代碼,而是告訴編譯器下一字節(jié)的代碼或數(shù)據(jù)應(yīng)該存放的內(nèi)存空間位置。 3.3 偽指令5EQU賦值偽指令該指令告訴編譯器某個(gè)數(shù)值或地址與一個(gè)特定的符號(hào)聯(lián)系起來(lái),表示符號(hào)與符號(hào)后的數(shù)值或地址是等值的。當(dāng)EQU偽指令把一數(shù)值或地址

59、定義為一個(gè)符號(hào)常量后,在源文件中就可以用該符號(hào)常量來(lái)表示該數(shù)值或地址,使程序非常清晰、直觀。 3.3 偽指令6dc.b定義存儲(chǔ)器中字節(jié)常量指令dc.b 用來(lái)定義存儲(chǔ)器的8 位常量。該指令設(shè)置了一個(gè)獨(dú)立的存儲(chǔ)器區(qū)域,讓其關(guān)聯(lián)于一個(gè)指定的8 位數(shù)值。該指令可以有一個(gè)與某個(gè)地址相關(guān)聯(lián)的標(biāo)號(hào),而這個(gè)地址是用來(lái)存儲(chǔ)常量的。3.3 偽指令7dc.w在存儲(chǔ)器中定義16位常量dc.w 指令用來(lái)在存儲(chǔ)器中定義16 位的常量值,它設(shè)定了兩個(gè)存儲(chǔ)器單元用來(lái)存儲(chǔ)指定的16位數(shù)值,開頭的高8 位存儲(chǔ)在當(dāng)前單元計(jì)數(shù)器指向的地址,后面的低8 位存儲(chǔ)在下一個(gè)更高位的存儲(chǔ)器地址。這個(gè)指令有一個(gè)和地址相關(guān)聯(lián)的標(biāo)號(hào),常量的高8 位

60、存儲(chǔ)在這個(gè)地址里。3.3 偽指令8ds.b/ ds.w定義存儲(chǔ)(保留)內(nèi)存變量字節(jié)指令ds.b 為指定的數(shù)值預(yù)留一個(gè)8 位存儲(chǔ)器單元,以便用來(lái)存儲(chǔ)程序變量;ds.w 指令為指定的程序變量預(yù)留16 位存儲(chǔ)器單元。這兩條指令不產(chǎn)生任何的目標(biāo)代碼。指令ds.b 使編譯器與單元計(jì)數(shù)器所指向的當(dāng)前地址相關(guān)聯(lián),之后按照ds.b 指令所設(shè)置的字節(jié)數(shù)調(diào)整單元計(jì)數(shù)器的值,單元計(jì)數(shù)器就指向了下一個(gè)可用的存儲(chǔ)器單元。它通常給一個(gè)指定的程序變量預(yù)留出存儲(chǔ)空間,也可給較大的數(shù)據(jù)結(jié)構(gòu)或表設(shè)置存儲(chǔ)空間。3.3 偽指令9標(biāo)號(hào)編譯器通過(guò)用戶自定義標(biāo)號(hào)可增強(qiáng)代碼的可讀性并且簡(jiǎn)化編程工作。一個(gè)標(biāo)號(hào)只能定義一次,但是可以在一個(gè)程序中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論