單片機(jī)原理部分課后習(xí)題解_第1頁(yè)
單片機(jī)原理部分課后習(xí)題解_第2頁(yè)
單片機(jī)原理部分課后習(xí)題解_第3頁(yè)
單片機(jī)原理部分課后習(xí)題解_第4頁(yè)
單片機(jī)原理部分課后習(xí)題解_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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)介

1、3.16 8051芯片需要外擴(kuò)4kb程序存儲(chǔ)器,要求地址范圍為10001fffh,以便和內(nèi)部程序存儲(chǔ)器地址相銜接。所用芯片除了地址線和數(shù)據(jù)線外,只有一個(gè)片選控制端/cs,畫(huà)出擴(kuò)展系統(tǒng)的連接圖。解:3.17 在圖3.13中,若因某種原因,p2.2、p2.1、p2.0誤接為p2.5、p2.4、p2.3,這時(shí)所接的eprom尋址區(qū)是如何分布的?解: 誤接后,a10,a9,a8則分別與p2.5,p2.4,p2.3相接,p2.7 p2.6 p2.5 p2.4 p2.3 p2.2 p2.1 p2.0 p0.7p0.0 * * 0 0 0 * * * 0000000011111111* * 0 0 1 *

2、* * 0000000011111111 * * 0 1 0 * * * 0000000011111111* * 0 1 1 * * * 0000000011111111* * 1 0 0 * * * 0000000011111111* * 1 0 1 * * * 0000000011111111* * 1 1 0 * * * 0000000011111111* * 1 1 1 * * * 0000000011111111所以地址分布為:0000h00ffh, 0800h08ffh, 1000h10ffh, 1800h18ffh, 2000h20ffh,2800h28ffh, 3000h30f

3、fh, 3800h38ffh4.8 編寫程序,進(jìn)行兩個(gè)16位數(shù)的減法:6f5dh13b4h,結(jié)果存至內(nèi)部ram的30h和31h單元。30h單元存差的低8位。解:mov a, #5dhclr csubb a, #0b4hmov 30h, amov a, #6fhsubb a, #13hmov 31h, asjmp $4.9 編寫程序,若累加器內(nèi)容分別滿足一下條件,則程序轉(zhuǎn)至label存儲(chǔ)單元。(1)a10 (2) a10 (3) a10 (4) a10解:(1) clr ccjne a, #10, loopsjmp labelloop: jnc label sjmp $(2) cjne a, #

4、10, loopsjmp $loop: jnc label sjmp $(3) cjne a, #10, loopsjmp labelloop: jc label sjmp $(4) cjne a, #10, loopsjmp $loop: jc label sjmp $4.10 已知sp=25h,pc=2345h,(24h)=12h,(25h)=34h,(26h)=56h,問(wèn)在這種條件下執(zhí)行ret指令以后,sp,pc分別是多少?解: 在執(zhí)行ret指令后說(shuō)明是一個(gè)子函數(shù)執(zhí)行結(jié)束,則進(jìn)行pop操作,于是sp在執(zhí)行ret指令后變?yōu)?3h,因?yàn)?25h)=34h, (24h)=12h,所以pc=34

5、12h,因?yàn)樵谶M(jìn)入堆棧的時(shí)候是先壓入低8位,然后進(jìn)入堆棧的是高8位,出堆棧的時(shí)候正好相反。所以最后結(jié)果是:sp=23h,pc=3412h4.11 若sp=25h,pc=2345h,標(biāo)號(hào)label所在的地址為3456h,問(wèn)執(zhí)行長(zhǎng)調(diào)用指令 lcall label 之后,堆棧指針和堆棧內(nèi)容發(fā)生什么變化?pc是多少?解: 在進(jìn)行長(zhǎng)調(diào)用指令 lcall label,則要進(jìn)行堆棧保護(hù),而lcall指令是三字節(jié)的指令,所以pc在進(jìn)入堆棧之前變?yōu)?348h,在執(zhí)行完長(zhǎng)指令lcall之后,pc進(jìn)入子函數(shù)程序,則進(jìn)入之前的地址要首先保護(hù)起來(lái),所以sp=27h,堆棧的內(nèi)容(26h)=48h,(27h)=23h,此時(shí)

6、pc將要指向子函數(shù)label的入口地址,即pc=3456h。4.12 在4.11中的lcall指令能否直接換成“acall label”指令?為什么?解:不能,因?yàn)閍call是短調(diào)用指令,子程序調(diào)用的范圍為圍繞調(diào)用指令的2kb內(nèi),即它們的地址高5位應(yīng)該是相同的?;蛘哒f(shuō),在執(zhí)行acall指令時(shí),子程序入口地址的高5位是不能任意定的,只能由acall指令所在的位置來(lái)確定,例如4.11在調(diào)用子函數(shù)之前的地址為2345h,即高5位是00100,所以acall調(diào)用的地址范圍為:2000h27ffh,而label所在的地址為3456h已經(jīng)超出調(diào)用范圍,所以不能替換。4.13 試編寫程序,查找在內(nèi)部ram的

7、20h50h單元中是否有0aah這一數(shù)據(jù),若有這一數(shù)據(jù),則將51h單元置為01h,若未找到,則使51h單元置0。解:參考程序如下:m0v r0,#31hm0v r1,#20hloop: mov a,r1clr ccjne a,#0aah,loop1sjmp l00p2loop1: inc r1 djnz r0,loopm0v a,#00hsjmp loop3loop2: mov a,#01hloop3: mov 51h,a sjmp $4.14 試編寫程序,查找在內(nèi)部ram的20h50h單元內(nèi)部出現(xiàn)00h的次數(shù),并將查找的結(jié)果存入51h單元。解:參考程序如下:mov r0,#31hmov r1

8、,#20hmov r2,#00hloop: mov a,r1cjne a,#00h,loop1inc r2loop1: inc r1 djnz r0,loop m0v 51h,r2 sjmp $5.6 從20h單元開(kāi)始存放一組帶符號(hào)數(shù),其數(shù)目已經(jīng)存在1fh單元。要求統(tǒng)計(jì)出其中大于0,等于0和小于0的數(shù)的個(gè)數(shù),并把統(tǒng)計(jì)結(jié)果分別存入one,two,three三個(gè)單元。解:參考程序如下:one data #1chtwo data #1dhthree data #1ehmov one,#00hmov two,#00hmov three,#00hmov r0,#20hmov r1,1fhmov a,r1

9、 /*判斷是否存有數(shù)*/jz finishiloop: mov a,r0clr ccjne a,#00h,loop1inc twosjmp loop3loop1: jnc loop2 /*a>0時(shí)*/ inc three /*a<0時(shí)*/ sjmp loop3loop2: inc oneloop3: djnz r1,loopfinishi: sjmp $5.14 外部數(shù)據(jù)ram從2000h開(kāi)始有100個(gè)數(shù)據(jù),現(xiàn)要將它們移到從2030h開(kāi)始的區(qū)域,試編寫有關(guān)程序。解:參考程序如下(1):mov dptr,#2000hmov a,#63hmov r0,#100add a,dplmov

10、dpl,aloop: movx a,dptr /*取出最后一個(gè)數(shù)*/push dplpush amov a,dpladd a,#30hmov dpl,apop amovx dptr,apop dpldec dpldjnz r0,loopsjmp $參考程序如下(2):mov r0,#100mov dptr,#2063hloop: movx a,dptrmov r1,amov a,dpladd a,#30hmov dpl,amov a,r1movx dptr,amov a,dplsubb a,#30hmov dpl,adec dpldjnz r0,loopsjmp $5.15 從內(nèi)部數(shù)據(jù)ram的

11、block開(kāi)始有一個(gè)無(wú)符號(hào)數(shù)數(shù)據(jù)塊,長(zhǎng)度存于len單元,求出數(shù)據(jù)塊中的最小元素,并將其存入mini單元。要求使用比較條件轉(zhuǎn)移指令cjne。解: 參考程序如下:len data 20hmini data 21hblock data 22hmov r0,lenmov r1,#blockmov a,r0 /*檢查數(shù)據(jù)長(zhǎng)度是否0*/jz finishmov mini,r1loop: mov a,r1 inc r1clr ccjne a,mini,loop1sjmp loop2loop1: jnc,loop2 mov mini,aloop2: djnz r0,loopfinish: sjmp $5.20

12、 若累加器a中存放的是一個(gè)十六進(jìn)制數(shù),則將它轉(zhuǎn)換為相應(yīng)的ascii碼,并將結(jié)果存入20h ram單元,若a中存放的不是十六進(jìn)制數(shù),則將20h單元置為ffh,試編寫有關(guān)程序。解:參考程序入下:mov r1, aanl a, #0f0hcjne a, #00h,relclr ccjne a, #09h, loopsjmp loop1 (=9)loop: jc lo0p1 (<9) add a,#07h (>9)loop1: add a,#30h mov 20h,a sjmp $rel: mov 20h,#0ffhsjmp $7.1 用8031單片機(jī)的p1口和微型打印機(jī)連接以輸出數(shù)據(jù)。數(shù)

13、據(jù)傳送采用中斷方式?,F(xiàn)要把外部數(shù)據(jù)ram中從20h單元開(kāi)始的100個(gè)數(shù)據(jù)送到打印機(jī)中去打印。試寫出有關(guān)的程序,包括主程序和中斷服務(wù)程序。解:本題采用中斷方式,用ack加到into作為中斷請(qǐng)求信號(hào),用一個(gè)4輸入譯碼器進(jìn)行部分地址譯碼,系統(tǒng)的硬件連接圖如下圖所示:主程序: setb ea setb ex0 setb px0 setb it0 mov ro,#20h mov r1,#0f0h mov r2,#99 movx a,r0 movx r1,a loop: sjmp $中斷服務(wù)程序: org 0003h ljmp int0 int0: push psw push acc inc r0 mov

14、x a,r0 movx r1,a dec r2 mov a,r2 jnz next clr exo next: pop acc pop psw reti7.3 用8255芯片擴(kuò)展單片機(jī)的i/0口。8255的a口用做輸入,a口的每一位接一個(gè)開(kāi)關(guān),用b口作為輸出,輸出的每一位接一個(gè)顯示發(fā)光二極管。現(xiàn)要求某個(gè)開(kāi)關(guān)接1時(shí),相應(yīng)位上的發(fā)光二極管就亮(輸出為0),試編寫相應(yīng)的程序。解:設(shè)8255的a口地址為70h, b口地址為71h, c口地址為72h, 控制寄存器地址為73h。8255的工作方式為: a口:方式0,輸入 b口:方式0,輸出 c口:無(wú)關(guān)由此可以確定8255的工作方式控制字為10010000

15、h,即90h。有關(guān)程序如下:mov ro,#73hmov a,#90hmovx r0,aloop: mov ro,#70hmovx a,r0cpl ainc romovx r0,a sjmp loop7.8 外部ram以dat1開(kāi)始的數(shù)據(jù)區(qū)中有100個(gè)數(shù),現(xiàn)要求每隔150ms向內(nèi)部ram以dat2開(kāi)始的數(shù)據(jù)區(qū)中傳送10個(gè)數(shù)。通過(guò)10次傳送把數(shù)據(jù)全部傳送完。以定時(shí)器1作為定時(shí),8155作為接口芯片。試編寫有關(guān)的程序。單片機(jī)時(shí)鐘頻率為6mhz。解:現(xiàn)要求定時(shí)值為150ms,在單片機(jī)時(shí)鐘頻率為6mhz的情況,這個(gè)值已超過(guò)定時(shí)器可能提供的最大定時(shí)值。為了能夠?qū)崿F(xiàn)150ms的定時(shí)值,可采用定時(shí)器定時(shí)和軟

16、件計(jì)數(shù)器相結(jié)合的方法。本題可設(shè)定時(shí)器的定時(shí)值為50ms,另設(shè)一個(gè)軟件計(jì)數(shù)器,初值為3。每50ms定時(shí)時(shí)間到時(shí),產(chǎn)生中斷,在中斷服務(wù)程序中使軟件計(jì)數(shù)器減1,這樣到軟件計(jì)數(shù)器減到0時(shí),就獲得了150ms的定時(shí)。先計(jì)算50ms定時(shí)所需的定時(shí)初始值。這時(shí)需采用定時(shí)器方式1,即16位計(jì)數(shù)器方式。故定時(shí)器初值為:x=216-(50*10-3/(2*10-6)= 65536-25000 = 40536 = 95e8h本題采用定時(shí)器1定時(shí),工作方式為1,th1初值為9eh,tl1初值為58h。中斷服務(wù)程序入口為001bh。相關(guān)程序如下:org 001bhljmp brt1start: org 2000h mov tmod,#01h mov th1,#9eh mov t

溫馨提示

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