單片機(jī)原理與接口技術(shù)課件4_第1頁
單片機(jī)原理與接口技術(shù)課件4_第2頁
單片機(jī)原理與接口技術(shù)課件4_第3頁
單片機(jī)原理與接口技術(shù)課件4_第4頁
單片機(jī)原理與接口技術(shù)課件4_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

MCS-51系列單片機(jī)的程序設(shè)計(jì)第四章

交叉匯編語言MASM51單片機(jī)匯編語言程序設(shè)計(jì)方法及技巧本章內(nèi)容了解交叉匯編語言MASM51的特點(diǎn)掌握順序程序、分支程序、循環(huán)程序、查表程序、子程序的基本設(shè)計(jì)方法和技巧學(xué)習(xí)目的掌握匯編語言程序設(shè)計(jì)的一般步驟4.1

交叉匯編語言MASM51

匯編語言源程序是由匯編指令和偽指令組成的文件,其擴(kuò)展名為“ASM”。

源程序編輯完后只有轉(zhuǎn)換為機(jī)器碼表示的目標(biāo)程序計(jì)算機(jī)才能執(zhí)行,這個(gè)轉(zhuǎn)換的過程稱為匯編。

1)人工匯編人工匯編是通過人工查出源程序中所有匯編指令的機(jī)器碼,并依次將機(jī)器碼輸入單片機(jī)中,使之成為單片機(jī)能直接執(zhí)行的目標(biāo)程序。2)機(jī)器匯編

機(jī)器匯編是指在計(jì)算機(jī)上通過匯編程序?qū)υ闯绦蜻M(jìn)行匯編,即從源程序到目標(biāo)程序的轉(zhuǎn)換過程是由計(jì)算機(jī)上的匯編程序自動完成的。3)交叉匯編

是指用一種計(jì)算機(jī)上的匯編程序去匯編另一種計(jì)算機(jī)的源程序,為另一種計(jì)算機(jī)產(chǎn)生目標(biāo)程序。單片機(jī)MCS-51匯編語言程序設(shè)計(jì)步驟:

1分析問題

2確定算法

3設(shè)計(jì)程序流程圖

4分配內(nèi)存單元

5編寫匯編語言源程序

6調(diào)試程序4.2程序設(shè)計(jì)方法及技巧4.2.1順序程序設(shè)計(jì)例4.1請用MCS-51匯編指令編寫程序,將片內(nèi)RAM104、105單元中的內(nèi)容分別傳送到片外RAM104H、105H單元中。分析:應(yīng)注意片內(nèi)和片外的尋址指令不同ORG1000HMOVR0,#68HMOVA,@R0 ;片內(nèi)RAM104單元內(nèi)容送累加器MOVDPTR,#0104HMOVX@DPTR,A ;完成片內(nèi)RAM104單元內(nèi)容送片

;外104H單元中INCR0MOVA,@R0 ;片內(nèi)RAM105單元內(nèi)容送累加器INCDPTRMOVX@DPTR,A ;完成片內(nèi)RAM105單元內(nèi)容送片

;外105H單元中SJMP$ ;等待END ;結(jié)束1.簡單分支程序YN

順序執(zhí)行條件滿足?轉(zhuǎn)向目標(biāo)程序4.2.2分支程序設(shè)計(jì)圖4.1簡單分支程序轉(zhuǎn)移分析:只要將兩數(shù)進(jìn)行比較,用比較的結(jié)果作為分支轉(zhuǎn)移的條件就很容易地找出其中的大數(shù)。

已知片內(nèi)RAMFIRST開始的兩個(gè)單元中各存放有一個(gè)8位無符號二進(jìn)制數(shù),要求找出其中的大數(shù)并存入片內(nèi)RAM的SECOND單元中。例4.2

ORG1000H CLRC MOVR0,#FRIST ;第一個(gè)數(shù)地址送R0中

MOVA,@R0 ;取第一個(gè)數(shù)

INCR0 ;R0指向第二個(gè)數(shù)地址

SUBBA,@R0 ;兩數(shù)比較

JCBIG ;第二個(gè)數(shù)大轉(zhuǎn)BIG DECR0 ;R0指向第一個(gè)數(shù)地址BIG: MOVSECOND,@R0;存大數(shù)

SJMP$;等待

END;結(jié)束參考程序2)多路分支程序(散轉(zhuǎn)程序)K=n

K=n-1

K=2轉(zhuǎn)向分支n-1轉(zhuǎn)向分支2轉(zhuǎn)向分支1轉(zhuǎn)向分支nK=?

K=1

…圖4.2多路分支程序轉(zhuǎn)移1)把AJMP或LJMP指令組成一個(gè)分支程序的

轉(zhuǎn)移表,表的首地址放入DPTR中;2)調(diào)整后的出口信息放入累加器A中;3)執(zhí)行JMP@A+DPTR轉(zhuǎn)向?qū)?yīng)的分支程序。

可通過間接轉(zhuǎn)移指令JMP@A+DPTR和無條件轉(zhuǎn)移指令中的AJMP或LJMP指令來實(shí)現(xiàn)多路分支轉(zhuǎn)移:例4.3

已知R0中存放有一數(shù)字關(guān)鍵碼,要求根據(jù)碼值的不同,分別轉(zhuǎn)向?qū)?yīng)的碼值程序段去執(zhí)行。即當(dāng)(R0)=K時(shí),便執(zhí)行CODEK程序。

ORG1000HMOVDPTR,#TAB ;表首址送DPTRMOVA,R0 ;取數(shù)字關(guān)鍵碼

ADDA,R0 ;每條AJMP指令占用兩個(gè)字

;節(jié),將出口信息乘2JNCLESS ;關(guān)鍵碼小于128轉(zhuǎn)LESSINCDPHLESS:JMP@A+DPTR

TAB:AJMPCODE0 ;關(guān)鍵碼為0,轉(zhuǎn)CODE0執(zhí)行

AJMPCODE1 ;關(guān)鍵碼為1,轉(zhuǎn)CODE1執(zhí)行

……AJMPCODE255 ;關(guān)鍵碼為255,轉(zhuǎn)CODE255

;執(zhí)行

SJMP$ ;等待

END ;結(jié)束參考程序

AJMP指令的轉(zhuǎn)移范圍不超出所在的2KB字節(jié)區(qū)間,如各小段程序較長,在2KB字節(jié)內(nèi)無法全部容納,上面的程序應(yīng)該怎樣修改?思考1)循環(huán)初始化

設(shè)置循環(huán)的初始狀態(tài),位于循環(huán)程序的開頭位置2)循環(huán)處理

循環(huán)程序的主體部分,是通過反復(fù)執(zhí)行來完成數(shù)據(jù)的具體處理,它位于循環(huán)體內(nèi)。4.2.3循環(huán)程序設(shè)計(jì)循環(huán)程序由4部分組成:3)循環(huán)控制

也在循環(huán)體內(nèi),是用于控制循環(huán)的繼續(xù)與否。4)循環(huán)結(jié)束

通常位于循環(huán)體后,是用來存放循環(huán)處理的最終結(jié)果及恢復(fù)各寄存器與工作單元的原始值。

設(shè)MCS-51單片機(jī)內(nèi)部RAM從40H開始的連續(xù)16個(gè)單元中,每個(gè)單元中分別存放有單字節(jié)的帶符號數(shù)。要求將其中的正數(shù)存入50H開始的連續(xù)單元中,負(fù)數(shù)存入60H開始的連續(xù)單元中,并將正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)分別存入70H、71H、72H單元中。例4.41) 帶符號數(shù)的最高位為符號位,可通過 最高位判斷正負(fù):“0”表示正數(shù),“1” 表示負(fù)數(shù)。2) 程序中需要從40H單元開始取源數(shù), 存正數(shù)和負(fù)數(shù),故需要三個(gè)地址指針 來指向?qū)?yīng)的內(nèi)存單元;設(shè)對應(yīng)的地 址指針分別為R0、R1和R2,由于R2

不能用間接尋址方式,故R2需要同R1

或R0進(jìn)行交換后,才能進(jìn)行負(fù)數(shù)的存 放。

分析參考程序:

ORG1000HCLRAMOV70H,A ;存放正數(shù)的個(gè)數(shù)單元清0MOV71H,A ;存放負(fù)數(shù)的個(gè)數(shù)單元清0MOV72H,A ;存放零的個(gè)數(shù)單元清0MOVR3,#10H ;設(shè)循環(huán)計(jì)數(shù)器初值

MOVR0,#40H ;設(shè)源數(shù)地址指針

MOVR1,#50H ;設(shè)正數(shù)地址指針

MOVR2,#60H ;設(shè)負(fù)數(shù)地址指針LOOP:MOVA,@R0 ;取源數(shù)

JZ

ZERO

;源數(shù)為0,轉(zhuǎn)ZER0JNBACC.7,POSI

;源數(shù)為正,轉(zhuǎn)POSI

INC71H ;負(fù)數(shù)個(gè)數(shù)加1MOVR4,A ;暫存原數(shù)

MOVA,R2XCHA,R1 ;R1與R2中的內(nèi)容交換

XCHA,R4MOV@R1,A ;存負(fù)數(shù)

XCHA,R4XCHA,R1 ;R1與R2中的內(nèi)容交換

INCR2 ;調(diào)整負(fù)數(shù)地址指針

SJMP

LOOP1

;轉(zhuǎn)循壞控制POSI:INC70H ;正數(shù)個(gè)數(shù)加1MOV@R1,A ;存正數(shù)

INCR1 ;調(diào)整正數(shù)地址指針

SJMPLOOP1ZERO:INC72H ;零的個(gè)數(shù)加1LOOP1:INCR0 ;調(diào)整源數(shù)地址指針

DJNZR3,LOOP ;未送完,繼續(xù)

SJMP$ ;等待

END ;結(jié)束查表指令有:

MOVCA,@A+DPTRMOVCA,@A+PC

查表就是把事先計(jì)算或測得的數(shù)據(jù)按照一定的順序編制成表格存放在存儲器中,然后根據(jù)輸入的數(shù)據(jù),從表格中查出所需的結(jié)果。4.2.4查表程序設(shè)計(jì)

當(dāng)DPTR作基址寄存器時(shí),注意:①基址值(表格首地址)→DPTR;②變址值(表中要查的項(xiàng)與表格首地址之間的間隔字節(jié)數(shù))→A;注意:

用查表程序求0~40之間整數(shù)的立方。已知該整數(shù)存在內(nèi)RAM30H中,查得立方數(shù)存內(nèi)RAM30H(高8位)31H。已知立方表(雙字節(jié))首地址為TAB。例

CUBE: MOVDPTR,#TAB;置立方表首址

MOVA,30H ;讀數(shù)據(jù)

ADDA,30H ;數(shù)據(jù)×2→A MOV30H,A ;暫存立方表數(shù)據(jù)序號

MOVCA,@A+DPTR;讀立方數(shù)據(jù)高8位

XCHA,30H;存立方數(shù)據(jù)高8位,立方表數(shù)據(jù)序號→A INCA ;指向立方數(shù)據(jù)低8位

MOVCA,@A+DPTR;讀立方數(shù)據(jù)低8位

MOV31H,A ;存立方數(shù)據(jù)低8位

RET;TAB:DW0,0,0,1,0,8,0,27,0,64;0~40立方表

DW0,125,0,216,…,0FAH,00H;說明:數(shù)據(jù)×2→A原因是立方表數(shù)據(jù)為雙字節(jié)片內(nèi)RAM的EGA單元中有一個(gè)大寫的英文字母,要求將此字母在英文字母表中的位置送入片內(nèi)的COUNT單元中,如EGA單元中字母為I時(shí),則COUNT單元中需送入數(shù)字9。例4.6如果將26個(gè)英文字母按照順序編成一個(gè)表,通過查表法得到一個(gè)字母與EGA單元中的字母比較,若不相等再查,同時(shí)記錄查表的次數(shù)。查完后,將記錄次數(shù)送COUNT單元。分析參考程序

ORG1000HEGAEQU50HCOUNTEQU60HMOVCOUNT,#00HMOVA,#16H ;調(diào)整地址LOOP:PUSHAMOVCA,@A+PC;查表

CJNZA,EGA,NF ;所查字母與EGA中字母比較

SJMPLAST ;相等轉(zhuǎn)LASTNF:POPAINCA ;調(diào)整地址

INCCOUNT ;記數(shù)值加1SJMPLOOP ;繼續(xù)查LAST:INCCOUNT ;記數(shù)值加1SJMP$ ;等待ALPT:DB‘A’,‘B’,…,‘Y’,‘Z’END ;結(jié)束

求y=n!(n=0,1,…9),已知n的值在片內(nèi)NUM單元中,y值用BCD碼表示且存放在片內(nèi)GETY開始的單元中。

例4.6

分析:將函數(shù)值列成表,采用查表法求y=n!

當(dāng)n=9時(shí),y=362880H,需要三個(gè)單元存放結(jié)果。設(shè)每個(gè)n對應(yīng)的y值都用3個(gè)單元來存放,則y值在表格中的首地址的計(jì)算公式為:y地址=函數(shù)表首址+n*3參考程序

ORG1000HNUMEQU50HGETYEQU60HMOVR1,#03HMOVR0,#GETYMOVA,NUM;取n值

MOVB,#03HMULAB;n*3MOVR2,A;暫存

MOVDPTR,#TAB;表的首地址送DPTR中LOOP:MOVCA,@A+DPTR ;查表

MOV@R0,A ;存結(jié)果

INCR0 ;調(diào)整存放結(jié)果地址指針

INCDPTR ;修正表地址指針

MOVA,R2 ;恢復(fù)n*3DJNZR1,LOOP ;未查完,繼續(xù)

SJMP$ ;等待

END ;結(jié)束TAB:DB01H,00H,00H,01H,00H,00HDB02H,00H,00H,06H,00H,00HDB24H,00H,00H,20H,01H,00HDB20H,07H,00H,40H,50H,00HDB20H,03H,04H,80H,28H,36H編寫子程序時(shí)應(yīng)注意:a.子程序的第一條指令之前必須有標(biāo)號;b.子程序中需要保護(hù)現(xiàn)場;c.主程序和子程序之間的參數(shù)傳遞。4.2.5子程序設(shè)計(jì)1)數(shù)碼轉(zhuǎn)換子程序

已知R0的低半個(gè)字節(jié)為一個(gè)四位的二進(jìn)制數(shù),要求將其轉(zhuǎn)換為ASCAII碼后送回R0中。例4.7二進(jìn)制碼轉(zhuǎn)換為ASCII碼二進(jìn)制數(shù)與ASCII碼的對應(yīng)關(guān)系:

四位二進(jìn)制

ASCII

0000(0)30H0001(1)31H1001(9)39H1010(A)41H

1111(F)46H…………參考程序

ORG1000BTOASC: PUSHA ;保護(hù)現(xiàn)場

PUSHPSW ;保護(hù)現(xiàn)場

MOVA,R0ANLA,#0FH ;取四位二進(jìn)制數(shù)

MOVR0,A ;暫存

CLRCSUBBA,#0AH;與10比較

MOVA,R0 ;恢復(fù)四位二進(jìn)制數(shù)

JCLOOP ;小于10轉(zhuǎn)LOOPADDA,#07H ;大于10先加07HLOOP: ADDA,#30H ;加30HMOVR0,A ;存結(jié)果

POPPSW ;恢復(fù)現(xiàn)場

POPA ;恢復(fù)現(xiàn)場

RET ;返回

已知片內(nèi)BLOCKB單元開始處有一數(shù)據(jù)塊,塊長在R2中,在此數(shù)據(jù)塊的每個(gè)單元中存放有一個(gè)未組合的BCD碼,要求將每個(gè)BCD碼轉(zhuǎn)換為ASCAII碼,并存放在片內(nèi)BLOCKA開始的連續(xù)單元中。例4.8BCD碼轉(zhuǎn)換為ASCAII碼將一位BCD碼轉(zhuǎn)換為ASCAII碼的子程序:TRANS: MOVA,@R0 ;取BCD碼

ADDA,#30H MOV@R1,A ;送ASCAII碼

INCR0 INCR1 RET ;返回分析:將一位BCD碼轉(zhuǎn)換為相應(yīng)的ASCAII碼只需加上30H即可。

主程序:

ORG1000HMOVR2,#LMOVR0,#BLOCKB ;設(shè)BCD碼的地址指針

MOVR1,#BLOCKA ;設(shè)ASCAII的地址指針LOOP:ACALLTRANS ;調(diào)用TRANS子程序

DJNZR2,LOOP ;未轉(zhuǎn)換完,繼續(xù)

SJMP$ ;等待

END ;結(jié)束

設(shè)片內(nèi)40H單元中有一組合的BCD碼,要求將其轉(zhuǎn)換為二進(jìn)制數(shù)存回原處。分析:

1)組合的BCD碼為兩位十進(jìn)制數(shù),需將十位 數(shù)和個(gè)位數(shù)分開處理。

2)十位數(shù)轉(zhuǎn)換時(shí)只要累加0AH就能將其轉(zhuǎn)換 為相應(yīng)的二進(jìn)制數(shù),然后再將個(gè)位數(shù)直接 加到轉(zhuǎn)換后的十位數(shù)上就可完成整個(gè)數(shù)的 轉(zhuǎn)換。例4.9BCD碼轉(zhuǎn)換為二進(jìn)制數(shù)參考程序

ORG1000BCDTOB: MOVA,40H ANLA,#F0H ;取十位數(shù)

SWAPA ;將十位數(shù)換到低4位

JZDONE ;十位數(shù)為0,返回

MOVR3,#00H ;累加和寄存器清0LOOP: DECA

ACALLADD0AH ;調(diào)用加10子程序

JNZLOOP ;未加完繼續(xù)

MOVA,40H ANLA,#0FH ;取個(gè)位數(shù)

ADDA,R3 ;與十位相加

MOV40H,A ;轉(zhuǎn)換完,存結(jié)果DONE: RET

;(書上此處有錯(cuò))

已知片內(nèi)RAMADR1開始的單元依次從低位到高位存放有L個(gè)字節(jié)的無符號數(shù),片外RAMADR2開始的單元也依次從低位到高位存放有L個(gè)字節(jié)的無符號數(shù)。請編一個(gè)加法程序,將他們的和存放在ADR1開始的連續(xù)單元中。2)算術(shù)運(yùn)算子程序例4.11多字節(jié)無符號數(shù)相加R0:片內(nèi)RAM地址指針,初值為ADR1DPTR:片外RAM地址指針,初值為ADR2每完成一個(gè)字節(jié)的加法后,R0、DPTR各自加1,調(diào)整為加數(shù)、被加數(shù)下一待加字節(jié)的地址。R2:計(jì)數(shù)器。存放待加的字節(jié)數(shù),每完成一個(gè)字節(jié)的加法后,內(nèi)容減1,當(dāng)R2=0時(shí),程序結(jié)束。開始#ADR1→(R0)#ADR2→(DPRTR)#L→(R2)C清零((R0))+((DPTR))→(A)(A)→((R0))(R0)+1→(R0)(R1)+1→(R1)(R2)-1→(R2)(R2)=0?YN出口初始化設(shè)初值循環(huán)體工作部分修改循環(huán)體參數(shù)判別程序流程框圖:參考程序

ORG1000HNSADD:MOVR0,#ADDR1 ;設(shè)被加數(shù)的地址指針

MOVDPTR,#ADDR2 ;設(shè)加數(shù)的地址指針

MOVR2,#L ;設(shè)循環(huán)計(jì)數(shù)器初值

CLRCLOOP:MOVXA,@DPTR ;取加數(shù)

ADDCA,@R0 ;兩數(shù)相加

MOV@R0,A ;存和

INCR0 ;調(diào)整被加數(shù)地址指針

INCDPTR ;調(diào)整加數(shù)地址指針

DJNZR2,LOOP ;未加完,繼續(xù)

RET ;返回已知被乘數(shù)和乘數(shù)分別為雙字節(jié)的無符號數(shù),被乘數(shù)的高字節(jié)和低字節(jié)分別存放在R7和R6中,乘數(shù)的高字節(jié)和低字節(jié)分別存放在R5和R4中。要求乘積存放在片內(nèi)RAM以ADR開始的單元中。分析:由于只有單字節(jié)乘法指令,雙字節(jié)的乘法需要分作4次乘法運(yùn)算才能實(shí)現(xiàn)。例4.15兩雙字節(jié)無符號數(shù)相乘

a

b

cdbdHbdLadHadLbcHbcLacHacL@R0+3@R0+2@R0+1@R0

×b×da×db×ca×c積+R7R6R5R4ORG1000HMUL1:MOV40H,#00H ;統(tǒng)計(jì)bdH+adL+bcL

;的進(jìn)位單元清0MOV41H,#00H ;統(tǒng)計(jì)adH+bcH+acL

;的進(jìn)位單元清0MOVR0,#50H ;積的首地址送R0中

MOVA,R6 ;b送AMOVB,R4 ;d送BMULAB ;b

dMOV@R0,A ;bdL送50H單元中

MOVR1,B

;bdH送R1中R1參考程序

MOVA,R7 ;a送AMOVB,R4 ;d送BMULAB ;adMOVR2,A ;adL送R2中

MOVR3,B ;adH送R3中

MOVA,R6 ;b送AMOVB,R5 ;c送BMULAB ;bcADDA,R2 ;bcL+adL

JNCNEXT1 ;無進(jìn)位轉(zhuǎn)NEXT1INC40H ;統(tǒng)計(jì)進(jìn)位NEXT1:ADDA,R1 ;bcL+adL+bdH

JNCNEXT2 ;無進(jìn)位轉(zhuǎn)NEXT2INC40H ;統(tǒng)計(jì)進(jìn)位NEXT2:INCR0MOV@R0,A;存bcL+adL+bdH結(jié)果于51H單元中R3R1R2

MOVR1,B;bcH存R1中

MOVA,R7;a送AMOVB,R5;c送B

MULAB;a

c

ADDA,40H;acL加低位進(jìn)位

JNCNEXT3;無進(jìn)位轉(zhuǎn)NEXT3INC41H;統(tǒng)計(jì)進(jìn)位NEXT3:ADDA,

R1

;acL+bcH

JNCNEXT4;無進(jìn)位轉(zhuǎn)NEXT4INC41H;統(tǒng)計(jì)acL+bcH進(jìn)位NEXT4:ADDA,

R3

;acL+bcH+adH

INCR0MOV@R0,A;存acL+bcH+adH的結(jié)果于52H單元中

MOVA,BADDCA,41H;acH加低位進(jìn)位

INCR0MOV@R0,A;積最高位存53H單元中

RET;返回R1R3

1.用硬件電路實(shí)現(xiàn)2.定時(shí)器實(shí)現(xiàn)3.軟件延時(shí)定時(shí)(或延時(shí))方法:3)延時(shí)程序不需另添硬件,且變化靈活。軟件延時(shí):利用計(jì)算機(jī)執(zhí)行程序耗用的時(shí)間來實(shí)現(xiàn)延時(shí),又稱“延時(shí)程序”。優(yōu)點(diǎn):延時(shí)過程中占用CPU,所以不宜設(shè)計(jì)太長的延時(shí)程序。缺點(diǎn):

DELAY1:MOVR1,#0AH;1DL2:MOVR2,#18H;1DL1:NOP;1NOP;1DJNZR2,DL1;2DJNZR1,DL2;2RET;2

機(jī)器周期內(nèi)循環(huán)外循環(huán)例:設(shè)計(jì)一延時(shí)程序,延時(shí)時(shí)間為1ms。若MCS-51單片機(jī)系統(tǒng)采用12M晶振,則Tcy=1us內(nèi)循環(huán)一次需要4個(gè)機(jī)器周期,共循環(huán)18H=24次延時(shí)時(shí)間:

[1+(1+4×24+2)×10+2]Tcy=993us1ms延時(shí)程序常設(shè)計(jì)為子程序,以便頻繁調(diào)用?!纠烤帉懷訒r(shí)10ms子程序,fosc=12MHz。

解:fosc=12MHz,一個(gè)機(jī)器周期為1s。DY10ms:MOVR6,#20;置外循環(huán)次數(shù)DLP1:MOVR7,#250;置內(nèi)循環(huán)次數(shù)DLP2:DJNZR7,DLP2;2機(jī)周×250=500機(jī)周

DJNZR6,DLP1;500機(jī)周×20=10000機(jī)周

RET;說明:MOVRn指令為1個(gè)機(jī)器周期;DJNZ指令為2個(gè)機(jī)器周期;RET指令為2個(gè)機(jī)器周期;{[(2機(jī)周×250)+1+2]×20+1+2}×1s/機(jī)周=10063

s≈10ms【課堂練習(xí)題】

按下列要求編寫延時(shí)子程序:⑴延時(shí)2ms,fosc=6MHz;⑵延時(shí)5ms,fosc=12MHz;⑶延時(shí)10s,fosc=12MHz;4.2匯編語言程序設(shè)計(jì)復(fù)習(xí)課堂練習(xí)1:

兩個(gè)無符號雙字節(jié)數(shù)相加。

設(shè)被加數(shù)存放于內(nèi)部RAM的40H(高位字節(jié)),41H(低位字節(jié)),加數(shù)存放于50H(高位字節(jié)),51H(低位字節(jié)),和數(shù)存入40H和41H單元中。

程序如下:START:CLRC;將Cy清零

MOVR0,#41H;將被加數(shù)地址送數(shù)據(jù)指針R0MOVR1,#51H;將加數(shù)地址送數(shù)據(jù)指針R1AD1:MOVA,@R0;被加數(shù)低字節(jié)的內(nèi)容送入AADDA,@R1;兩個(gè)低字節(jié)相加MOV@R0,A;低字節(jié)的和存入被加數(shù)低字節(jié)中

DECR0;指向被加數(shù)高位字節(jié)

DECR1;指向加數(shù)高位字節(jié)

MOVA,@R0;被加數(shù)高位字節(jié)送入AADDCA,@R1;兩個(gè)高位字節(jié)帶Cy相加

MOV@R0,A;高位字節(jié)的和送被加數(shù)高位字節(jié)

RET課堂練習(xí)2

將兩個(gè)半字節(jié)數(shù)合并成一個(gè)一字節(jié)數(shù)。設(shè)內(nèi)部RAM40H,41H單元中分別存放著8位二進(jìn)制數(shù),要求取出兩個(gè)單元中的低半字節(jié),并成一個(gè)字節(jié)后,存入50H單元中START:MOVR1,#40H;設(shè)置R1為數(shù)據(jù)指針MOVA,@R1;取出第一個(gè)單元中的內(nèi)容ANLA,#0FH;取第一個(gè)數(shù)的低半字節(jié)SWAPA ;移至高半字節(jié)INCR1 ;修改數(shù)據(jù)指針XCHA,@R1 ;取第二個(gè)單元中的內(nèi)容ANLA,#0FH;取第二個(gè)數(shù)的低半字節(jié)ORLA,@R1 ;拼字MOV50H,A ;存放結(jié)果RET課堂練習(xí)3x#,y均為8位二進(jìn)制數(shù),設(shè)x存入R0,y存入R1,求解:程序如下:START:CJNER0,#00H,SUL1;R0中的數(shù)與00比較不等轉(zhuǎn)移

MOVR1,#00H;相等,R1←0SJMPSUL2SUL1:JCNEG;兩數(shù)不等,若(R0)<0,轉(zhuǎn)向

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論