單片機(jī)原理及應(yīng)用思考題_第1頁
單片機(jī)原理及應(yīng)用思考題_第2頁
單片機(jī)原理及應(yīng)用思考題_第3頁
單片機(jī)原理及應(yīng)用思考題_第4頁
單片機(jī)原理及應(yīng)用思考題_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

已知片內(nèi)RAMFIRST開始的兩個單元中各存放有一個8位無符號二進(jìn)制數(shù),要求找出其中的大數(shù)并存入片內(nèi)RAM的SECOND單元中。例4.2第5頁,共35頁,2023年,2月20日,星期三 ORG1000H CLRC MOVR0,#FRIST ;第一個數(shù)地址送R0中

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

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

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

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

SJMP$;等待

END;結(jié)束參考程序第6頁,共35頁,2023年,2月20日,星期三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)移第7頁,共35頁,2023年,2月20日,星期三1)把AJMP或LJMP指令組成一個分支程序的

轉(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指令來實現(xiàn)多路分支轉(zhuǎn)移:第8頁,共35頁,2023年,2月20日,星期三例4.3

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

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

ADDA,R0 ;每條AJMP指令占用兩個字

;節(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é)束參考程序第10頁,共35頁,2023年,2月20日,星期三

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

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

循環(huán)程序的主體部分,是通過反復(fù)執(zhí)行來完成數(shù)據(jù)的具體處理,它位于循環(huán)體內(nèi)。3.循環(huán)程序設(shè)計循環(huán)程序由4部分組成:第12頁,共35頁,2023年,2月20日,星期三3)循環(huán)控制

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

通常位于循環(huán)體后,是用來存放循環(huán)處理的最終結(jié)果及恢復(fù)各寄存器與工作單元的原始值。第13頁,共35頁,2023年,2月20日,星期三

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

分析第15頁,共35頁,2023年,2月20日,星期三圖4.3程序流程圖第16頁,共35頁,2023年,2月20日,星期三參考程序:

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

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

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

MOVR2,#60H ;設(shè)負(fù)數(shù)地址指針第17頁,共35頁,2023年,2月20日,星期三LOOP:MOVA,@R0 ;取源數(shù)

JZ

ZERO

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

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

INC71H ;負(fù)數(shù)個數(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)循壞控制第18頁,共35頁,2023年,2月20日,星期三POSI:INC70H ;正數(shù)個數(shù)加1MOV@R1,A ;存正數(shù)

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

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

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

SJMP$ ;等待

END ;結(jié)束第19頁,共35頁,2023年,2月20日,星期三查表指令有:

MOVCA,@A+DPTRMOVCA,@A+PC

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

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

ORG1000HEGAEQU50HCOUNTEQU60HMOVCOUNT,#00HMOVA,#16 ;調(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é)束第23頁,共35頁,2023年,2月20日,星期三編寫子程序時應(yīng)注意:a.子程序的第一條指令之前必須有標(biāo)號;b.子程序中需要保護(hù)現(xiàn)場;c.主程序和子程序之間的參數(shù)傳遞。5.子程序設(shè)計第24頁,共35頁,2023年,2月20日,星期三

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

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

INCR0 INCR1 RET ;返回分析:將一位BCD碼轉(zhuǎn)換為相應(yīng)的ASCAII碼只需加上30H即可。第26頁,共35頁,2023年,2月20日,星期三

主程序:

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

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

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

SJMP$ ;等待

END ;結(jié)束第27頁,共35頁,2023年,2月20日,星期三

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

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

2)十位數(shù)轉(zhuǎn)換時只要累加0AH就能將其轉(zhuǎn)換 為相應(yīng)的二進(jìn)制數(shù),然后再將個位數(shù)直接 加到轉(zhuǎn)換后的十位數(shù)上就可完成整個數(shù)的 轉(zhuǎn)換。例4.9BCD碼轉(zhuǎn)換為二進(jìn)制數(shù)第28頁,共35頁,2023年,2月20日,星期三參考程序

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 ;取個位數(shù)

ADDA,R3 ;與十位相加

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

;(書上此處有錯)第29頁,共35頁,2023年,2月20日,星期三ADD0AH:PUSHA;保護(hù)現(xiàn)場

MOVA,R3;累加的和送A中

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

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

RET;返回

加10子程序:第30頁,共35頁,2023年,2月20日,星期三

已知片內(nèi)RAMADR1開始的單元依次從低位到高位存放有L個字節(jié)的無符號數(shù),片外RAMADR2開始的單元也依次從低位到高位存放有L個字節(jié)的無符號數(shù)。請編一個加法程序,將他們的和存放在ADR1開始的連續(xù)單元中。2)算術(shù)運算子程序例4.11多字節(jié)無符號數(shù)相加第31頁,共35頁,2023年,2月20日,星期三R0:片內(nèi)RAM地址指針,初值為ADR1DPTR:片外RAM地址指針,初值為ADR2每完成一個字節(jié)的加法后,R0、DPTR各自加1,調(diào)整為加數(shù)、被加數(shù)下一待加字節(jié)的地址。R2:計數(shù)器。存放待加的字節(jié)數(shù),每完成一個字節(jié)的加法后,內(nèi)容減1,當(dāng)R2=0時,程序結(jié)束。第32頁,共35頁,2023年,2月20日,星期三開始#ADR1→(R0)

溫馨提示

  • 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

提交評論