




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3.3.4控制程序轉(zhuǎn)移類指令包括以下類型:無(wú)條件轉(zhuǎn)移和條件轉(zhuǎn)移相對(duì)轉(zhuǎn)移和絕對(duì)轉(zhuǎn)移長(zhǎng)轉(zhuǎn)移和短轉(zhuǎn)移調(diào)用與返回指令重點(diǎn)、難點(diǎn):“JMP、CJNE、DJNZ”指令。3.3.4控制程序轉(zhuǎn)移類指令1.無(wú)條件轉(zhuǎn)移指令
①短轉(zhuǎn)移類指令:
AJMPaddr11程序轉(zhuǎn)移范圍:2KB的程序存儲(chǔ)器地址空間。
2字節(jié)指令
可用標(biāo)號(hào)表示例:AJMPLOOP
…………
…………LOOP:MOVA,R2
…………但是:“LOOP”不是“addr11(11位地址)值”??!指令:”AJMPaddr11“是2字節(jié)指令
。例:1030H:AJMP00100000000B問(wèn):轉(zhuǎn)移的地址是多少?解:addr11=00100000000B先(PC)+2=1030H+2=1032H=0001000000110010B
后:(PC15~11)不變,PC10~0=00010
00100000000
B=1100H即執(zhí)行該指令后,將轉(zhuǎn)至地址為:1100H處。3.3.4控制程序轉(zhuǎn)移類指令②長(zhǎng)轉(zhuǎn)移指令
LJMPaddr16
;addr16→PC。3字節(jié)指令
指令中:第二字節(jié)裝入PC的高8位,第三字節(jié)裝入PC的低8位。程序轉(zhuǎn)移范圍:64KB的程序存儲(chǔ)器地址空間。例:1023H:LJMP212AH(PCH)=21H,(PCL)=2AH。機(jī)器碼為:02212AH??捎脴?biāo)號(hào)表示3.3.4控制程序轉(zhuǎn)移類指令③相對(duì)轉(zhuǎn)移指令SJMPrel
;先(PC)+2→PC,后(PC)+rel→PC
;2字節(jié)指令
程序轉(zhuǎn)移范圍:256B?!锸止ぞ幊虝r(shí),需計(jì)算偏移量rel:rel--機(jī)器碼的相對(duì)偏移量,為8位補(bǔ)碼。
轉(zhuǎn)移范圍:-128~+127字節(jié)。即:①rel為正數(shù)時(shí),rel的范圍為:0~+127(00H~7FH)。稱為“正向跳轉(zhuǎn)”,即往ROM中地址大的方向跳轉(zhuǎn)。
②
rel為負(fù)數(shù)時(shí),rel的范圍為:-128~-1(80H~FFH)。稱為“反向跳轉(zhuǎn)”,即往ROM中地址小的方向跳轉(zhuǎn)??捎脴?biāo)號(hào)表示③相對(duì)轉(zhuǎn)移指令“SJMPrel”例如:
0100H:SJMPrel設(shè)轉(zhuǎn)移的地址為0157H,則:rel=0157H-0100H-2=55H。故該指令可寫成:
0100H:SJMP55H其機(jī)器碼為:80H55H★正向跳轉(zhuǎn)時(shí):rel=目的地址-源地址-2
=地址差-2。0157H★反向跳轉(zhuǎn)時(shí):rel=[目的地址-源地址-2]補(bǔ)
=[-2]補(bǔ)-|地址差|
=FEH-|地址差|例如:
0100H:SJMPrel設(shè)程序轉(zhuǎn)移的地址為:00F8H,則地址偏移量rel為:rel=FEH-|0100H-00F8H|
=FEH-0008H=F6H。故該指令可寫成:
0100H:SJMPF6H其機(jī)器碼為:80HF6H00F8H編程時(shí),可用標(biāo)號(hào)代替轉(zhuǎn)移目的地址,rel交給編譯程序計(jì)算。例如:SJMPNEXT
…
NEXT:…原地踏步指令的指令:
HERE:SJMP
HERE常寫成:SJMP$總結(jié)短轉(zhuǎn)移類指令:AJMPaddr11
長(zhǎng)轉(zhuǎn)移類指令:LJMPaddr16
相對(duì)轉(zhuǎn)移指令:SJMPrel這三條指令,可理解成:PC值改變,即跳轉(zhuǎn)到一個(gè)標(biāo)號(hào)處。
它們的區(qū)別:跳轉(zhuǎn)的范圍不同(2KB;64KB;-128~+127)。指令構(gòu)成不同。
AJMP、LJMP后跟的是絕對(duì)地址,
而SJMP后跟的是相對(duì)地址。指令長(zhǎng)度不同(2字節(jié);3字節(jié);2字節(jié))。
原則上,所有用SJMP或AJMP的地方都可以用LJMP來(lái)替代。均可用標(biāo)號(hào)表示3.3.4控制程序轉(zhuǎn)移類指令④間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)JMP@A+DPTR;(A)+(DPTR)→PC。1字節(jié)指令
使用該指令前,應(yīng)先給DPTR賦值,A中的內(nèi)容為無(wú)符號(hào)數(shù)。轉(zhuǎn)移范圍:256B.?該指令多用于多分支程序結(jié)構(gòu)中。[P72.例3-11]根據(jù)累加器A中命令鍵的鍵值,設(shè)計(jì)命令健操作程序入口跳轉(zhuǎn)表。例如:當(dāng)(A)=2時(shí),程序跳轉(zhuǎn)到標(biāo)號(hào)為“XX2”的程序中。復(fù)習(xí):程序計(jì)數(shù)器PC程序計(jì)數(shù)器PC是16位的寄存器。PC變化的軌跡(即其地址的改變)決定程序的流向,PC的寬度(即地址值的位數(shù))決定了程序存儲(chǔ)器可以尋址的范圍。PC的基本工作方式有:1、PC自動(dòng)加1。這是最基本的工作方式,也就是這個(gè)專用寄存器被稱為計(jì)數(shù)器的原因;2、執(zhí)行條件或無(wú)條件指令(第3章P72-P77,P83)時(shí),PC將被置入新的數(shù)值(地址),程序的流向發(fā)生變化。變化的方式有:1)帶符號(hào)的相對(duì)轉(zhuǎn)移指令“SJMP”;2)短跳轉(zhuǎn)指令“AJMP”,長(zhǎng)跳轉(zhuǎn)指令“LJMP”;3)散轉(zhuǎn)指令“JMP@A+DPTR”;3、在執(zhí)行調(diào)用指令(第3章P79)或響應(yīng)中斷(第5章P113)時(shí):硬件自動(dòng)將PC的當(dāng)前值,即下一條將要執(zhí)行的指令的地址被送入堆棧,加以保護(hù);同時(shí)將子程序的入口地址或者中斷入口矢量地址送給PC,程序流向發(fā)生改變,程序轉(zhuǎn)向去執(zhí)行子程序或者中斷服務(wù)程序。當(dāng)子程序或中斷服務(wù)程序執(zhí)行完畢,遇到子程序中的最后一條返回指令“RET”或中斷服務(wù)程序的最后一條指令“RETI”時(shí),硬件自動(dòng)將保護(hù)在堆棧中的內(nèi)容(地址)送到PC中,程序又返回到原來(lái)的地方繼續(xù)執(zhí)行。3.3.4控制程序轉(zhuǎn)移類指令2.空操作
NOP;(PC)+1→PC。1字節(jié)指令
3.條件轉(zhuǎn)移類指令條件轉(zhuǎn)移指令是指在滿足一定條件時(shí)進(jìn)行相對(duì)轉(zhuǎn)移,否則程序繼續(xù)執(zhí)行本指令的下一條指令。3.3.4控制程序轉(zhuǎn)移類指令⑴判A內(nèi)容是否為0轉(zhuǎn)移指令①
JZrel
;(PC)+2→PC。若A=0,則轉(zhuǎn)移到(PC)=(PC)+rel;
;否則順序執(zhí)行。
②
JNZrel
;(PC)+2→PC。若A≠0,則轉(zhuǎn)移到(PC)=(PC)+rel;
;否則順序執(zhí)行。在編寫匯編語(yǔ)言源程序時(shí),rel用“標(biāo)號(hào)”來(lái)代替。如:
JZLD12354以上兩條指令均為:2字節(jié)指令
均可用標(biāo)號(hào)表示⑴判A內(nèi)容是否為0轉(zhuǎn)移指令例:MOVA,R0
JZL1
MOVR1,#00H
AJMP
L2
L1:
MOVR1,#0FFH
L2:
SJMP
L2
問(wèn):如果執(zhí)行程序前(R0)=0,執(zhí)行上述程序后,(R1)=?;若執(zhí)行程序前(R0)0,則(R1)=?。解:如果(R0)=0,結(jié)果(R1)=0FFH;而若(R0)0,則結(jié)果是(R1)=00H。
3.3.4控制程序轉(zhuǎn)移類指令⑵比較(不相等)轉(zhuǎn)移指令
CJNE(目的字節(jié)),(源字節(jié)),rel;3字節(jié)指令①
CJNEA,#data,rel②
CJNEA,direct,rel③CJNERn,#data,rel④
CJNE@Ri,#data,rel同樣地,使用時(shí),可以將rel用“標(biāo)號(hào)”代替,即:
CJNEA,#data,LOOP
CJNEA,direct,LQ123
CJNERn,#data,D168
CJNE@Ri,#data,RT_101⑵比較(不相等)轉(zhuǎn)移指令①
CJNEA,#data,rel
;先(PC)+3→PC
若(A)>#data,則(PC)+rel→PC,且0→CY;若(A)<#data,則(PC)+rel→PC,且1→CY;若(A)=#data,則順序執(zhí)行,且0→CY。②
CJNEA,direct,rel
;先(PC)+3→PC
若(A)>(direct),則(PC)+rel→PC,且0→CY;若(A)<(direct),則(PC)+rel→PC,且1→CY;若(A)=(direct),則順序執(zhí)行,且0→CY。③
CJNERn,#data,rel
;先(PC)+3→PC
若(Rn)>#data,則(PC)+rel→PC,且0→CY;若(Rn)<#data,則(PC)+rel→PC,且1→CY;若(Rn)=#data,則順序執(zhí)行,且0→CY。⑵比較(不相等)轉(zhuǎn)移指令④
CJNE@Ri,#data,rel
;先(PC)+3→PC
若((Ri))>#data,則(PC)+rel→PC,且0→CY;若((Ri))<#data,則(PC)+rel→PC,且1→CY;若((Ri))=#data,則順序執(zhí)行,且0→CY。不能寫成:CJNEA,Rn,LOOP×⑵比較(不相等)轉(zhuǎn)移指令利用這些指令,可以判斷兩數(shù)是否相等。但有時(shí)還想得知兩數(shù)比較之后哪個(gè)大,哪個(gè)小,本條指令也具有這樣的功能:如果兩數(shù)不相等,則CPU還會(huì)用CY(進(jìn)位位)來(lái)反映哪個(gè)數(shù)大,哪個(gè)數(shù)小。如果前面的數(shù)大,則CY=0,否則CY=1。因此在程序轉(zhuǎn)移后再次利用CY就可判斷出哪個(gè)數(shù)大(JC或JNC指令P83),哪個(gè)數(shù)小了。⑶循環(huán)轉(zhuǎn)移指令(減1不為0轉(zhuǎn)移指令)①
DJNZRn,rel
;先(PC)+2→PC,(Rn)-1→Rn,
若(Rn)≠0,則(PC)+rel→PC,
若(Rn)=0,則結(jié)束循環(huán),程序往下執(zhí)行。②DJNZdirect,rel
;先(PC)+3→PC,(direct)-1→direct;
若(direct)≠0,則(PC)+rel→PC;
若(direct)=0,則結(jié)束循環(huán),程序往下執(zhí)行。
rel可用“標(biāo)號(hào)”代替。不能寫成:DJNZA,LOOP×例:
MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$問(wèn):上述程序段的執(zhí)行過(guò)程是怎樣的?執(zhí)行過(guò)程是:將23H單元中的數(shù)連續(xù)相加,保存至A中,每加一次,23H單元中的數(shù)值減1,直至減到0,共加0AH次。在“上機(jī)實(shí)驗(yàn)指導(dǎo)書”的實(shí)驗(yàn)一,也使用了“DJNZ”指令,請(qǐng)同學(xué)仔細(xì)閱讀。利用“DJNZ”指令,可進(jìn)行軟件延時(shí)。見(jiàn)教材P94【例4-8】。⑷調(diào)用和返回指令主程序A第1次調(diào)用RET子程序ADM1B返回1第2次調(diào)用返回2CD主程序調(diào)用子程序返回過(guò)程示意圖斷點(diǎn)(調(diào)用指令的下一條指令的地址)斷點(diǎn)(調(diào)用指令的下一條指令的地址)調(diào)用指令“ACALL”或“LCALL”(第1次)調(diào)用指令“ACALL”或“LCALL”(第2次)子程序返回指令斷點(diǎn)(地址值)由硬件自動(dòng)壓入堆棧保存。當(dāng)主程序執(zhí)行到A調(diào)用指令時(shí),硬件自動(dòng)把B指令的地址(稱為斷點(diǎn)地址)壓入堆棧保存,然后把子程序的地址交給PC,從而去執(zhí)行子程序。當(dāng)執(zhí)行到子程序的“RET”指令后,硬件又自動(dòng)將堆棧的斷點(diǎn)地址(即B地址值)彈給PC,則CPU又回到主程序去執(zhí)行指令。執(zhí)行子程序的“RET”指令后,硬件自動(dòng)將堆棧的斷點(diǎn)值彈出給PC。⑷調(diào)用和返回指令①短調(diào)用指令
ACALLaddr11;2字節(jié)指令
操作:先:(PC)+2→PC,(SP)+1→SP后:(PC7~0)→(SP)(SP)+1→SP
(PC15~8)→(SP)
addr10~0→(PC10~0)(PC15~11)不變斷點(diǎn)值壓入堆棧編程時(shí),可用標(biāo)號(hào)代替轉(zhuǎn)移目的地址,addr11,addr16交給編譯程序計(jì)算。②長(zhǎng)調(diào)用指令LCALLaddr16
;3字節(jié)指令
操作:先:(PC)+3→PC,(SP)+1→SP
后:(PC7~0)→(SP)(SP)+1→SP
(PC15~8)→(SP)
addr15~0→(PC)斷點(diǎn)值壓入堆棧目的地址目的地址
進(jìn)棧:先壓入低8位地址,后壓入高8位地址。⑷調(diào)用和返回指令①子程序返回指令
RET;1字節(jié)指令
操作:先:
((SP))
→PC15~8,彈出斷點(diǎn)的高8位。
后:
(SP)-1→SP
((SP))
→PC7~0
,彈出斷點(diǎn)的低8位。(SP)-1→SP。
出棧:先彈出高8位地址,后彈出低8位地址。②中斷返回指令
RETI;1字節(jié)指令
操作:先:
((SP))
→PC15~8,彈出斷點(diǎn)的高8位。后:
(SP)-1→SP
((SP))
→PC7~0
,彈出斷點(diǎn)的低8位。
(SP)-1→SP。RETI指令除了具有RET指令的功能實(shí)現(xiàn)程序返回外,還有對(duì)中斷優(yōu)先級(jí)狀態(tài)觸發(fā)器的清零。執(zhí)行返回指令(RET/RETI),退出子(或中斷服務(wù))程序,則其返回的地址來(lái)自堆棧區(qū)
復(fù)習(xí):程序計(jì)數(shù)器PC程序計(jì)數(shù)器PC是16位的寄存器。PC變化的軌跡(即其地址的改變)決定程序的流向,PC的寬度(即地址值的位數(shù))決定了程序存儲(chǔ)器可以尋址的范圍。PC的基本工作方式有:1、PC自動(dòng)加1。這是最基本的工作方式,也就是這個(gè)專用寄存器被稱為計(jì)數(shù)器的原因;2、執(zhí)行條件或無(wú)條件指令(第3章P72-P77,P83)時(shí),PC將被置入新的數(shù)值(地址),程序的流向發(fā)生變化。變化的方式有:1)帶符號(hào)的相對(duì)轉(zhuǎn)移指令“SJMP”;2)短跳轉(zhuǎn)指令“AJMP”,長(zhǎng)跳轉(zhuǎn)指令“LJMP”;3)散轉(zhuǎn)指令“JMP@A+DPTR”;3、在執(zhí)行調(diào)用指令(第3章P79)或響應(yīng)中斷(第5章P113)時(shí):硬件自動(dòng)將PC的當(dāng)前值,即下一條將要執(zhí)行的指令的地址被送入堆棧,加以保護(hù);同時(shí)將子程序的入口地址或者中斷入口矢量地址送給PC,程序流向發(fā)生改變,程序轉(zhuǎn)向去執(zhí)行子程序或者中斷服務(wù)程序。當(dāng)子程序或中斷服務(wù)程序執(zhí)行完畢,遇到子程序中的最后一條返回指令“RET”或中斷服務(wù)程序的最后一條指令“RETI”時(shí),硬件自動(dòng)將保護(hù)在堆棧中的內(nèi)容(地址)送到PC中,程序又返回到原來(lái)的地方繼續(xù)執(zhí)行。例3-12設(shè)(SP)=40H,符號(hào)地址“SUBRTN”指向ROM的5678H,執(zhí)行指令:0123H:LCALLSUBRTNS執(zhí)行完指令后(PC)+3=0123H+3=0126H。將該P(yáng)C的內(nèi)容壓入堆棧:向(SP)+1=40H+1=41H中壓入26H,向(SP)+1=41H+1=42H壓入01H,此時(shí)(SP)=42H。而地址SUBRTN=5678H送入PC,程序轉(zhuǎn)去執(zhí)行以5678H為首地址的子程序。例:如右圖所示,使LED亮10ms,滅10ms,如此反復(fù)。試編寫程序。軟件延時(shí)時(shí)間的計(jì)算請(qǐng)參閱教材P94請(qǐng)同學(xué)們回去再做“上機(jī)實(shí)驗(yàn)指導(dǎo)書”實(shí)驗(yàn)二的實(shí)例。在KELL或偉福上執(zhí)行“單步跟蹤”操作,仔細(xì)觀察當(dāng)執(zhí)行到“ACALL”和“RET”指令時(shí)光標(biāo)是如何變化的!ABCD程序的流向:當(dāng)主程序執(zhí)行到A指令時(shí),硬件自動(dòng)將B指令的地址壓入堆棧,然后CPU去執(zhí)行標(biāo)號(hào)為“DELY_10MS”的子程序,當(dāng)執(zhí)行到RET指令時(shí),硬件將堆棧的斷點(diǎn)地址值交給PC,則CPU回到主程序的B指令,再執(zhí)行C指令。C指令又是一條調(diào)用指令,則CPU把D指令的地址壓入堆棧,去執(zhí)行子程序,執(zhí)行到子程序的RET指令后CPU又回到主程序去執(zhí)行D指令。請(qǐng)思考:如右圖所示。若執(zhí)行下列程序,LED1~LED8如何變化?…………L1:MOVA,#55HMOVP1,AACALLDELAY_50MS;50ms延時(shí)
CPLA;A中的內(nèi)容取反后送回A中
MOVP1,AACALLDELAY_50MSAJMPL1DELAY_50MS:…………RET3.3.5位操作(布爾處理)類指令?MCS-51單片機(jī)的硬件結(jié)構(gòu)中,有一個(gè)位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移等指令。?在進(jìn)行位處理時(shí),
CY用作“位累加器”。?在MCS-51中,有一部份RAM和一部份SFR是具有位尋址功能的。位操作區(qū):內(nèi)部RAM的20H-2FH這16個(gè)字節(jié)單元,即128個(gè)位單元(位地址空間位00~7FH);可以位尋址的特殊功能寄存器:89C51中有一些SFR是可以進(jìn)行位尋址的,這些SFR的特點(diǎn)是其字節(jié)地址均可被8整除,如A累加器,B寄存器、PSW、IP(中斷優(yōu)先級(jí)控制寄存器)、IE(中斷允許控制寄存器)、SCON(串行口控制寄存器)、TCON(定時(shí)器/計(jì)數(shù)器控制寄存器)、P0~P3(I/O端口鎖存器)。位地址表達(dá)方式以PSW中位4(RS1)為例。直接(位)地址方式:如D4H;點(diǎn)操作符號(hào)方式:如PSW.4,D0H.4;位名稱方式:如RS1;用戶定義名方式:如用偽指令bit
SUB.REGbitRS1定義后,可用SUB.REG代替RS1。1.位傳送指令MOVC,bit ;(bit)→C。2字節(jié)指令
MOVbit,C
;(C)→bit。2字節(jié)指令
例:MOVC,P1.0 ;將P1.0的狀態(tài)送給C。MOVP2.0,C;將C中的狀態(tài)送到P2.0,引腳上去。
2.位修正指令⑴位清0指令①
CLR
C
;使CY=0。1字節(jié)指令
②
CLRbit
;0→bit。2字節(jié)指令
例:CLRP1.0;即使P1.0變?yōu)?⑵位置1指令
①
SETBC
;1→CY。1字節(jié)指令
②
SETBbit
;1→bit。2字節(jié)指令
2.位修正指令(3)位取反指令①
CPLC
;(C)→C,1字節(jié)指令
②CPLbit
;(bit)→bit。2字節(jié)指令
3.位邏輯運(yùn)算指令⑴位邏輯“與”指令①ANLC,bit
;(C)
∧
(bit)→C。2字節(jié)指令
②ANLC,/bit
;(C)
∧
(bit)→C。2字節(jié)指令
注意:指定的位地址中的值本身并不發(fā)生變化。例:ANLC,/P1.03.位邏輯運(yùn)算指令⑵位邏輯“或”指令①
ORLC,bit
;(C)
∨
(bit)→C。2字節(jié)指令
②
ORLC,/bit
;(C)
∨
(bit)→C。2字節(jié)指令
4.位條件轉(zhuǎn)移類指令⑴判Cy轉(zhuǎn)移指令
①
JCrel
;先(PC)+2→PC;后:若(CY)=1,則轉(zhuǎn)移。否則順序執(zhí)行②
JNCrel
;先(PC)+2→PC;后:若(CY)=0,則轉(zhuǎn)移。否則順序執(zhí)行rel用“標(biāo)號(hào)”來(lái)代替(PC)+rel→PC(PC)+rel→PC上面兩條指令均為:2字節(jié)指令。4.位條件轉(zhuǎn)移類指令⑵判位變量轉(zhuǎn)移指令
①JBbit,rel
;(PC)+3→PC;若(bit)=1,則(PC)+rel→PC;否則順序執(zhí)行。
②
JNBbit,rel
;(PC)+3→PC;若(bit)=0,則(PC)+rel→PC;否則順序執(zhí)行。③
JBCbit,rel
;(PC)+3→PC;若(bit)=1,則(PC)+rel→PC,且0→bit;否則順序執(zhí)行。
rel用“標(biāo)號(hào)”來(lái)代替。上面三條指令均為:3字節(jié)指令。在“上機(jī)實(shí)驗(yàn)指導(dǎo)書”的實(shí)驗(yàn)二,也需要用到“JB”或“JNB”指令。查詢I/O口中的按鈕(或開關(guān))是否按下了,這種方法我們稱為“查詢方式”。P92【例4-6】片內(nèi)RAM40H和41H兩個(gè)單元中存有兩個(gè)無(wú)符號(hào)數(shù),將這兩個(gè)數(shù)數(shù)中的小者存入30H單元中。解:程序如下:
MOVA,40H;40H單元的數(shù)送A
CJNEA,41H,BIG;比較大小,兩個(gè)數(shù)不相等轉(zhuǎn)BIGSJMPSTORE;相等,40H單元的數(shù)作為小者BIG:JCSTORE;有借位,則40H單元的數(shù)小MOVA,41H;無(wú)借位,則41H單元的數(shù)小STORE:MOV30H,A;小者存入30H單元中靜態(tài)顯示9~0的源程序:
ORG0000HAJMPMAINORG0050HMAIN:MOVDPTR,#TAB;字型表的首地址→DPTRLOOP:MOVR0,#9;R0作為計(jì)數(shù)器LOOP1:MOVA,R0MOVCA,@A+DPTR;查字型表,
MOVP2,A;字型送P2口顯示,共陽(yáng)7LEDLCALLDELAY;調(diào)用延時(shí)程序
DECR0CJNER0,#0FFH,LOOP1;比較大小,當(dāng)R0≠0FFH時(shí)則轉(zhuǎn)LOOP1,若R0=0FFH則順序執(zhí)行ACALLLOOPDELAY:MOVR1,#40;延時(shí)子程序
DL1:MOVR2,#40DL2:MOVR3,#0FFHDJNZR3,$DJNZR2,DL2DJNZR1,DL1RET
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共陽(yáng)7LED字型表0,1,2~F
END修改程序,使它顯示0~9“DB”為偽指令。P96數(shù)據(jù)表格表格首地址復(fù)習(xí):【思考題】請(qǐng)編程:1)片內(nèi)RAM40H和4AH兩個(gè)單元中存有兩個(gè)無(wú)符號(hào)數(shù),將這兩個(gè)數(shù)中的小者存入片外RAM的1000H單元中。2)有兩個(gè)無(wú)符號(hào)數(shù)分別存放在片外RAM的1000H單元和1200H單元,將這兩個(gè)數(shù)中的大者存入片內(nèi)RAM的30H單元中。某同學(xué)編寫的程序:解:MOVXR0,2000HMOVXA,2001HCJNEA,@R0,LOOP1MOV60H,ALOOP1:JCLOOP2MOV60H,AAJMPLASTLOOP2:MOV60H,@R0LAST:END例1:片外RAM2000H、2001H單元中分別存有兩個(gè)無(wú)符號(hào)數(shù),請(qǐng)編程將這兩個(gè)數(shù)中的大者存入片內(nèi)RAM的60H單元中(若這兩個(gè)數(shù)相等,亦存入60H單元中)。例2:兩個(gè)8位補(bǔ)碼數(shù)DATA1與DATA2相加。若溢出,則累加器A清0,同時(shí)LED亮表示“溢出”;若無(wú)溢出,則“和”存放在R7中,同時(shí)LED滅表示無(wú)“溢出”。硬件電路如圖所示(LED的初始態(tài)為滅)。試編寫程序并在ProteusISIS中進(jìn)行硬件仿真。PSW有位地址,也可用它的位名稱,即:JBOV,LOOP1完善上例:黃LED亮表示“溢出”,綠LED亮表示“無(wú)溢出”。并將計(jì)算結(jié)果(16進(jìn)制)由7段LED數(shù)碼管顯示(請(qǐng)參閱教材P209的內(nèi)容)出來(lái)。注意觀察:P1.6和P1.7引腳的“標(biāo)色”是“灰色”,即電平狀態(tài)不確定。所選的七段LED數(shù)碼管是共陽(yáng)極的,應(yīng)該是高電平才對(duì)。這是由于驅(qū)動(dòng)功率不夠造成的。要解決此問(wèn)題可各接一三極管。
ORG0000HAJMPMAINORG0050HMAIN:SETBP1.1SETBP1.5MOVA,#DATA1ADDA,#DATA2
MOV20H,A;結(jié)果存入20H單元中
JBOV,L1;有溢出轉(zhuǎn)l1CLRP1.5;無(wú)溢出,綠燈亮AJMPL2L1:CLRP1.1;點(diǎn)亮溢出燈
;以下為拆字
MOVR0,#21HMOVA,20HANLA,#0FH;屏蔽高4位,取低4位MOV@R0,A;低4位存入21H單元中
INCR0MOVA,20HSWAPA;高、低4位互換ANLA,#0FHMOV@R0,A;高4位存入22H單元中;以下為查表顯示數(shù)字
MOVDPTR,#TABMOVA,22HMOVCA,@A+DPTRMOVP2,A;顯示十位
SETBP1.6MOVA,21HMOVCA,@A+DPTRMOVP3,A;顯示個(gè)位
SETBP1.7L2:SJMP$TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H;共陽(yáng)7段LED顯示0~F字型編碼表DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFHEND該程序中DATA1和DATA2為具體的16進(jìn)制數(shù)。如果無(wú)溢出,只是綠色LED亮,而不顯示計(jì)算結(jié)果。請(qǐng)同學(xué)們想一想,如何修改該程序使其有無(wú)溢出都能將計(jì)算結(jié)果顯示出來(lái)!教材P89例4-2。拆字教材P209-213。例3:如圖所示:P3.2和P3.3上各接有一只按鍵,要求它們分別按下時(shí)(P3.2=0或P3.3=0),分別使P1口為0或FFH。試編寫程序。這叫做“查詢方式”例4:如圖所示,開關(guān)K1和K2未按下時(shí),兩只發(fā)光二極管均不亮。當(dāng)按下K1時(shí),使發(fā)光二極管LED1亮,而發(fā)光二極管LED2不亮;當(dāng)按下K2時(shí),LED2亮而LED1不亮。試編寫程序?qū)崿F(xiàn)上述功能。例5:如圖所示,上電時(shí),LED不亮。每當(dāng)開關(guān)K1合上時(shí),LED亮,而當(dāng)開關(guān)K1打開時(shí),則LED熄滅。請(qǐng)編寫其控制程序。分析:1、開關(guān)K1的閉合/斷開狀態(tài)是從P1.0端口輸入信號(hào)的(P1.0作為輸入端使用),而輸入的信號(hào)只有“高/低電平”兩種狀態(tài)。K1打開,即輸入高電平“1”,K1合上時(shí),即輸入低電平“0”。2、LED接在P1.1上,即P1.1作輸出端口使用。當(dāng)P1.1輸出高電平“1”時(shí),LED不亮;當(dāng)P1.1輸出低電平“0”時(shí),則LED亮。故,可用“判位變量轉(zhuǎn)移指令”
(JBbit,rel)來(lái)判斷開關(guān)K1的狀態(tài)。這種方法我們稱為“查詢方式”1、源程序如下(用匯編語(yǔ)言編寫)
ORG0000H;程序起始地址AJMPMAIN;引導(dǎo)程序ORG0050H;程序從ROM0050H單元開始存放MAIN:SETBP1.0;輸入的準(zhǔn)備動(dòng)作,即向P1.0端口寫“1”SETBP1.1;上電時(shí),LED為滅LOOP2:JBP1.0LOOP1;查詢開關(guān)K1的狀態(tài).K1未合上,轉(zhuǎn)LOOP1CLRP1.1;K1合上了,使P1.1輸出低電平,LED亮
AJMPLOOP2;轉(zhuǎn)LOOP2,繼續(xù)查詢LOOP1:SETBP1.1;使P1.1輸出高電平,LED滅AJMPLOOP2;轉(zhuǎn)LOOP2,繼續(xù)查詢
END;結(jié)束匯編2、C語(yǔ)言源程序#include<reg51.h>//頭文件sbit
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 柳州專版2025版中考?xì)v史奪分復(fù)習(xí)第05部分九上第20課第一次工業(yè)革命實(shí)戰(zhàn)演練
- 音樂(lè)活動(dòng)《小精靈》教案
- 加盟餐飲店合同范例
- 公司團(tuán)建活動(dòng)合同范例
- 人力資源服務(wù)平臺(tái)合同范例
- 優(yōu)居墊資合同范例
- 共享充電寶合同范例
- 農(nóng)田包地合同范例
- 人力入股機(jī)制合同范例
- 中藥藥材購(gòu)銷合同范例
- 14《請(qǐng)幫我一下吧》說(shuō)課稿-2023-2024學(xué)年道德與法治一年級(jí)下冊(cè)統(tǒng)編版
- 四川省綿陽(yáng)市2025屆高三第二次診斷性考試思想政治試題(含答案)
- DB3304T 040-2023 安全生產(chǎn)技術(shù)服務(wù)機(jī)構(gòu)管理規(guī)范
- DB3204T 1032-2022 安全生產(chǎn)技術(shù)服務(wù)機(jī)構(gòu)基本服務(wù)規(guī)范
- 某辦公樓智能化系統(tǒng)技術(shù)規(guī)格說(shuō)明書
- 咨詢公司顧問(wèn)聘用協(xié)議書
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(kù)(共380題含答案)
- 2024年醫(yī)藥行業(yè)年終總結(jié).政策篇 易聯(lián)招采2024
- 體育產(chǎn)業(yè)園區(qū)規(guī)劃與運(yùn)營(yíng)管理方案設(shè)計(jì)
- 查莉成長(zhǎng)日jiGoodLuckCharlie第一季中英對(duì)照劇本
- 4個(gè)國(guó)外景觀綠道案例分析
評(píng)論
0/150
提交評(píng)論