單片機(jī)原理及應(yīng)用思考題_第1頁(yè)
單片機(jī)原理及應(yīng)用思考題_第2頁(yè)
單片機(jī)原理及應(yīng)用思考題_第3頁(yè)
單片機(jī)原理及應(yīng)用思考題_第4頁(yè)
單片機(jī)原理及應(yīng)用思考題_第5頁(yè)
已閱讀5頁(yè),還剩30頁(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)介

單片機(jī)原理及應(yīng)用思考題第一頁(yè),共三十五頁(yè),編輯于2023年,星期五1.順序程序設(shè)計(jì)例4.1請(qǐng)用MCS-51匯編指令編寫(xiě)程序,將片內(nèi)RAM104、105單元中的內(nèi)容分別傳送到片外RAM104H、105H單元中。分析:應(yīng)注意片內(nèi)和片外的尋址指令不同第二頁(yè),共三十五頁(yè),編輯于2023年,星期五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é)束第三頁(yè),共三十五頁(yè),編輯于2023年,星期五1.簡(jiǎn)單分支程序YN

順序執(zhí)行條件滿足?轉(zhuǎn)向目標(biāo)程序2.分支程序設(shè)計(jì)圖4.1簡(jiǎn)單分支程序轉(zhuǎn)移第四頁(yè),共三十五頁(yè),編輯于2023年,星期五分析:只要將兩數(shù)進(jìn)行比較,用比較的結(jié)果作為分支轉(zhuǎn)移的條件就很容易地找出其中的大數(shù)。

已知片內(nèi)RAMFIRST開(kāi)始的兩個(gè)單元中各存放有一個(gè)8位無(wú)符號(hào)二進(jìn)制數(shù),要求找出其中的大數(shù)并存入片內(nèi)RAM的SECOND單元中。例4.2第五頁(yè),共三十五頁(yè),編輯于2023年,星期五 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é)束參考程序第六頁(yè),共三十五頁(yè),編輯于2023年,星期五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)移第七頁(yè),共三十五頁(yè),編輯于2023年,星期五1)把AJMP或LJMP指令組成一個(gè)分支程序的

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

可通過(guò)間接轉(zhuǎn)移指令JMP@A+DPTR和無(wú)條件轉(zhuǎn)移指令中的AJMP或LJMP指令來(lái)實(shí)現(xiàn)多路分支轉(zhuǎn)移:第八頁(yè),共三十五頁(yè),編輯于2023年,星期五例4.3

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

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é)束參考程序第十頁(yè),共三十五頁(yè),編輯于2023年,星期五

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

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

循環(huán)程序的主體部分,是通過(guò)反復(fù)執(zhí)行來(lái)完成數(shù)據(jù)的具體處理,它位于循環(huán)體內(nèi)。3.循環(huán)程序設(shè)計(jì)循環(huán)程序由4部分組成:第十二頁(yè),共三十五頁(yè),編輯于2023年,星期五3)循環(huán)控制

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

通常位于循環(huán)體后,是用來(lái)存放循環(huán)處理的最終結(jié)果及恢復(fù)各寄存器與工作單元的原始值。第十三頁(yè),共三十五頁(yè),編輯于2023年,星期五

設(shè)MCS-51單片機(jī)內(nèi)部RAM從40H開(kāi)始的連續(xù)16個(gè)單元中,每個(gè)單元中分別存放有單字節(jié)的帶符號(hào)數(shù)。要求將其中的正數(shù)存入50H開(kāi)始的連續(xù)單元中,負(fù)數(shù)存入60H開(kāi)始的連續(xù)單元中,并將正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)分別存入70H、71H、72H單元中。例4.4第十四頁(yè),共三十五頁(yè),編輯于2023年,星期五1) 帶符號(hào)數(shù)的最高位為符號(hào)位,可通過(guò) 最高位判斷正負(fù):“0”表示正數(shù),“1” 表示負(fù)數(shù)。2) 程序中需要從40H單元開(kāi)始取源數(shù), 存正數(shù)和負(fù)數(shù),故需要三個(gè)地址指針 來(lái)指向?qū)?yīng)的內(nèi)存單元;設(shè)對(duì)應(yīng)的地 址指針?lè)謩e為R0、R1和R2,由于R2 不能用間接尋址方式,故R2需要同R1 或R0進(jìn)行交換后,才能進(jìn)行負(fù)數(shù)的存 放。

分析第十五頁(yè),共三十五頁(yè),編輯于2023年,星期五圖4.3程序流程圖第十六頁(yè),共三十五頁(yè),編輯于2023年,星期五參考程序:

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ù)地址指針第十七頁(yè),共三十五頁(yè),編輯于2023年,星期五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)循壞控制第十八頁(yè),共三十五頁(yè),編輯于2023年,星期五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é)束第十九頁(yè),共三十五頁(yè),編輯于2023年,星期五查表指令有:

MOVCA,@A+DPTRMOVCA,@A+PC

查表就是把事先計(jì)算或測(cè)得的數(shù)據(jù)按照一定的順序編制成表格存放在存儲(chǔ)器中,然后根據(jù)輸入的數(shù)據(jù),從表格中查出所需的結(jié)果。4.查表程序設(shè)計(jì)第二十頁(yè),共三十五頁(yè),編輯于2023年,星期五

片內(nèi)RAM的EGA單元中有一個(gè)大寫(xiě)的英文字母,要求將此字母在英文字母表中的位置送入片內(nèi)的COUNT單元中,如EGA單元中字母為I時(shí),則COUNT單元中需送入數(shù)字9。例4.6第二十一頁(yè),共三十五頁(yè),編輯于2023年,星期五如果將26個(gè)英文字母按照順序編成一個(gè)表,通過(guò)查表法得到一個(gè)字母與EGA單元中的字母比較,若不相等再查,同時(shí)記錄查表的次數(shù)。查完后,將記錄次數(shù)送COUNT單元。分析第二十二頁(yè),共三十五頁(yè),編輯于2023年,星期五參考程序

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

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

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

INCCOUNT ;記數(shù)值加1SJMPLOOP ;繼續(xù)查L(zhǎng)AST:INCCOUNT ;記數(shù)值加1SJMP$ ;等待ALPT:DB‘A’,‘B’,…,‘Y’,‘Z’END ;結(jié)束第二十三頁(yè),共三十五頁(yè),編輯于2023年,星期五編寫(xiě)子程序時(shí)應(yīng)注意:a.子程序的第一條指令之前必須有標(biāo)號(hào);b.子程序中需要保護(hù)現(xiàn)場(chǎng);c.主程序和子程序之間的參數(shù)傳遞。5.子程序設(shè)計(jì)第二十四頁(yè),共三十五頁(yè),編輯于2023年,星期五

已知片內(nèi)BLOCKB單元開(kāi)始處有一數(shù)據(jù)塊,塊長(zhǎng)在R2中,在此數(shù)據(jù)塊的每個(gè)單元中存放有一個(gè)未組合的BCD碼,要求將每個(gè)BCD碼轉(zhuǎn)換為ASCAII碼,并存放在片內(nèi)BLOCKA開(kāi)始的連續(xù)單元中。例4.8BCD碼轉(zhuǎn)換為ASCAII碼第二十五頁(yè),共三十五頁(yè),編輯于2023年,星期五將一位BCD碼轉(zhuǎn)換為ASCAII碼的子程序:TRANS: MOVA,@R0 ;取BCD碼

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

INCR0 INCR1 RET ;返回分析:將一位BCD碼轉(zhuǎn)換為相應(yīng)的ASCAII碼只需加上30H即可。第二十六頁(yè),共三十五頁(yè),編輯于2023年,星期五

主程序:

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

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

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

SJMP$ ;等待

END ;結(jié)束第二十七頁(yè),共三十五頁(yè),編輯于2023年,星期五

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

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

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ù)第二十八頁(yè),共三十五頁(yè),編輯于2023年,星期五參考程序

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

;(書(shū)上此處有錯(cuò))第二十九頁(yè),共三十五頁(yè),編輯于2023年,星期五ADD0AH:PUSHA;保護(hù)現(xiàn)場(chǎng)

MOVA,R3;累加的和送A中

ADDA,#0AHMOVR3,A;加10后送回原處

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

RET;返回

加10子程序:第三十頁(yè),共三十五頁(yè),編輯于2023年,星期五

已知片內(nèi)RAMADR1開(kāi)始的單元依次從低位到高位存放有L個(gè)字節(jié)的無(wú)符號(hào)數(shù),片外RAMADR2開(kāi)始的單元也依次從低位到高位存放有L個(gè)字節(jié)的無(wú)符號(hào)數(shù)。請(qǐng)編一個(gè)加法程序,將他們的和存放在ADR1開(kāi)始的連續(xù)單元中。2)算術(shù)運(yùn)算子程序例4.11多字節(jié)無(wú)符號(hào)數(shù)相加第三十一頁(yè),共三十五頁(yè),編輯于2023年,星期五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é)束。第三十二頁(yè),共三十五頁(yè),編輯于2023年,星期五開(kāi)始#ADR1→(R0)#A

溫馨提示

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