2022年單片機(jī)技術(shù)與實(shí)踐教案chap2_第1頁(yè)
2022年單片機(jī)技術(shù)與實(shí)踐教案chap2_第2頁(yè)
2022年單片機(jī)技術(shù)與實(shí)踐教案chap2_第3頁(yè)
2022年單片機(jī)技術(shù)與實(shí)踐教案chap2_第4頁(yè)
2022年單片機(jī)技術(shù)與實(shí)踐教案chap2_第5頁(yè)
已閱讀5頁(yè),還剩83頁(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)介

第三章:?jiǎn)纹瑱C(jī)的指令系統(tǒng)本章重點(diǎn):時(shí)序分析;

延時(shí)分析;尋址方式;

MCS-51指令集;偽指令;

51系列單片機(jī)指令集含有111條指令每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位。按指令執(zhí)行時(shí)間分類:?jiǎn)沃芷?64條);雙周期(45條);4周期(2條)按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類(28條);算術(shù)運(yùn)算類(24條)邏輯運(yùn)算及移位類(25條);控制轉(zhuǎn)移類(17條)位操作類(17條)每條指令在程序存儲(chǔ)器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:?jiǎn)巫止?jié)(49條);雙字節(jié)(45條);3字節(jié)(17條)MCS-51單片機(jī)指令系統(tǒng)有如下特點(diǎn):(1)指令執(zhí)行時(shí)間快。(2)指令短,約有一半的指令為單字節(jié)指令。(3)用一條指令即可實(shí)現(xiàn)2個(gè)一字節(jié)的相乘或相除。(4)具有豐富的位操作指令。(5)可直接用傳送指令實(shí)現(xiàn)端口的輸入輸出操作。1、時(shí)序分析計(jì)算機(jī)工作時(shí),是在統(tǒng)一的時(shí)鐘脈沖控制下一拍一拍地進(jìn)行的。這個(gè)脈沖是由單片機(jī)控制器中的時(shí)序電路發(fā)出的。單片機(jī)的時(shí)序就是CPU在執(zhí)行指令時(shí)所需控制信號(hào)的時(shí)間順序,為了保證各部件間的同步工作,單片機(jī)內(nèi)部電路應(yīng)在唯一的時(shí)鐘信號(hào)下嚴(yán)格地控時(shí)序進(jìn)行工作。計(jì)算機(jī)是在統(tǒng)一的時(shí)鐘脈沖控制下工作的,那么,它的時(shí)鐘脈沖是怎么來(lái)的呢?

要給我們的計(jì)算機(jī)CPU提供時(shí)序,就需要相關(guān)的硬件電路,即振蕩器和時(shí)鐘電路。51系列單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,這個(gè)反相放大器的作用就是用于構(gòu)成振蕩器用的,但要形成時(shí)鐘,外部還需要加一些附加電路。XTAL1XTAL2通常外接一個(gè)晶振兩個(gè)電容1MCS-51系列

方式一:利用內(nèi)部的振蕩器,在引腳Xtal1和Xtal2兩端接晶振,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部時(shí)鐘電路,外接晶振時(shí),晶振兩端的電容一般選擇為30pf左右;這兩個(gè)電容對(duì)頻率有微調(diào)的作用,晶振的頻率范圍可在之間選擇。為了減少寄生電容,更好地保證振蕩器穩(wěn)定、可靠地工作,振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近。1MCS-51系列XTAL1XTAL2外部時(shí)鐘信號(hào)方式二:是利用外部振蕩脈沖接入XTAL1或XTAL2。HMOS和CHMOS單片機(jī)外時(shí)鐘信號(hào)接入方式不同,HMOS型單片機(jī)(例如8051)外時(shí)鐘信號(hào)由XTAL2端腳注入后直接送至內(nèi)部時(shí)鐘電路,輸入端XTAL1應(yīng)接地。由于XTAL2端的邏輯電平不是TTL的,故建議外接一個(gè)上接電阻。8051外時(shí)鐘源接法圖1MCS-51系列XTAL1XTAL2外部時(shí)鐘信號(hào)方式二:對(duì)于CHMOS型的單片機(jī)(例如80C51),因內(nèi)部時(shí)鐘發(fā)生器的信號(hào)取自反相器的輸入端,故采用外部時(shí)鐘源時(shí),接線方式為外時(shí)鐘信號(hào)接到XTAL1而XTAL2懸空。如下圖本腳懸空80C51外時(shí)鐘源接法圖目前各大廠商推出的各類單片機(jī)產(chǎn)品都采用了CHMOS工藝。80C51系列單片機(jī)采用兩種半導(dǎo)體工藝生產(chǎn)。一種是HMOS工藝,即高密度短溝道MOS工藝。另外一種是CHMOS工藝,即互補(bǔ)金屬氧化物的HMOS工藝。CHMOS是CMOS和HMOS的結(jié)合,除保持了HMOS的高速度和高密度的特點(diǎn)之外,還具有CMOS低功耗的特點(diǎn)。例如8051的功耗為630mw,而80C51的功耗只有120mw。在便攜式、手提式或野外作業(yè)儀器設(shè)備上低功耗是非常有意義的。因此,在這些產(chǎn)品中必須使用CHMOS的單片機(jī)芯片。回顧內(nèi)容振蕩(時(shí)鐘)周期

=晶振頻率fosc的倒數(shù);1個(gè)機(jī)器周期

=6個(gè)狀態(tài)周期;=12個(gè)振蕩周期(時(shí)鐘周期);1個(gè)指令周期

=1、2、4個(gè)機(jī)器周期P1P2S1振蕩(時(shí)鐘)周期機(jī)器周期機(jī)器周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2P2P2P2P2P2狀態(tài)周期

通常含一個(gè)機(jī)器周期的指令稱為單周期指令,包含兩個(gè)機(jī)器周期的指令稱為雙周期指令。

MCS-51指令系統(tǒng)中,按它們的長(zhǎng)度可分為單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。執(zhí)行這些指令需要的時(shí)間是不同的,也就是它們所需的機(jī)器周期是不同的,有下面幾種形式:·單字節(jié)指令單機(jī)器周期;單字節(jié)指令雙機(jī)器周期;

·雙字節(jié)指令單機(jī)器周期;雙字節(jié)指令雙機(jī)器周期;

·三字節(jié)指令雙機(jī)器周期;

·單字節(jié)指令四機(jī)器周期(如單字節(jié)的乘除法指令)圖中的ALE脈沖是為了鎖存地址的選通信號(hào),顯然,每出現(xiàn)一次該信號(hào)單片機(jī)即進(jìn)行一次讀指令操作。從時(shí)序圖中可看出,該信號(hào)是時(shí)鐘頻率6分頻后得到,在一個(gè)機(jī)器周期中,ALE信號(hào)兩次有效。1個(gè)機(jī)器周期ALE單字節(jié)單周期指令例:INCAALE1個(gè)機(jī)器周期單字節(jié)單周期指令:

單字節(jié)單周期指令只進(jìn)行一次讀指令操作,當(dāng)?shù)诙€(gè)ALE信號(hào)有效時(shí),PC并不加1,那么讀出的還是原指令,屬于一次無(wú)效的讀操作。雙字節(jié)單周期指令例:ADDA,DATA雙字節(jié)單周期指令:

這類指令兩次的ALE信號(hào)都是有效的,只是第一個(gè)ALE信號(hào)有效時(shí)讀的是操作碼,第二個(gè)ALE信號(hào)有效時(shí)讀的是操作數(shù)。ALE單字節(jié)雙周期指令:

兩個(gè)機(jī)器周期需進(jìn)行四讀指令操作,但只有一次讀操作是有效的,后三次的讀操作均為無(wú)效操作。

ALE單字節(jié)雙周期指令例:INCDPTR若MCS-51單片機(jī)外接晶振為fosc=12MHz時(shí),則單片機(jī)的四個(gè)周期的具體值為:Tosc=振蕩周期=1/12MHz=1/12μs=Tcy=機(jī)器周期=振蕩周期*12=1μs指令周期=1~4μs在MCS-51指令系統(tǒng)中,單字節(jié)、雙字節(jié)指令占絕大多數(shù),三字節(jié)指令很少(13條)。單字節(jié)或雙字節(jié)指令可能是單周期或雙周期的,三字節(jié)指令是雙周期的,乘除指令是四周期的,因此,振蕩頻率為12MHz時(shí),指令執(zhí)行時(shí)間分別為1μs、2μs、4μs。在MCS-51指令中,一般指令主要由操作碼、操作數(shù)組成。指令應(yīng)具有以下功能:(1)操作碼指明執(zhí)行什么性質(zhì)和類型的操作。例如,數(shù)的傳送、加法、減法等。(2)操作數(shù)指明操作的數(shù)本身或者是操作數(shù)所在的地址。(3)指定操作結(jié)果存放的地址。2、指令格式單字節(jié)指令操作碼和操作數(shù)在同一個(gè)字節(jié)中。雙字節(jié)指令前一個(gè)字節(jié)為操作碼,后一個(gè)字節(jié)為操作數(shù)。三字節(jié)指令前一個(gè)字節(jié)為操作碼,后兩個(gè)字節(jié)為操作數(shù)。指令描述符號(hào)介紹

Rn——當(dāng)前選中的寄存器區(qū)中的8個(gè)工作寄存器R0~R7(n=0~7)。

Ri——當(dāng)前選中的寄存器區(qū)中的2個(gè)工作寄存器R0、R1(i=0,1)。

direct——8位的內(nèi)部數(shù)據(jù)存儲(chǔ)器單元中的地址。

#——表明其后跟的是立即數(shù)(就是數(shù)字量本身),有8位、16位常數(shù)。addr16——16位目的地址。

addr11——11位目的地址。rel——8位帶符號(hào)的偏移字節(jié),簡(jiǎn)稱偏移量。DPTR——

數(shù)據(jù)指針,可用作16位地址寄存器。bit——內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺?。A——

累加器。B——

專用寄存器,用于乘法和除法指令中。C——

進(jìn)位標(biāo)志或進(jìn)位位,或布爾處理機(jī)中的累加器。@——寄存器間接尋址或基址寄存器的前綴,如@Ri,@DPTR。

/——

位操作數(shù)的前綴,表示對(duì)該位數(shù)操作取反,如/bit。

(×)——

片內(nèi)RAM的直接地址或寄存器。((×))——

由×尋址的單元中的內(nèi)容。

——箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替。

——箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)所代替。、延時(shí)分析觀察仿真教學(xué)練習(xí)1\單燈亮滅概念1下的仿真實(shí)驗(yàn)例題LJ20080304。結(jié)果有兩個(gè)問(wèn)題:第一,計(jì)算機(jī)執(zhí)行指令的時(shí)間很快,執(zhí)行完后,燈是滅了,但在極短時(shí)間(微秒級(jí))后,計(jì)算機(jī)又執(zhí)行了指令,燈又亮了,所以根本分辨不出燈曾滅過(guò)。第二,在執(zhí)行完后,跳轉(zhuǎn)再去執(zhí)行指令,結(jié)果閃爍不定(又稱余輝或鬼影)。(實(shí)物與仿真效果差別)、解決方案為了解決這兩個(gè)問(wèn)題,我們可以做如下設(shè)想,第一,在執(zhí)行完后,延時(shí)一段時(shí)間(幾秒或零點(diǎn)幾秒)再執(zhí)行第二條指令,就可以分辨出燈曾滅過(guò)了。第二在執(zhí)行完第二條指令后,讓計(jì)算機(jī)再去執(zhí)行第一條指令,不斷地在原地兜圈,我們稱之為“循環(huán)”,這樣就可以完成任務(wù)了。

、程序分析;主程序:LOOP:SETBP1.0引腳燈滅

LCALLDELAY

;延時(shí)

CLRP1.0引腳燈亮

LCALLDELAY

;延時(shí)

AJMPLOOP

;跳轉(zhuǎn);以下是延時(shí)子程序DELAY:MOVR7,#250

;工作寄存器R7賦值D1:MOVR6,#250

;工作寄存器R6賦值D2:DJNZR6,D2;R6如果不等于0,就轉(zhuǎn)移至D2

DJNZR7,D1;R7如果不等于0,就轉(zhuǎn)移至D1

RET

;子程序返回指令

END

;程序結(jié)束指令LED亮滅有定之觀察實(shí)例:仿真教學(xué)練習(xí)1\單燈亮滅概念DELAY:MOVR7,#250;將250傳送至R7

D1:MOVR6,#250;將250傳送至R7

D2:DJNZR6,D2;原地轉(zhuǎn)圈250次

DJNZR7,D1;

RET

指令分析:MOV:意思是傳遞數(shù)據(jù)。從指令MOVRi,#250中來(lái)分析,Ri是一個(gè)接受者,250是被傳遞的數(shù)。(i=6、7)DJNZ:指令的執(zhí)行過(guò)程,它將其后面的第一個(gè)參數(shù)中的值減1,然后看一下,這個(gè)值是否等于0,如果等于0,就往下執(zhí)行,如果不等于0,就轉(zhuǎn)移至第二個(gè)參數(shù)所指位置。最終DJNZR6,D2指令將被執(zhí)行250*250=62500次我們來(lái)計(jì)算剛才的延時(shí),首先必須要知道晶振的頻率,我們?cè)O(shè)所用晶振為12M,則一個(gè)機(jī)器周期就是1微秒。而DJNZ指令是雙周期指令,所以執(zhí)行一次要2個(gè)微秒。一共執(zhí)行62500次,正好125000微秒,也就是125毫秒。要點(diǎn)分析:1、一個(gè)單元中的數(shù)是否可以超過(guò)255;2、如何分配兩個(gè)數(shù)。、延時(shí)估算在單片機(jī)的控制應(yīng)用中,常有延時(shí)的需要,CPU過(guò)一段時(shí)間再去作某件事情,稱之為延時(shí)。延時(shí)有兩種方法,即軟件延時(shí)和硬件延時(shí).硬件延時(shí)是通過(guò)定時(shí)/計(jì)數(shù)器來(lái)實(shí)現(xiàn)的,這種方法不占用CPU的工作時(shí)間。軟件延時(shí)一般采用循環(huán)程序,通過(guò)CPU執(zhí)行一個(gè)具有固定延遲時(shí)間的循環(huán)體來(lái)實(shí)現(xiàn)的。、延時(shí)精確計(jì)算過(guò)程延時(shí)程序的延時(shí)時(shí)間主要與兩個(gè)因素有關(guān),一是所用晶振,二是延時(shí)程序中的循環(huán)次數(shù),一旦晶振確定之后,則主要是如何設(shè)計(jì)與計(jì)算需給定的延時(shí)循環(huán)次數(shù)。設(shè)單片機(jī)的晶振頻率為6MHz,則一機(jī)器周期為2us;設(shè)單片機(jī)的晶振頻率為12MHz,則一機(jī)器周期為1us;匯編語(yǔ)言常用延時(shí)程序所用到的指令指令占用的機(jī)器周期數(shù)MOVRn,#Data

1DJNZRn,Rel

2RET2NOP1ACALLAddr112LCALLAddr162ADDA,Ri1INCDPTR2用得最多的延時(shí)指令基本延時(shí)程序模式及延時(shí)時(shí)間的計(jì)算分以下幾種情況:1、單循環(huán)延時(shí)程序DEL2:

MOVR0,#X

;1周期DEL1:

DJNZR0,DEL1;2周期

RET;2周期延時(shí)時(shí)間=2*X*T+1*T+2*T=(2X+3)T整個(gè)程序的延時(shí)時(shí)間范圍為:5us<=t<=1030us;以晶振頻率6MHz為例延時(shí)時(shí)間的范圍的計(jì)算設(shè)X是裝入寄存器R0的時(shí)間常數(shù),R0是8位寄存器(以下的R1、R2、Ri均為8位),因?yàn)?<=R0<=255,R0=0,延時(shí)時(shí)間最長(zhǎng),R0=1,延時(shí)時(shí)間最短。當(dāng)Ri=0時(shí),由匯編語(yǔ)言的特征知其將從零開始判斷,共256次,所以應(yīng)在公式中代入256,因此這個(gè)程序的最長(zhǎng)定時(shí)時(shí)間為1030us。2、雙重循環(huán)延時(shí)程序:DEL3:

MOVR1,#Y;1周期DEL2:

MOVR0,#X;1周期DEL1:

DJNZR0,DEL1;2周期

DJNZR1,DEL2;2周期

RET;2周期延時(shí)時(shí)間=(2*X+1+2)*Y*T+1*T+2*T=(2XY+3)T整個(gè)程序的延時(shí)范圍為:12us<=t<=263668us;3、三重循環(huán)延時(shí)程序DEL4:

MOVR2,#Z;1周期DEL3:

MOVR1,#Y;1周期DEL2:

MOVR0,#X;1周期DEL1:

DJNZR0,DEL1;2周期

DJNZR1,DEL2;2周期

DJNZR2,DEL3;2周期

RET;2周期延時(shí)時(shí)間=[(2*X+1+2)*Y+1+2]*Z*T+1*T+2*T=(2XYZ+3YZ+3Z+3)T整個(gè)程序的延時(shí)時(shí)間范圍為:練習(xí)1:設(shè)計(jì)一個(gè)延時(shí)100微秒的程序設(shè)單片機(jī)的晶振頻率為12MHz,則一機(jī)器周期為1us,打算延時(shí)100us,只要用下面的代碼,就可以滿足一般的需要:

MOVR0,#049;1周期Loop:DJNZR0,loop;2周期

RET;2周期一個(gè)周期=1us。上述程序延時(shí)時(shí)間=2*49*1+1*1+2*1=101us若將立即數(shù)的值改為048,則延時(shí)時(shí)間為=99us簡(jiǎn)單:MOVR0,#048;1周期

NOP;1周期Loop:DJNZR0,Loop;2周期

RET;2周期說(shuō)明:延時(shí)精確調(diào)整可用NOP空操作指令進(jìn)行調(diào)控,該指令機(jī)器周期為1.如何精確到100us呢???????????搞定!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!練習(xí)1:設(shè)計(jì)一個(gè)延時(shí)100毫秒的程序練習(xí)2:設(shè)計(jì)一個(gè)延時(shí)1秒的程序立即尋址直接尋址寄存器尋址寄存器間接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對(duì)尋址位尋址尋址方式:指令按地址獲得操作數(shù)的方式七種尋址方式,一條指令可能含多種尋址方式。4、單片機(jī)指令的尋址方式1、立即尋址指令中直接給出操作數(shù)的尋址方式。立即操作數(shù)用前面加有#號(hào)的8位或16位數(shù)來(lái)表示。例如:MOV

A,#60H ;A←#60HMOV

DPTR,#3400H;DPTR←#3400HMOV

30H,#40H;30H單元←#40H上述三條指令執(zhí)行完后,累加器A中數(shù)據(jù)為立即數(shù)據(jù)60H,DPTR寄存器中數(shù)據(jù)為3400H,30H單元中數(shù)據(jù)為立即數(shù)40H。注意:符號(hào)“#”表明其后跟的是立即數(shù),

立即數(shù)——就是數(shù)字量本身。2、直接尋址 指令中直接給出操作數(shù)地址的尋址方式,能進(jìn)行直接尋址的存儲(chǔ)空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。例如:MOVR1,1FH;(R1)←(1FH)

MOV30H,4AH;(30H)←(4AH)在本單片機(jī)中規(guī)定:訪問(wèn)特殊功能寄存器SFR只能采用直接尋址方式。例如:MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)MOVB,30H;(B)←(30H)相同相同3、寄存器尋址 以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。通用寄存器指A、B、DPTR以及R0~R7

。從寄存器中讀取操作數(shù)或存放操作數(shù)進(jìn)寄存器例如:CLR A ;A←0INC DPTR ;(DPTR)←(DPTR+1)ADD R5,#20H ;(R5)←(R5+#20H)MOVA,B;(A)←(B)

MOV30H,R0;(30H)←(R0)

MOVA,R1;(A)←(R1)4、寄存器間接尋址寄存器中的內(nèi)容是一個(gè)地址,由該地址單元尋址到所需的操作數(shù)。間接尋址的存儲(chǔ)器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接尋址的寄存器有R0,R1,

DPTR,SP。其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作。注意:1)“間接”表示某寄存器中的“內(nèi)容”只是一個(gè)“單元地址”,這個(gè)地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。2)符號(hào)“@”表示“在…”,其含義與讀音皆同“at”。例如:MOV@R0,A;內(nèi)部RAM(R0)←A

其指令操作過(guò)程示意圖如圖3-1所示。

片內(nèi)RAM30HR034HA30H34H圖3-1MOV@R0,A間接尋址示意圖R0指定存貯地址又如:MOVXA,@R1;A←外部RAM(P2R1)

其指令操作過(guò)程示意圖如圖3-2所示。片外RAM34HP245HA3410H45H10HR1圖3-2MOVXA,@R1間接尋址示意圖

生成地址再如:MOVX@DPTR,A;外部RAM(DPTR)←A

其指令操作過(guò)程示意圖如圖3-3所示。片外RAM2000HDPTR30HA2000H30H圖3-3MOVX@DPTR,A間接尋址示意圖5、變址尋址 變址尋址只能對(duì)程序存儲(chǔ)器中數(shù)據(jù)進(jìn)行操作。由于程序存儲(chǔ)器是只讀的,因此變址尋址只有讀操作而無(wú)寫操作,在指令符號(hào)上采用MOVC的形式(如圖3-4所示)。例如:MOVCA,@A+DPTR;A←(A+DPTR)[設(shè):A中已存有#10H,DPTR中已存有#2000H]操作:將10H+2000H=2010H單元中的數(shù)放進(jìn)累加器A又如,MOVCA,@A+PC;A←(A+PC)這條指令與上條指令不同的是,基址寄存器是PC。相對(duì)尋址

以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的一字節(jié)補(bǔ)碼數(shù)(偏移量)形成新的PC值的尋址方式。相對(duì)尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。

SJMPrel

操作:跳轉(zhuǎn)到的目的地址=當(dāng)前16位PC值+rel

注意:1)“當(dāng)前PC值”指程序中下一條指令所在的首地址,是一個(gè)16位數(shù);2)符號(hào)“rel”表示“偏移量”,是一個(gè)帶符號(hào)的單字節(jié)數(shù),范圍是:-128—+127(80H—7FH),程序存儲(chǔ)器(2000H)200AHSJMP200AH08H2000H+208HPC2000H例如,SJMP08H;PC←PC+2+08H

圖3-5相對(duì)尋址示意圖位尋址位尋址只能對(duì)有位地址的單元作位尋址操作。位尋址其實(shí)是一種直接尋址方式,不過(guò)其地址是位地址。指令中直接給出了操作數(shù)所在的位地址。例如:SETB10H;將10H位置1若22H單元中存放著數(shù)據(jù)40H,22H單元的D0位的位地址為10H,執(zhí)行上述指令后(22H)=41H。又如:MOV32H,C;32H←進(jìn)位位CORLC,32H;C←C∨32H分類指令

數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令邏輯運(yùn)算與循環(huán)類指令程序轉(zhuǎn)移類指令調(diào)用子程序及返回指令位操作指令空操作指令數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令共28條,是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8種。源操作數(shù)可采用寄存器、寄存器間接、直接、立即、變址5種尋址方式尋址,目的操作數(shù)可以采用寄存器、寄存器間接、直接尋址3種尋址方式。MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送途徑如圖3-6所示。直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#data寄存器DPTR圖3-6MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送圖1.以A為目的操作數(shù)MOVA,Rn ;A←RnMOVA,direct;A←(direct)MOVA,@Ri ;A←(Ri)MOVA,#data;A←#data例:MOVA,R1 MOVA,10HMOVA,@R1 MOVA,#30H2.以Rn為目的操作數(shù)MOVRn,A ;Rn←AMOVRn,direct;Rn←(direct)MOVRn,#data ;Rn←#data例:MOVR1,A MOVR1,10HMOVR1,#10H3.以直接地址為目的操作數(shù)MOVdirect,A;(direct)←AMOVdirect,Rn;(direct)←(Rn)MOVdirect1,direct2;(direct1)←(direct2)MOVdirect,@Ri;(direct)←(Ri)MOVdirect,#data;(direct)←#data4.以間接地址為目的操作數(shù)MOV@Ri,A ;(Ri)←AMOV@Ri,direct ;(Ri)←(direct)MOV@Ri,#data ;(Ri)←#data例如:設(shè)(30H)=6FH,R1=40H,執(zhí)行MOV@R1,30H后,30H單元中數(shù)據(jù)取出6FH送入R1間接尋址的40H單元,(40H)=6FH。5.以DPTR為目的操作數(shù)MOVDPTR,#data16;DPTR←#data16例如執(zhí)行MOVDPTR,#2000H后,(DPTR)=2000H。6.訪問(wèn)外部數(shù)據(jù)RAM

MOVXA,@DPTR ;A←(DPTR)MOVX@DPTR,A ;(DPTR)←AMOVXA,@Ri ;A←(P2Ri)MOVX@Ri,A ;(P2Ri)←A8.?dāng)?shù)據(jù)交換l

字節(jié)交換XCHA,Rn ;A<=>RnXCHA,direct ;A<=>(direct)XCHA,@Ri ;A<=>(Ri)l

半字節(jié)交換XCHDA,@Ri ;A0~3<=>(Ri)0~3SWAPA ;A0~3<=>A4~79.堆棧操作所謂堆棧是在片內(nèi)RAM中按“先進(jìn)后出,后進(jìn)先出”原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧出棧由指針SP統(tǒng)一管理。堆棧的操作有如下兩條專用指令:

PUSHdirect;SP←(SP+1),(SP)←(direct)

POP direct;(direct)←(SP),SP←SP-1PUSH是進(jìn)棧(或稱為壓入操作)指令。指令執(zhí)行過(guò)程如圖3-7所示。片內(nèi)RAM30H11H10HSP××片內(nèi)RAM50H40H11H10HSP××40H30H片內(nèi)RAM50H40H11H10H50H××SP30H片內(nèi)RAM40H11H10H34H××SP30H34H34H××××執(zhí)行前執(zhí)行前執(zhí)行前PUSH指令后執(zhí)行POP指令后圖3-7指令PUSH操作示意圖圖3-8指令POP操作示意圖【例3.1】將片內(nèi)RAM30H單元與40H單元中的內(nèi)容互換。方法1(直接地址傳送法):

MOV 31H,30HMOV 30H,40HMOV 40H,31HSJMP $方法2(間接地址傳送法):

MOV R0,#40HMOV R1,#30HMOV A,@R0MOV B,@R1MOV @R1,AMOV @R0,BSJMP $方法3(字節(jié)交換傳送法):

MOV A,30HXCH A,40HMOV 30H,A

方法4(堆棧傳送法):

PUSH 30HPUSH 40HPOP 30HPOP 40H

算術(shù)運(yùn)算類指令

1.加法指令A(yù)DDA,Rn ;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri ;A←A+(Ri)ADDA,#data;A←A+#data2.帶進(jìn)位加指令A(yù)DDCA,Rn ;A←A+Rn+CADDCA,direct;A←A+(direct)+CADDCA,@Ri ;A←A+(Ri)+CADDCA,#data;A←A+#data+CC為來(lái)自PSW狀態(tài)寄存器中的進(jìn)位位C。例如,設(shè)A=20H,R0=21H,C=1,執(zhí)行指令A(yù)DDC

A,R0后,A=42H。3.帶借位減指令SUBBA,Rn ;A←A-Rn-CSUBBA,direct;A←A-(direct)-CSUBBA,@Ri ;A←A-(Ri)-CSUBBA,#data;A←A-#data–C例如,設(shè)A=39H,R0=20H,(20H)=32H,C=1,執(zhí)行指令SUBBA,@R0后,A=06H。4.乘法指令MULA,B ;BA←A×BA和B中各存放一個(gè)8位無(wú)符號(hào)數(shù),指令執(zhí)行后,16位乘積的高8位在B中,低8位存A中。例如,A=30H,B=60H,執(zhí)行MULAB后,A=00H,B=12H。

5.除法指令

DIVA,B;A÷B→商在A中,余數(shù)在B中

A和B中各存放一個(gè)8位無(wú)符號(hào)數(shù),A放被除數(shù),B放除數(shù)。指令執(zhí)行后,A中存放商,B中存入余數(shù)。若B=00H,則指令執(zhí)行后OV=1,A與B不變。例如,A=30H,B=07H,執(zhí)行DIVAB后,

A=06H,B=06H。6.加1指令I(lǐng)NCA ;A←A+1INCRn ;Rn←Rn+1INCdirect;(direct)←(direct)+1INC@Ri ;(Ri)←(Ri)+1INCDPTR;DPTR←DPTR+1例如,(30H)=22H,執(zhí)行INC30H后,(30H)=23H。7.減1指令DECA ;A←A-1DECRn ;Rn←Rn-1DECdirect ;direct←(direct)-1DEC@Ri ;(Ri)←(Ri)-1例如,R0=30H,(30H)=22H,執(zhí)行DEC@R0后,(30H)=21H。8.十進(jìn)制調(diào)整指令DAA

;把A中按二進(jìn)制相加的結(jié)果調(diào)整成按BCD碼相加的結(jié)果。例如,A=65BCD,B=78BCD,C=0,執(zhí)行下列語(yǔ)句ADD A,BDA A后,A=43BCD,C=1?!纠?.2】試把存放在R1R2和R3R4中的兩個(gè)16位數(shù)相加,結(jié)果存于R5R6中。解:參考程序如下:

MOV A,R2;取第一個(gè)數(shù)的低8位

ADD A,R4;兩數(shù)的低8位相加

MOV R6,A;保存和的低8位

MOV A,R1 ;取第一個(gè)數(shù)的高8位

ADDC A,R3 ;兩數(shù)的高8位相加,并把低8位相加時(shí)的進(jìn)位位加進(jìn)來(lái)

MOV R5,A ;把相加的高8位存入

R5寄存器中

SJMP$1.“與”操作指令2.“或”操作指令3.“異或”操作指令4.求反與清除指令5.移位指令邏輯運(yùn)算類指令邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):累加器清零/取反操作(CLR,CPL——2條)CLRA——對(duì)累加器清零1Byte1個(gè)TmCPLA——對(duì)累加器按位取非1Byte1個(gè)Tm指令形式ByteTmANL(ORL,XRL)direct,A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,@Ri11ANL(ORL,XRL)A,Rn11邏輯運(yùn)算指令的常見(jiàn)用法邏輯與ANL用于清0或者保留某些位:例:ANLA,#0FH;則(A)=0AH(已知累加器A中已存有數(shù):9AH)邏輯或ORL用于置1或者保留某些位:例:ORLA,#0FH;則(A)=9FH邏輯異或XRL用于取反或者保留某些位:例:XRLA,#0FH;則(A)=95H(A)

10011010#0FH

0000111195H

10010101邏輯運(yùn)算及移位類指令累加器移位操作:(RL,RLC,RR,RRC——4條)RLA左環(huán)移累加器A累加器ACy累加器ACy累加器ARRCA帶進(jìn)位位右環(huán)移RRA右環(huán)移RLCA帶進(jìn)位位左環(huán)移控制轉(zhuǎn)移類指令無(wú)條件轉(zhuǎn)移:LJMP,AJMP,SJMP,JMP——4條LJMPaddr16長(zhǎng)跳轉(zhuǎn)指令

——可在64K范圍內(nèi)跳轉(zhuǎn)AJMPaddr11絕對(duì)跳轉(zhuǎn)指令

——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn)SJMPrel相對(duì)跳轉(zhuǎn)指令

——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn)JMP@A+DPTR間接長(zhǎng)跳轉(zhuǎn)指令

——可在以DPTR為基址+A為偏移量之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn)控制轉(zhuǎn)移類指令條件轉(zhuǎn)移:JZ,JNZ,CJNE,DJNZ——8條JZrelJNZrel——根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn)DJNZ

溫馨提示

  • 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)論