單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件_第1頁
單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件_第2頁
單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件_第3頁
單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件_第4頁
單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件_第5頁
已閱讀5頁,還剩281頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章匯編語言及其程序設(shè)計3.1匯編語言及其指令格式3.2尋址方式3.3單片機(jī)匯編語言指令體系3.4匯編語言及程序設(shè)計3.5基本程序設(shè)計方法3.6程序設(shè)計舉例第3章匯編語言及其程序設(shè)計3.1匯編語言及其指令格式3.1匯編語言及其指令格式

機(jī)器語言匯編語言

74H09H MOVA,#09H匯編 人工匯編 機(jī)器匯編機(jī)器語言匯編語言返回本章3.1.151單片機(jī)匯編語言概述3.1匯編語言及其指令格式 機(jī)器語言匯編語言機(jī)器語言匯編語指令與指令系統(tǒng)MCS-51的指令系統(tǒng)分為:(1)數(shù)據(jù)傳送類(29條)(2)算術(shù)運算類(24條)(3)邏輯運算類(24條)(4)控制轉(zhuǎn)移類(17條)(5)位操作類(17條)共111條指令指令與指令系統(tǒng)例如:MOVP1,#0FFH源操作數(shù)操作碼目的操作數(shù)3.1.2匯編語言指令格式例如:MOVP1,#0FFH源操作數(shù)操作碼目的操作數(shù)3.

在MCS-51指令中,一般指令主要由操作碼、目的操作數(shù)、源操作數(shù)組成。(1)操作碼指明執(zhí)行什么性質(zhì)和類型的操作。例如,數(shù)的傳送、加法、減法等。(2)目的操作數(shù)指定操作結(jié)果存放的地址。(3)源操作數(shù)指明操作的對象或者是操作數(shù)所在的地址。在MCS-51指令中,一般指令主要由操作碼、目的操作數(shù)、指令格式LOOP:MOVA,#10H

;(A)10H

標(biāo)號注釋[標(biāo)號:]

操作碼

[目的操作數(shù)][,源操作數(shù)]

[;注釋]指令格式LOOP:MOVA,#10H;(A)3.1.3匯編語言指令表常用符號說明(1)Ri和Rn(2)#data(3)#data16(4)rel(5)addr16(6)addr11(7)direct(8)bit(9)@(10)(X)(11)((X))(12)3.1.3匯編語言指令表常用符號說明(1)Ri和Rn(73.2尋址方式

尋找操作數(shù)所在單元的地址稱之為尋址。尋址方式的多少是計算機(jī)功能強(qiáng)弱的重要標(biāo)志。

3.2尋址方式尋找操作數(shù)所在單元的地址稱之為尋尋址方式分類3.2.1立即尋址 3.2.2直接尋址3.2.3寄存器尋址3.2.4寄存器間接尋址3.2.5變址尋址 3.2.6相對尋址 3.2.7位尋址返回本章尋址方式分類3.2.1立即尋址 返回本章3.2.1立即尋址

指令中直接給出操作數(shù)的尋址方式。例如:MOVP1,#0FFH MOVDPTR,#3400HMOV30H,#40H;上述三條指令執(zhí)行完后,寄存器P1中數(shù)據(jù)為立即數(shù)據(jù)FFH,DPTR寄存器中數(shù)據(jù)為3400H,30H單元中數(shù)據(jù)為立即數(shù)40H。返回本節(jié)3.2.1立即尋址 指令中直接給出操作數(shù)的尋址方式A片內(nèi)RAM30H34H3.2.2直接尋址

指令中直接給出操作數(shù)地址的尋址方式。例如:MOVA,30H ;(A)←(30H)

30H為直接給出的內(nèi)部RAM的地址34H34H返回本節(jié)A片內(nèi)RAM30H34H3.2.2直接尋址 指令中直

能進(jìn)行直接尋址的存儲空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。例如:

MOVPSW,#20H;(PSW)←20H

PSW為直接尋址寄存器的符號地址

MOVA,40H

;(A)←(40H)40H為直接給出的內(nèi)部RAM的地址MOVD0H,#20H能進(jìn)行直接尋址的存儲空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。AR030H3.2.3寄存器尋址

以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。通用寄存器指A、B、DPTR、C以及R0~R7

。例如: MOVA,R030H30H返回本節(jié)AR030H3.2.3寄存器尋址 以通用寄存器的內(nèi)容3.2.4寄存器間接尋址

看這個問題,要求從30H單元開始,取20個數(shù),分別送入A累加器

MOVA,30HMOVA,31H…MOVR7,#20MOVR0,#30HLOOP:MOVA,@R0;(A)((R0))

INCR0

DJNZR7,LOOP3.2.4寄存器間接尋址看這個問題,要求從30H單MOVA,@R0執(zhí)行示意圖片內(nèi)RAMR034HA30H34H30HMOVA,@R0執(zhí)行示意圖片內(nèi)RAMR034HA3

寄存器間接尋址:以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)的尋址方式。間接尋址的存儲器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接尋址的寄存器有R0,R1,DPTR,SP。SP僅用于堆棧操作。返回本節(jié)寄存器間接尋址:以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操3.2.5變址尋址

變址尋址:本指令是要在ROM的一個地址單元中找出數(shù)據(jù)。單元地址:(DPTR)+(A)(PC)+(A)變址尋址只有讀操作而無寫操作,在指令符號上采用MOVC的形式,例如:

MOVCA,@A+DPTR;(A)←((A)+(DPTR))

MOVCA,@A+PC;(A)←((A)+(PC))

返回本節(jié)3.2.5變址尋址 變址尋址:本指令是要在ROM的3.2.6相對尋址

相對尋址用于修改PC值,主要用于實現(xiàn)程序的分支轉(zhuǎn)移。以當(dāng)前程序計數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的偏移量rel,而構(gòu)成實際操作數(shù)地址的尋址方式。當(dāng)前PC值=源地址+轉(zhuǎn)移指令字節(jié)數(shù)。偏移量rel為單字節(jié)有符號數(shù),以補(bǔ)碼形式表示,范圍是-128~+1273.2.6相對尋址 相對尋址用于修改PC值,主要用相對尋址目的地址=當(dāng)前PC值+rel

=源地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel相對尋址目的地址=當(dāng)前PC值+rel200AH程序存儲器SJMP08H2000H2001H2002H…2000HPC當(dāng)前PC=2000H+2(2002H)200AHPC2001HPC2002HPCrel=08H例如SJMP08H;(PC)←(PC)+2+08H

返回本節(jié)200AH程序存儲器SJMP08H2000H…2000HPC3.2.7位尋址

位尋址其實是一種直接尋址方式,不過其地址是位地址。位尋址只能對有位地址的單元作位尋址操作。例如:SETB10H;將位地址為10H的位置1

22H單元的D0位的位地址為10H,若22H單元中存放著數(shù)據(jù)40H執(zhí)行上述指令后(22H)=41H。又如:MOV32H,C;(32H)←(CY)SETBPSW.3

返回本節(jié)3.2.7位尋址位尋址其實是一種直接尋址方式,不過3.3單片機(jī)匯編語言指令體系

3.3.1數(shù)據(jù)傳送類指令3.3.2算術(shù)運算類指令3.3.3邏輯運算與移位類指令3.3.4控制轉(zhuǎn)移類指令3.3.5位操作指令返回本章返回本章3.3單片機(jī)匯編語言指令體系 3.3.1數(shù)據(jù)傳送類指3.3.1數(shù)據(jù)傳送類指令

數(shù)據(jù)傳送類指令共29條指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。數(shù)據(jù)傳送類指令用到的助記符有

MOV、MOVX、MOVCXCH、XCHD、SWAPPUSH、POP

數(shù)據(jù)傳送類指令不影響標(biāo)志位CY、AC、OV但可能影響奇偶標(biāo)志P返回本節(jié)3.3.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令共29條返回本直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#data寄存器DPTR圖3-6MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送圖一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令MOVA,directMOVA,#dataMOVA,RnMOVA,@RiMOVRn,AMOVRn,directMOVRn,#dataMOVdirect,AMOVdirect,@RiMOVdirect,#dataMOVdirect,RnMOVdirect2,direct1MOV@Ri,directMOV@Ri,#dataMOV@Ri,AMOVDPTR,#Data直接地址累加器直接地址間接地址寄存器立即數(shù)寄存器圖3-61.以A為目的操作數(shù)MOVA,Rn;(A)←(Rn)MOVA,direct;(A)←(direct)MOVA,@Ri ;(A)←((Ri))MOVA,#data;(A)←#data返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令1.以A為目的操作數(shù)返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令2.以Rn為目的操作數(shù)MOVRn,A ;(Rn)←(A)MOVRn,direct;(Rn)←(direct)MOVRn,#data;(Rn)←#data返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令2.以Rn為目的操作數(shù)返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令3.以直接地址為目的操作數(shù)MOVdirect,A;(direct)←(A)MOVdirect,Rn;(direct)←(Rn)MOVdirect2,direct1;(direct2)←(direct1)MOVdirect,@Ri;(direct)←((Ri))MOVdirect,#data;(direct)←#data返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令3.以直接地址為目的操作數(shù)返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指4.以間接地址為目的操作數(shù)MOV@Ri,A ;(Ri)←(A)MOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←#data例如:設(shè)(30H)=6FH,R1=40H,執(zhí)行:MOV@R1,30H結(jié)果:(40H)=6FH。返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令4.以間接地址為目的操作數(shù)返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指5.以DPTR為目的操作數(shù)MOVDPTR,#data16;(DPTR)←#data16例如:執(zhí)行MOVDPTR,#2000H

結(jié)果:(DPTR)=2000H。返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指令5.以DPTR為目的操作數(shù)返回一、內(nèi)部數(shù)據(jù)存儲器間數(shù)據(jù)傳送指例:(30H)=40H,(40H)=10H,(P1)=0CAH執(zhí)行:

MOVR0,#30H MOVA,@R0 MOVR1,A MOV30H,@R1 MOV@R1,P1 MOVP2,P1問:(30H)=?(40H)=?(P1)=?(P2)=?(R1)=?(R2)=?(A)=?例:(30H)=40H,(40H)=10H,(P1)=0CA二、訪問外部數(shù)據(jù)存儲器的指令

訪問外部存儲器必須通過累加器A

采用間接尋址方式MOVXA,@DPTR ;(A)←((DPTR))MOVX@DPTR,A ;((DPTR))←(A)MOVXA,@Ri ;(A)←((P2Ri))MOVX@Ri,A ;((P2Ri))←(A)外部RAM二、訪問外部數(shù)據(jù)存儲器的指令訪問外部存儲器必須通過累加例:已知外部RAM(0203H)=0FFH,執(zhí)行:

MOVDPTR,#0203H MOVXA,@DPTR MOV30H,A MOVA,#00H MOVX@DPTR,A問:(1)程序功能(2)(DPTR)=?(A)=?(30H)=?例:已知外部RAM(0203H)=0FFH,執(zhí)行:

MOVP2,#02H MOVR0,#03H MOVXA,@R0 MOV30H,A MOVA,#00H MOVX@R0,A

程序2MOVP2,#02H程序2三、訪問程序存儲器的指令MOVCA,@A+DPTR;(A)←((A)+(DPTR))MOVCA,@A+PC ;(A)←((A)+(當(dāng)前PC))例如:已知(A)=30H,(DPTR)=3000H,程序存儲器單元(3030H)=50H,執(zhí)行:MOVCA,@A+DPTR則:(A)=50H。三、訪問程序存儲器的指令MOVCA,@A+DPTR;(A例:在外部ROM/EPROM中從2000H單元開始依次存放0-9的平方值:0,1,4,…,81,要求依據(jù)累加器A的值(0-9)來查找對應(yīng)的平方值。方法1MOVDPTR,#2000HMOVA,#09HMOVCA,@A+DPTR執(zhí)行結(jié)果:(A)=81,(DPTR)=2000H…012000H2001H2002H…0212224外部ROM2009H8192…例:在外部ROM/EPROM中從2000H單元開始依次存放0…方法2MOVA,#09H ADDA,#0FH

MOVCA,@A+PC執(zhí)行結(jié)果:(A)=81,(PC)=1FF1H74H09H24H0FH83H1FF0H012000H2001H2002H…0212224外部ROMPC偏移量=表首地址-(MOVC指令所在地址+1)2009H8192……偏移量=2000H-(1FF0H+1)=0FH(A)=18H1FF1H當(dāng)前PC…方法274H09H24H0FH83H1FF0H012000四、數(shù)據(jù)交換類指令l

字節(jié)交換XCHA,Rn ;(A)(Rn)XCHA,direct;(A)(direct)XCHA,@Ri ;(A)((Ri))2

半字節(jié)交換XCHDA,@Ri;(A0~3)(Ri0~3)SWAPA ;(A0~3)(A4~7)四、數(shù)據(jù)交換類指令l

字節(jié)交換例:(R0)=20H,(A)=3FH,(20H)=75H(1)執(zhí)行

XCHA,R0;(A)=?

XCHDA,@R0;(A)=?

SWAPA;(A)=?

(2)執(zhí)行程序段

MOVA,20HXCHA,R0MOV20H,ASJMP $則(A)=?(R0)=?(20H)=?例:(R0)=20H,(A)=3FH,(20H)=75H五、堆棧操作類指令

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

POPdirect;(direct)←((SP)),

(SP)←(SP)-1五、堆棧操作類指令PUSHdirect;(SP)←(S片內(nèi)RAM50H40H11H10H50H××SP30H執(zhí)行PUSH指令指令PUSH40H

操作示意圖××片內(nèi)RAM40H11H10HSP××30H執(zhí)行前50H片內(nèi)RAM50H40H11H10H50H××SP30H執(zhí)行P執(zhí)行前指令POP30H

操作示意圖片內(nèi)RAM40H11H10H34H×SP30H××執(zhí)行POP指令片內(nèi)RAM30H11H10HSP40H34H34H××執(zhí)行前指令POP30H操作示意圖片內(nèi)RAM4例:已知外部RAM(0203H)=0FFH,(DPTR)=1000H執(zhí)行下面的程序,問(A)=?,(DPTR)=?。

PUSHDPH PUSHDPL

MOVDPTR,#0203H MOVXA,@DPTR MOV30H,A MOVA,#00H MOVX@DPTR,A

POPDPL POPDPH例:已知外部RAM(0203H)=0FFH,(DPTR【例】將片內(nèi)RAM30H單元與40H單元中的內(nèi)容互換。方法1(直接地址傳送法):

MOV 31H,30HMOV 30H,40HMOV 40H,31HSJMP $片內(nèi)RAM40H11H10H34H×30H××31H【例】將片內(nèi)RAM30H單元與40H單元中的內(nèi)容互換。方法方法2(間接地址傳送法):

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

MOV A,30HXCH A,40HMOV 30H,ASJMP $方法3(字節(jié)交換傳送法):方法4(堆棧傳送法):

PUSH 30HPUSH 40HPOP 30HPOP 40HSJMP $返回本節(jié)方法4(堆棧傳送法):返回本節(jié)3.3.2算術(shù)運算類指令 1.加法指令

ADDA,Rn ;(A)←(A)+(Rn)ADDA,direct ;(A)←(A)+(direct)

ADDA,@Ri ;(A)←(A)+((Ri))ADDA,#data ;(A)←(A)+#data3.3.2算術(shù)運算類指令 1.加法指令

這四條加法指令使累加器A可以和內(nèi)部RAM的任何單元內(nèi)容相加,也可和8位立即數(shù)相加。參與運算的是兩個8位二進(jìn)制數(shù),可以看作帶符號數(shù),也可看作無符號數(shù)。加法指令影響標(biāo)志位CY,OV,AC,P

對無符號數(shù)CY=1表示溢出,對有符號數(shù)OV=1表示溢出這四條加法指令使累加器A可以和內(nèi)部RAM的任何單元內(nèi)容相2.帶進(jìn)位加指令A(yù)DDCA,Rn ;(A)←(A)+(Rn)+(C)ADDCA,direct;(A)←(A)+(Rn)+(direct)+(C)ADDCA,@Ri ;(A)←(A)+((Ri))+(C)ADDCA,#data ;(A)←(A)+#data+(C)用于多字節(jié)的加法中ADDA,Rn ;(A)←(A)+(Rn)ADDA,direct ;(A)←(A)+(direct)ADDA,@Ri ;(A)←(A)+((Ri))ADDA,#data ;(A)←(A)+#data2.帶進(jìn)位加指令A(yù)DDA,Rn ;(A)←(A)+(3.帶借位減指令SUBBA,Rn ;(A)←(A)-(Rn)-(C)SUBBA,direct;(A)←(A)-(direct)-(C)SUBBA,@Ri ;(A)←(A)-((Ri))-(C)SUBBA,#data ;(A)←(A)-#data-(C)

例如,設(shè)(A)=39H,(R0)=20H,(20H)=32H,(C)=1執(zhí)行指令:SUBBA,@R0結(jié)果(A)=06H。3.帶借位減指令4.乘法指令

MULAB ;(B)(A)←(A)×(B)A和B中各存放一個8位無符號數(shù),指令執(zhí)行后,16位乘積的高8位在B中,低8位存A中。若乘積大于FFH(255),則溢出標(biāo)志OV=1乘法指令執(zhí)行后CY=0乘法指令本身只能進(jìn)行8位數(shù)的乘法運算。例如,(A)=30H(48),(B)=60H(96),執(zhí)行:MULAB結(jié)果(BA)=1200H(4608)A=00H,B=12H。4.乘法指令

5.除法指令DIVAB;(A)÷(B)→商在A中,余數(shù)在B中A和B中各存放一個8位無符號數(shù),A放被除數(shù),B放除數(shù)。指令執(zhí)行后,A中存放商,B中存入余數(shù);CY=0,OV=0若B=00H,則指令執(zhí)行后OV=1,A與B不變。

例如,A=30H,B=07H,執(zhí)行:DIVAB結(jié)果:A=06H,B=06H。5.除法指令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結(jié)果:(30H)=23H。6.加1指令7.減1指令DECA ;(A)←(A)-1DECRn ;(Rn)←(Rn)-1DECdirect;(direct)←(direct)-1DEC@Ri ;((Ri))←((Ri))-1例如:(R0)=30H,(30H)=22H,執(zhí)行:DEC@R0結(jié)果:(30H)=21H。注意:加(減)1指令執(zhí)行后不影響狀態(tài)標(biāo)志位7.減1指令8.十進(jìn)制調(diào)整指令DAA

;把A中按二進(jìn)制相加的結(jié)果調(diào)整成按BCD碼相加的結(jié)果(1)十進(jìn)制調(diào)整的必要性 二進(jìn)制的加法運算不能完全正確適用于十進(jìn)制的加法運算(2)出錯原因及調(diào)整方法8.十進(jìn)制調(diào)整指令8.十進(jìn)制調(diào)整指令(3)十進(jìn)制調(diào)整的方法累加器低4位大于9或輔助進(jìn)位(AC)為1,則進(jìn)行低4位加6修正:(A)(A)+06H累加器高4位大于9或進(jìn)位標(biāo)志位(CY)為1,則進(jìn)行高4位加6修正:(A)(A)+60H累加器高4位為9,低4位大于9,則進(jìn)行高低4位加6修正:(A)(A)+66H8.十進(jìn)制調(diào)整指令(3)十進(jìn)制調(diào)整的方法例:雙字節(jié)壓縮BCD碼加法 (R5R4)+(R3R2)(R6R5R4)

MOVA,R4 ADDA,R2 DAA MOVR4,A MOVA,R5

ADDCA,R3 DAA MOVR5,A MOVA,#00H

ADDCA,#00H MOVR6,A

(R5)(R4)+(R3)(R2)(R6)(R5)(R4)返回本節(jié)例:雙字節(jié)壓縮BCD碼加法(R5)(R4)(R63.3.3邏輯運算與移位類指令1.“與”操作指令A(yù)NLdirect,AANLdirect,#dataANLA,directANLA,#dataANLA,@RiANLA,Rn3.3.3邏輯運算與移位類指令1.“與”操作指令A(yù)NL2.“或”操作指令ORLdirect,AORLdirect,#dataORLA,directORLA,#dataORLA,@RiORLA,Rn2.“或”操作指令ORLdirect,A3.“異或”操作指令XRLdirect,AXRLdirect,#dataXRLA,directXRLA,#dataXRLA,@RiXRLA,Rn3.“異或”操作指令XRLdirect,A

上述與、或、異或三種邏輯運算都是按位進(jìn)行的,而且不影響標(biāo)志位CY、OV、AC

ANL運算常用來屏蔽某些不用位;ORL運算可對某些位進(jìn)行置位例:將累加器A的內(nèi)容送P1口的低5位,傳送時要求絕對不影響P1口的高3位

ANLA,#00011111B ANLP1,#11100000B ORLP1,A上述與、或、異或三種邏輯運算都是按位進(jìn)行的,而且不影響標(biāo)4.累加器A清零與取反指令CLRACPLA4.累加器A清零與取反指令CLRAA0A7CYCY5.移位指令RLA

;(An+1)(An),(A0)(A7)RLCA

;(An+1)(An),(CY)(A7)

(A0)(CY)

A0A7CYCY5.移位指令RRA

;(An)(An+1),(A7)(A0)RRCA

;(An)(An+1),(CY)(A0)

(A7)(CY)

CYCYRRA;(An)(An+例:已知(20H)=X7X6X5X4X3X2X1X0

(21H)=Y(jié)7Y6Y5Y4Y3Y2Y1Y0執(zhí)行下段程序

MOV30H,20HANL30H,#00011111BMOVA,21HSWAPARLAANLA,#11100000BORL30H,A問:(30H)=_________返回本節(jié)例:已知(20H)=X7X6X5X4X3X2X13.3.4控制轉(zhuǎn)移類指令1.無條件轉(zhuǎn)移指令

LJMP addr16;(PC)←addr16

AJMP addr11;(PC)←(PC)+2

(PC)10~0←addr11

SJMP rel ;(PC)←(PC)+2+rel

JMP @A+DPTR ;(PC)←(A)+(DPTR)長轉(zhuǎn)移指令,三字節(jié)指令,提供16位目標(biāo)地址addr16,轉(zhuǎn)移范圍64K絕對轉(zhuǎn)移指令,雙字節(jié)指令,轉(zhuǎn)移范圍是和當(dāng)前PC在同一個2K范圍內(nèi)短轉(zhuǎn)移指令,雙字節(jié)指令,目的地址=源地址+2+rel間接長轉(zhuǎn)移指令,單字節(jié)指令,可實現(xiàn)多分支的選擇轉(zhuǎn)移3.3.4控制轉(zhuǎn)移類指令1.無條件轉(zhuǎn)移指令長轉(zhuǎn)移指令,三 ORG0000H

AJMP

MAIN

MOVA,#20H……

ORG0080HMAIN:

MOVA,#30H…… ORG0000H2.條件轉(zhuǎn)移指令

1)累加器判零轉(zhuǎn)移指令

JZ rel;若A=0則轉(zhuǎn)移:

(PC)←(PC)+2+rel,否則程序順序執(zhí)行

(PC)←(PC)+2

JNZrel;若A≠0則轉(zhuǎn)移:

(PC)←(PC)+2+rel

,否則程序順序執(zhí)行

2.條件轉(zhuǎn)移指令例:將外部RAM的一個數(shù)據(jù)塊傳送到內(nèi)部RAM,兩者首地址分別為DAT1和DAT2,遇到傳送的數(shù)據(jù)為零時為止。

MOVDPTR,#DAT1 MOVR1,#DAT2 LOOP:MOVXA,@DPTR

HERE:JZHERE MOV@R1,A INCDPTR INCR1

SJMPLOOP例:將外部RAM的一個數(shù)據(jù)塊傳送到內(nèi)部RAM,兩者首地址分別

2)比較轉(zhuǎn)移指令(3字節(jié))

CJNE A,#data,rel

CJNE A,direct,rel CJNE @Ri,#data,rel CJNE Rn,#data,rel

2)比較轉(zhuǎn)移指令(3字節(jié))CJNE A,#data,

CJNE 目的操作數(shù),源操作數(shù),rel

若目的操作數(shù)=源操作數(shù),則(PC)←(PC)+3,順序執(zhí)行若目的操作數(shù)>源操作數(shù),則(PC)←(PC)+3+rel;CY=0,程序轉(zhuǎn)移若目的操作數(shù)<源操作數(shù),則(PC)←(PC)+3+rel;CY=1程序轉(zhuǎn)移CJNE 目的操作數(shù),源操作數(shù),rel

3)減1條件轉(zhuǎn)移指令(循環(huán)轉(zhuǎn)移指令)

DJNZ direct,rel;

(direct)←(direct)–1

若(direct)=0,則(PC)←(PC)+3

否則(PC)←(PC)+3+rel

DJNZ Rn,rel;

(Rn)←(Rn)–1

若(Rn)=0,則(PC)←(PC)+2

否則(PC)←(PC)+2+rel

3)減1條件轉(zhuǎn)移指令(循環(huán)轉(zhuǎn)移指令)例:將內(nèi)部RAM中從DATA單元開始的10個無符號數(shù)相加,結(jié)果送SUM單元保存

MOVR0,#0AH MOVR1,#DATA CLRA LOOP:ADDA,@R1 INCR1

DJNZR0,LOOP MOVSUM,A

例:將內(nèi)部RAM中從DATA單元開始的10個無符號數(shù)相加,結(jié)3.子程序調(diào)用及返回指令1)子程序調(diào)用指令LCALLaddr16

; (PC)←(PC)+3,

(SP)←(SP)+1,((SP))←(PC7~0)

;

(SP)←(SP)+1,((SP))←(PC15~8)

(PC)←addr163.子程序調(diào)用及返回指令

ACALLaddr11;

(PC)←(PC)+2,(SP)←(SP)+1,((SP))←(PC7~0)

;(SP)←(SP)+1,((SP))←(PC15~8)

;

(PC10~0)←addr11

ACALLaddr11;

RET(PC15~8)←((SP)),(SP)←(SP)-1;(PC7~0)←((SP)),(SP)←(SP)-1;

RETI(PC15~8)←((SP)),(SP)←(SP)-1;(PC7~0)←((SP)),(SP)←(SP)-1;

2)返回指令RET2)返回指令子程序的調(diào)用過程

MOVSP,#50H

ACALLDIMS …… DIMS:MOVR7,#64H DELAY:DJNZR7,DELAY

RET子程序的調(diào)用過程N(yùn)OP;(PC)←(PC)+1

4.空操作指令返回本節(jié)NOP;(PC)←(PC)+14.3.3.5位操作類指令

1.位數(shù)據(jù)傳送指令

MOV C,bit ;C←(bit)

MOV bit,C ;(bit)←C位地址的表示方法有以下四種:直接位地址表示方式,如:D5H

點操作符表示方式,如PSW.5

位名稱表示方法,如F0

用戶定義名表示方式。3.3.5位操作類指令1.位數(shù)據(jù)傳送指令2.位置位指令

CLR C ;(CY)←0

CLR bit ;(bit)←0

SETB C ;(CY)←1

SETB bit ;(bit)←12.位置位指令3.位邏輯運算指令A(yù)NL C,bit ;(CY)←(CY)∧(bit)ANL C,/bit ;(CY)←(CY)∧(bit)ORL C,bit ;(CY)←(CY)∨(bit)ORL C,/bit ;(CY)←(CY)∨(bit)CPLC;(CY)←(CY)CPLbit;(bit)←(bit)3.位邏輯運算指令4.位條件轉(zhuǎn)移指令

1)判布爾累加器條件轉(zhuǎn)移指令JCrel若(CY)=1,則轉(zhuǎn)移:(PC)←(PC)+2+rel;(CY)=0,則程序順序執(zhí)行JNCrel

若(CY)=0,則轉(zhuǎn)移(PC)←(PC)+2+rel;

(CY)=1,則程序順序執(zhí)4.位條件轉(zhuǎn)移指令2)判位變量條件轉(zhuǎn)移指令JBbit,rel

;

若(bit)=1,則轉(zhuǎn)移(PC)←(PC)+3+rel;

(bit)=0,則程序順序執(zhí)行JNBbit,rel

;若(bit)=0,則轉(zhuǎn)移(PC)←(PC)+3+rel;

(bit)=1,則程序順序執(zhí)行

2)判位變量條件轉(zhuǎn)移指令

JBCbit,rel

;

若(bit)=1,則(PC)←(PC)+3+rel,(bit)←0;

(bit)=0,則程序順序執(zhí)行

JBCbit,rel;例:編程序用以實現(xiàn)圖示邏輯功能

例:編程序用以實現(xiàn)圖示邏輯功能MOVC,P2.2ORLC,TF0ANLC,P1.1MOVF0,CMOVC,IE1ORLC,/20H.0ANLC,F(xiàn)0ANLC,/08HMOVP3.3,C

MOVC,P2.2例:(20H)=X7X6X5X4X3X2X1X0,執(zhí)行MOVC,00HRLCAMOVC,01HRLCAMOVC,02H

RLCAMOVC,03HRLCAANLA,#0FHMOV20H,A

問:(20H)=___例:(20H)=X7X6X5X4X3X2X1X03.4匯編語言及程序設(shè)計

3.4.1程序設(shè)計語言1.機(jī)器語言:機(jī)器語言是用二進(jìn)制代碼0和1表示指令和數(shù)據(jù)的最原始的程序設(shè)計語言。2.匯編語言:在匯編語言中,指令用助記符表示,地址、操作數(shù)可用標(biāo)號、符號地址及字符等形式來描述。3.高級語言:高級語言是接近于人的自然語言,面向過程而獨立于機(jī)器的通用語言。3.4匯編語言及程序設(shè)計 3.4.1程序設(shè)計語言3.4.2匯編語言語句結(jié)構(gòu)

匯編語言的指令類型(1)基本指令(2)偽指令匯編語言的語句(指令)格式標(biāo)號:操作碼 操作數(shù);注釋START:MOVA,30H;A←(30H)3.4.2匯編語言語句結(jié)構(gòu) 匯編語言的指令類型(1)ORG:設(shè)置目標(biāo)程序起始地址格式:[標(biāo)號:]ORG16位地址

ORG2000HSTART:MOVA,#7FH3.4.3偽指令200AH程序存儲器74H7FH2000H2001H2002H…(2)END:匯編結(jié)束格式:[標(biāo)號:]END(1)ORG:設(shè)置目標(biāo)程序起始地址3.4.3偽指令20(3)DB:定義數(shù)據(jù)字節(jié)格式:[標(biāo)號:]DB項或項表

一個字節(jié)的常數(shù)或常數(shù)表…ORG2000HTAB1:DB30H,8AH,7FH,49H DB‘5’,‘A’,‘BCD’2000H30H2001H8AH2002H7FH2003H49H2004H35H2005H41H2006H42H2007H43H2008H44H2009H(3)DB:定義數(shù)據(jù)字節(jié)一個字節(jié)的常數(shù)或常數(shù)表…(4)DW:定義數(shù)據(jù)字 格式:[標(biāo)號:]DW項或項表兩個字節(jié)的常數(shù)或常數(shù)表ORG1500HTAB2:DW1234H,0080H,1500H12H1501H34H1502H00H1503H80H(4)DW:定義數(shù)據(jù)字兩個字節(jié)的常數(shù)或常數(shù)表(5)DS:預(yù)留存儲空間格式:[標(biāo)號:]DS表達(dá)式

ORG1500H DS20HTAB2:DW1234H,0080H1500H1501H1502H1503H151FH1520H12H1521H34H1522H00H1523H80H…(5)DS:預(yù)留存儲空間ORG(6)

EQU:賦值格式:標(biāo)號:EQU項

給變量標(biāo)號賦予一個確定的數(shù)值。

TAB:EQU1000HTAB1:EQUTAB(7)BIT:位地址賦值格式:標(biāo)號:BIT位地址

AI:BITP1.0常數(shù),地址標(biāo)號或表達(dá)式返回本章(6)EQU:賦值常數(shù),地址標(biāo)號或表達(dá)式返回本章3.5匯編語言程序設(shè)計方法1.分析問題2.確定算法3.設(shè)計程序流程圖4.分配地址(主要是分配內(nèi)存單元)5.編寫匯編語言源程序6.調(diào)試程序3.5.1程序設(shè)計一般步驟

3.5匯編語言程序設(shè)計方法1.分析問題3.5.1程序3.5.2程序基本結(jié)構(gòu)

(1)順序程序【例3.1】將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,存入RAM兩個單元31H(高位),32H(低位)中。程序流程如圖3-1所示。3.5.2程序基本結(jié)構(gòu) (1)順序程序結(jié)束取數(shù)據(jù)低4位轉(zhuǎn)換成ASCII碼存ASCII碼取數(shù)據(jù)高4位轉(zhuǎn)換成ASCII碼存ASCII碼開始圖3-1拆字程序流程圖結(jié)束取數(shù)據(jù)低4位轉(zhuǎn)換成ASCII碼存ASCII碼取數(shù)據(jù)高4位ORG 2000HMOV A,30H ;取值A(chǔ)NL A,#0FH ;取低4位ADD A,#30H ;轉(zhuǎn)換成ASCII碼MOV 32H,A ;保存結(jié)果MOV A,30H ;取值SWAP A ;高4位與低4位互換ANL A,#0FH ;取低4位(原來的高4位)ADD A,#30H ;轉(zhuǎn)換成ASCII碼MOV 31H,A ;保存結(jié)果SJMP $ENDORG 2000H(2)分支程序

1)分支程序的基本形式分支程序有三種基本形式,如下圖所示。分支程序結(jié)構(gòu)流程圖(2)分支程序 1)分支程序的基本形式分支程序結(jié)構(gòu)流程圖分支程序的設(shè)計要點如下:(1)先建立可供條件轉(zhuǎn)移指令測試的條件。(2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號。單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件2)分支程序設(shè)計舉例【例3.2】設(shè)X存在30H單元中,根據(jù)下式

1 X>0Y= 0 X=0-1 X<0求出Y值,將Y值存入31H單元。解:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負(fù),若最高位為0,再判別該數(shù)是否為0。2)分支程序設(shè)計舉例例3.2程序流程圖A為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←-1A←0A←1存數(shù),(31H)←A例3.2程序流程圖A為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A= ORG 1000H MOV A,30H ;取數(shù)

JB ACC.7,NEG

;負(fù)數(shù),轉(zhuǎn)NEG

JZ ZER0

;為零,轉(zhuǎn)ZER0

MOV A,#01H

;為正數(shù),A=1 AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0:MOV A,#0H

;數(shù)據(jù)為零,Y=0 AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)NEG:MOVA,#0FFH

;X為負(fù)數(shù),A=-1SAVE:MOV 31H,A ;保存數(shù)據(jù)

SJMP $ ;暫停 ORG 1000H(3)循環(huán)程序

1)循環(huán)程序的結(jié)構(gòu)循環(huán)程序一般包括如下四個部分:初始化循環(huán)體循環(huán)控制結(jié)束(3)循環(huán)程序 1)循環(huán)程序的結(jié)構(gòu)(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初始化修改循環(huán)參數(shù)結(jié)束部分開始結(jié)束循環(huán)結(jié)束?循環(huán)體Y初始化修改循環(huán)參數(shù)結(jié)束部分開始N結(jié)束循環(huán)結(jié)構(gòu)程序流程圖(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正確(b)嵌套正確(c)交叉不正確多重循環(huán)示意圖外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正2)循環(huán)程序設(shè)計舉例【例3.3】從BLOCK單元開始有一個無符號數(shù)數(shù)據(jù)塊,其長度存于LEN單元,試求出數(shù)據(jù)塊中的最大數(shù)并存入MAX單元。2)循環(huán)程序設(shè)計舉例開始置初值取數(shù)數(shù)>MAX修改循環(huán)參數(shù)搜索完否?返回NYMAX數(shù)N例3流程圖開始置初值取數(shù)數(shù)>MAX修改循環(huán)參數(shù)搜索完否?返回NYMAX參考程序:

ORG2000HLOOP:

MOVR0,#BLOCK MOVR1,LEN MOVMAX,#00HLOOP1:MOVA,MAX CLRC SUBBA,@R0 JNCNEXT MOVMAX,@R0;(cy)=1,MAX<((R0))NEXT:INCR0

DJNZR1,LOOP1RET BLOCKEQU30HLENEQU20HMAXEQU10HMOV20H,#10參考程序: BLOCKEQU3(4)子程序結(jié)構(gòu)

1)子程序概念調(diào)用子程序應(yīng)注意:(1)現(xiàn)場保護(hù)(2)參數(shù)的傳遞。(3)嵌套調(diào)用與遞歸調(diào)用。通過寄存器傳遞參數(shù);通過堆棧傳遞參數(shù);通過數(shù)據(jù)指針傳遞參數(shù)(4)子程序結(jié)構(gòu) 1)子程序概念通過寄存器傳遞參數(shù);通子程序的調(diào)用與返回RETLCALLSUB…子程序的調(diào)用與返回RETLCALLSUB…LCALLARETRETLCALLB子程序的嵌套調(diào)用與返回LCALLARETRETLCALLB子程序的嵌套調(diào)用與2)子程序設(shè)計舉例【例3.4】有一數(shù)據(jù)塊從片內(nèi)RAM的30H單元開始存入,設(shè)數(shù)據(jù)塊長度為10個單元。根據(jù)下式:

X+2 X>0Y=100X=0求出Y值,并將Y值放回原處。∣X∣X<0解:數(shù)據(jù)塊中的十個數(shù)都需要進(jìn)行符號判斷并作相應(yīng)處理,可把一部分工作交給子程序完成,主程序只負(fù)責(zé)讀取數(shù)據(jù)、調(diào)用判斷處理子程序、保存數(shù)據(jù)、循環(huán)控制工作。2)子程序設(shè)計舉例

ORG 1000HMOV R0,#10 MOV R1,#30HSTART:MOV A,@R1 ;取數(shù)

LCALL

DISPOSE

;調(diào)用判斷、處理子程序SAVE:MOV @R1,A ;保存數(shù)據(jù)

INC R1 ;修改地址指針,指向下一個地址

DJNZ R0,START ;數(shù)據(jù)未處理完繼續(xù)

SJMP $ ;暫停

ORG 2000HDISPOSE:

JB ACC.7,NEG;若為負(fù)數(shù),轉(zhuǎn)NEGORG 1000HJZ ZER0 ;若為零,轉(zhuǎn)ZER0 ADDA,#02H ;若為正數(shù),求X+2 AJMPBACK ;返回ZER0:MOVA,#64H ;數(shù)據(jù)為零,Y=100 AJMPBACK ;返回NEG:DEC A CPL A ;數(shù)據(jù)為負(fù)求∣X∣BACK:RET;返回返回本章JZ ZER0 ;若為零,轉(zhuǎn)ZER3.6程序設(shè)計舉例查表程序:預(yù)先將某一數(shù)據(jù)表格存放在ROM中,程序中根據(jù)自變量X利用查表指令讀出與其對應(yīng)的數(shù)據(jù)。查表指令:MOVCA,@A+DPTRMOVCA,@A+PC在LED顯示和鍵盤處理程序中將會用到。3.6.1查表程序設(shè)計

3.6程序設(shè)計舉例查表程序:預(yù)先將某一數(shù)據(jù)表格存放在RO單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件1000H001001H111002H421003H931004H1641005H2551006H3661007H4971008H6481009H819y=x2

地址X函數(shù)y的地址=1000H+xROM中的數(shù)據(jù)表表首地址MOVDPTR,#1000HMOVA,#04HMOVCA,@A+DPTR1000H001001H111002H421003H9310例:設(shè)有一巡回檢測報警裝置需對16路輸入值進(jìn)行比較,當(dāng)某一路輸入值超過該路的報警值時實現(xiàn)報警,編制查表程序依據(jù)路數(shù)xi查得報警值yi程序入口:(R2)=路數(shù)xi程序出口:(R4R3)=對應(yīng)xi的報警值yi例:設(shè)有一巡回檢測報警裝置需對16路輸入值進(jìn)行比較,當(dāng)某一路TABY0高0TAB+1Y0低TAB+2Y1高1TAB+3Y1低TAB+4Y2高2TAB+5Y2低TAB+30Y15高15TAB+31Y15低報警值路數(shù)Xi報警值yi高的地址=TAB+2*Xi報警值地址……報警值yi低的地址=TAB+2*Xi+1TABY0高0TAB+1Y0低TAB+2Y1高1TAB+3Y利用DPTR做基地址查表(1)表格首地址送DPTR(2)查表項數(shù)送累加器A(3)執(zhí)行查表指令:MOVCA,@A+DPTR

查表結(jié)果回累加器A利用DPTR做基地址查表(1)表格首地址送DPTR

MOVDPTR,#TABMOVA,R2ADDA,R2MOVR4,AMOVCA,@A+DPTRXCHA,R4

INCAMOVCA,@A+DPTRMOVR3,ARETTAB:DW050FH…..TABY0高0TAB+1Y0低TAB+2Y1高1TAB+3Y1低TAB+4Y2高2TAB+5Y2低TAB+30Y15高15TAB+31Y15低報警值yi高的地址=TAB+2*XiMOVCA,@A+PC報警值yi低的地址=TAB+2*Xi+1MOVDPTR,#TABTABY0高0TAB利用PC做基地址查表(1)查表項數(shù)送累加器A(2)累加器A加上表首偏移量偏移量=表首地址-PC當(dāng)前值(A)=項數(shù)+表首地址-PC當(dāng)前值(3)執(zhí)行查表指令:MOVCA,@A+PC

查表結(jié)果回累加器AMOVC指令所在地址+1利用PC做基地址查表(1)查表項數(shù)送累加器AMOVC指令所在EAMOVA,R22AADDA,R2ECMOVR4,A2407

ADDA,#07H83MOVCA,@A+PCCCXCHA,R404INCA2402ADDA,#02H83MOVCA,@A+PCFBMOVR3,A22RET050FTAB:DW050FH…..…83HCCH04H24H02H83HFBH22HTAB05H0TAB+10FHTAB+20EH1TAB+389H….TAB+306CH15TAB+31A0HPCTAB-1TAB-2TAB-3TAB-7EAMOVA,R2…83HCCH例:設(shè)(R0)=2FH,(R1)=6,(A)=01H,寫出執(zhí)行這段程序后30H~35H各單內(nèi)容。

MOVDPTR,#TABLELOOP:INCA INCR0LCALLCAPDJNZR1,LOOPHEAR:SJMPHEARCAP:PUSHAMOVCA,@A+DPTRMOV@R0,APOPARETTABLE:DB00H,01H,04H,09HDB16H,25H,36H,49H DB64H,81HEND例:設(shè)(R0)=2FH,(R1)=6,(A)=01H,寫出執(zhí)散轉(zhuǎn)程序是指通過修改某個參數(shù)后,程序可以有三個以上的流向,多用于鍵盤程序。常用的指令是JMP@A+DPTR,該指令是把16位數(shù)據(jù)指針DPTR的內(nèi)容與累加器A中的8位無符號數(shù)相加,形成地址,裝入程序計數(shù)器PC,形成散轉(zhuǎn)的目的地址。DPTR+APCA中內(nèi)容為8位無符號數(shù)16位地址數(shù)3.6.2散轉(zhuǎn)程序設(shè)計

散轉(zhuǎn)程序是指通過修改某個參數(shù)后,程序可以有三個以上的流向,多JUMP1:MOVDPTR,#JPTAB;跳轉(zhuǎn)表首送數(shù)據(jù)指針

MOVA,R7ADDA,R7;2*(R7)

JNCNOAD

INCDPHNOAD:JMP@A+DPTR;轉(zhuǎn)向形成的散轉(zhuǎn)地址入口JPTAB:AJMPOPR0;直接轉(zhuǎn)移地址表

AJMPOPR1...AJMPOPRn例:根據(jù)R7的內(nèi)容,轉(zhuǎn)向各自對應(yīng)的操作程序

(R7=0,轉(zhuǎn)入OPR0;R7=i,轉(zhuǎn)入OPRi;n<=255)JUMP1:MOVDPTR,#JPTAB;源程序:指令周期DELAY:MOVR3,#(X)H1個T機(jī)器

DEL2:MOVR4,#(Y)H1個T機(jī)器

DEL1:NOP1個T機(jī)器

NOP1個T機(jī)器

DJNZR4,DEL12個T機(jī)器

DJNZR3,DEL22個T機(jī)器

RET指令周期、機(jī)器周期T機(jī)器與時鐘周期T時鐘的關(guān)系:

T機(jī)器=12T時鐘=12*1/fosc=1us

(假設(shè)晶振頻率fosc為12M)延時時間的簡化計算結(jié)果:(1+1+2)*X*Y若想延時100ms,只需修改計數(shù)初始值,即(1+1+2)*200*125us=100ms#200#1253.6.3延時程序設(shè)計

源程序:1S延時程序源程序:DELAY:MOVR2,#10DEL3:MOVR3,#200DEL2:MOVR4,#125DEL1:NOPNOPDJNZR4,DEL1DJNZR3,DEL2DJNZR2,DEL3RET1S延時程序源程序:單片機(jī)微機(jī)原理及應(yīng)用基礎(chǔ)教程第章匯編語言及其程序設(shè)計課件例5:編程實現(xiàn)P1口連接的8個LED顯示方式如下:從P1.0到P1.7

溫馨提示

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

評論

0/150

提交評論