單片機原理部分課后習題解_第1頁
單片機原理部分課后習題解_第2頁
單片機原理部分課后習題解_第3頁
單片機原理部分課后習題解_第4頁
單片機原理部分課后習題解_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、3.16 8051芯片需要外擴4kb程序存儲器,要求地址范圍為10001fffh,以便和內(nèi)部程序存儲器地址相銜接。所用芯片除了地址線和數(shù)據(jù)線外,只有一個片選控制端/cs,畫出擴展系統(tǒng)的連接圖。解:3.17 在圖3.13中,若因某種原因,p2.2、p2.1、p2.0誤接為p2.5、p2.4、p2.3,這時所接的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 編寫程序,進行兩個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存儲單元。(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,問在這種條件下執(zhí)行ret指令以后,sp,pc分別是多少?解: 在執(zhí)行ret指令后說明是一個子函數(shù)執(zhí)行結(jié)束,則進行pop操作,于是sp在執(zhí)行ret指令后變?yōu)?3h,因為(25h)=34h, (24h)=12h,所以pc=34

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

6、pc將要指向子函數(shù)label的入口地址,即pc=3456h。4.12 在4.11中的lcall指令能否直接換成“acall label”指令?為什么?解:不能,因為acall是短調(diào)用指令,子程序調(diào)用的范圍為圍繞調(diào)用指令的2kb內(nèi),即它們的地址高5位應該是相同的?;蛘哒f,在執(zhí)行acall指令時,子程序入口地址的高5位是不能任意定的,只能由acall指令所在的位置來確定,例如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單元開始存放一組帶符號數(shù),其數(shù)目已經(jīng)存在1fh單元。要求統(tǒng)計出其中大于0,等于0和小于0的數(shù)的個數(shù),并把統(tǒng)計結(jié)果分別存入one,two,three三個單元。解:參考程序如下: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時*/ inc three /*a<0時*/ sjmp loop3loop2: inc oneloop3: djnz r1,loopfinishi: sjmp $5.14 外部數(shù)據(jù)ram從2000h開始有100個數(shù)據(jù),現(xiàn)要將它們移到從2030h開始的區(qū)域,試編寫有關程序。解:參考程序如下(1):mov dptr,#2000hmov a,#63hmov r0,#100add a,dplmov

10、dpl,aloop: movx a,dptr /*取出最后一個數(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開始有一個無符號數(shù)數(shù)據(jù)塊,長度存于len單元,求出數(shù)據(jù)塊中的最小元素,并將其存入mini單元。要求使用比較條件轉(zhuǎn)移指令cjne。解: 參考程序如下:len data 20hmini data 21hblock data 22hmov r0,lenmov r1,#blockmov a,r0 /*檢查數(shù)據(jù)長度是否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中存放的是一個十六進制數(shù),則將它轉(zhuǎn)換為相應的ascii碼,并將結(jié)果存入20h ram單元,若a中存放的不是十六進制數(shù),則將20h單元置為ffh,試編寫有關程序。解:參考程序入下: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單片機的p1口和微型打印機連接以輸出數(shù)據(jù)。數(shù)

13、據(jù)傳送采用中斷方式。現(xiàn)要把外部數(shù)據(jù)ram中從20h單元開始的100個數(shù)據(jù)送到打印機中去打印。試寫出有關的程序,包括主程序和中斷服務程序。解:本題采用中斷方式,用ack加到into作為中斷請求信號,用一個4輸入譯碼器進行部分地址譯碼,系統(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 $中斷服務程序: 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芯片擴展單片機的i/0口。8255的a口用做輸入,a口的每一位接一個開關,用b口作為輸出,輸出的每一位接一個顯示發(fā)光二極管?,F(xiàn)要求某個開關接1時,相應位上的發(fā)光二極管就亮(輸出為0),試編寫相應的程序。解:設8255的a口地址為70h, b口地址為71h, c口地址為72h, 控制寄存器地址為73h。8255的工作方式為: a口:方式0,輸入 b口:方式0,輸出 c口:無關由此可以確定8255的工作方式控制字為10010000

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論