單片機(jī)原理編程題_第1頁(yè)
單片機(jī)原理編程題_第2頁(yè)
單片機(jī)原理編程題_第3頁(yè)
單片機(jī)原理編程題_第4頁(yè)
已閱讀5頁(yè),還剩25頁(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、單片機(jī)原理編程題一 編程題 (每小題8分,共16分)1. 設(shè)在內(nèi)ram 40h開始的存儲(chǔ)區(qū)有若干個(gè)字符和數(shù)字,已知最后一個(gè)為字符“$“(并且只有一個(gè),試統(tǒng)計(jì)這些字符數(shù)字的個(gè)數(shù),結(jié)果存入30h單元中。參考程序:org 0000hstart:mov r1,#40h;r1作為地址指針clr a;a作為計(jì)數(shù)器loop:cjne r1,#24h,next;與“$”號(hào)比較,不等轉(zhuǎn)移sjmp next1;找到“$“結(jié)束循環(huán)next:inc a;計(jì)數(shù)器加1inc r1;指針加1sjmp loop;循環(huán)next1:inc a;再加入”$”這個(gè)字符mov 30h,a;存結(jié)果end2. 試編一程序,分別統(tǒng)計(jì)在內(nèi)部r

2、am的30h50h單元的數(shù)據(jù)區(qū)中奇數(shù)和偶數(shù)的個(gè)數(shù),并將奇數(shù)和偶數(shù)的個(gè)數(shù)分別存放在51h和52h單元中。參考程序:org 0000hmov 51h ,#0hmov 52# ,#0hmov r1 ,#30hmov r0 ,#20hmov a,r1inc r1anl a , #01hjz loop1inc 51hsjmp loop2loop1:inc 52hloop2:djnz r0 , loop3ret3用8xx51的p1口接8個(gè)led發(fā)光二極管,由int0接一消抖按鍵開關(guān),開始的led亮,以后由int0按鍵每中斷一次,下一個(gè)led亮,順序下移,且每次只一個(gè)led亮,周而復(fù)始。請(qǐng)編制程序。參考程序

3、:org 0000h ajmp mainorg 0003hrl a ;中斷服務(wù)mov p1,aretimain:mov a,#0ffhmov p1,a ;第一燈亮setb easetb ex0 ;允許int0外部中斷setb it0 ;中斷觸發(fā)方式為下降沿觸發(fā)sjmp $ ;等待中斷4.設(shè)有100個(gè)有符號(hào)數(shù),連續(xù)存放在以2000h為首地址的存儲(chǔ)區(qū)中,試編程統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)、零的個(gè)數(shù)并分別存放在30h、31h、32h單元中。mov 30h,#0mov 31h,#0mov 32h,#0mov dptr ,#2000hmov r1,#100l4:movx a,dptrinc dptrcjne a,

4、#0,l1inc 32hsjmp l2l2:jc l3inc 30hsjmp l2l3:inc 31hl2:djnz r1,l4sjmp $5.編程將內(nèi)部數(shù)據(jù)存儲(chǔ)器20h24h單元壓縮的bcd碼轉(zhuǎn)換成asc存放在于25h開始的單元。參考程序:注意壓縮的bcd碼為一個(gè)字節(jié)占兩位bcd碼。org 0000hmov r7,#05h ;r7為轉(zhuǎn)換字節(jié)數(shù)mov r0,#20h ;r0為源操作數(shù)地址mov r1,#25h ;r1為目的操作數(shù)地址ne:mov a,r0anl a,#0fh ;先取低位bcd碼add a,#30h ;將bcd碼轉(zhuǎn)換成asc碼mov r1,ainc r1mov a,r0anl a

5、,#0f0h ;取高位bcd碼swap a ;半字節(jié)交換add a,#30h ;將高位bcd碼轉(zhuǎn)換成asc碼mov r1,ainc r0 inc r1djnz r7,nesjmp $end編程題,另外加上第4章課件上的例子。三、程序解釋(每小題5分,共10分)1org 0200hmov dptr,#1000h mov r0,#20h loop:movx a,dptrmov r0,ainc dptrinc r0cjne r0,#71h,loop sjmp $程序功能:把片外數(shù)據(jù)存儲(chǔ)器1000h1050h中的內(nèi)容傳送到片內(nèi)數(shù)據(jù)存儲(chǔ)器 20h70h中。2org 0200hmov a,r0anl a,

6、#0fhmov dptr,#tabmovc a,a+dptrmov r0,asjmp $tab:db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h; 09的asc碼db 41h,42h,43h,44h,45h,46h ;af的asc碼程序功能:利用查表的方法實(shí)現(xiàn)ro中的十六進(jìn)制數(shù)轉(zhuǎn)換為asc碼對(duì)每小題程序中劃線的指令含義(或指令作用)進(jìn)行解釋,并說(shuō)明程序的作用。*1. 程序解釋 org 100hmov a,r0 ;r0的內(nèi)容送a anl a,#0fhmov r1,a mov a,r0swap a ;a的內(nèi)容高低4位交換 anl a,#0fhmov r2,a s

7、jmp $ ;等待 end該程序的作用是:將原r0中數(shù)據(jù)按照高低4位分成兩個(gè)字節(jié),低位字節(jié)保存在r1中,高位字節(jié)保存到r2中。2. 程序解釋 org 30hmov r0,#data1 ; data1送r0 mov r1,#data2movr2,#2clr cloop: mova,r0subb a,r1 ;(a)-(c)-(r1)a mov r0,ainc r0inc r1djnzr2,loop ;(r2)-1不等于零,跳loop處sjmp $end該程序的作用是:將data1中的雙字節(jié)數(shù)據(jù)減去data2中的雙字節(jié)數(shù)據(jù),結(jié)果保存到data1中3. 程序解釋 org 30hvardata 30hf

8、uncdata 31hmov a,var ;30單元的內(nèi)容送ajz done ;a為零轉(zhuǎn)移jnb ,posi ;a的最高位為0(正數(shù))轉(zhuǎn)移mov a,#0ffh ;提示:0ffh表示-1sjmp doneposi:mov a, #01hdone:mov func,asjmp $end該程序的作用是:判斷30h單元中的內(nèi)容,結(jié)果放在31h單元中。大于0放1,小于0放-1,等于零放0。 4. 程序解釋 org 100hmov a, r3 rl a ;a左循環(huán)一位(即乘2)mov dptr,#brtab ;絕對(duì)轉(zhuǎn)移地址表起始地址送dptr jmp a+dptr ;(pc)=(a)+(dptr) br

9、tab:ajmprout000ajmprout001ajmprout002ajmprout127end該程序的作用是:本程序完成128分支轉(zhuǎn)移操作,根據(jù)r3中的數(shù)值轉(zhuǎn)移到相應(yīng)的128個(gè)分支程序中。5. 程序解釋 org 0030h mov r0, #22h ; 立即數(shù)22h送r0 mov r0, #00h inc r0 ; r0中的內(nèi)容加1 mov r0, #01h inc r0mov r0, #02h ; 02h送24h單元 sjmp $end該程序的作用是:向單片機(jī)內(nèi)部ram的22h,23h,24h單元分別送數(shù)據(jù)00,01,02。 6. 程序解釋 org 0030h mov a, 20h

10、mov b, 21h div ab ; a除以b mov 31h, a ; 商送30h單元 imov 31h,b ; 余數(shù)送31h單元sjmp$end該程序的作用是:將20h單元中有一個(gè)二進(jìn)制數(shù)除以21h單元中二進(jìn)制數(shù),商保存到30h單元,余數(shù)保存到31h。7. 程序解釋chengjidata 1000hgradadata20hgradb data 21h movgrada,#00hmov gradb,#00h movr2,#100 movdptr,#chengji ;1000h送dptr loop:movxa,dptrcjnea,#60,loop1 loop1: jnc next1inc g

11、radb ;21h單元的內(nèi)容加1 sjmp nextnext1: inc gradanext: inc dptrdjnz r2,loop ;(r2)-1r2 不為零,轉(zhuǎn)移 sjmp $end該程序的作用是 本程序完成對(duì)100個(gè)數(shù)(如100個(gè)學(xué)生成績(jī))的過(guò)濾統(tǒng)計(jì),成績(jī)?cè)?0以上的學(xué)生統(tǒng)計(jì)到grada,<60的學(xué)生統(tǒng)計(jì)到gradb。8. 程序解釋len data 20hsum data 21h block data 22hclra ;a清0 mov r2,len mov r1,#block loop:adda,r1 ;(a)+(r1)a inc r1check:djnz r2,loop ;l

12、en個(gè)單元未加完,繼續(xù) mov sum,a sjmp $ end該程序的作用是:完成block單元開始的len單元中數(shù)據(jù)個(gè)數(shù)的累加,累加結(jié)果保存到sum單元中。 9. 程序解釋xxdata 40hyy data41hmova,xx jz done movr0,#0ffh ;提示:0ffh表示-1 jnb ,neg ;若a< 0,則轉(zhuǎn)向negmovr0,#01h ; 01送r0 neg:mov a, r0done:mov yy,a ;(a)送41h單元 sjmp$ end該程序的作用是:判斷40h單元中的內(nèi)容,結(jié)果放在41h單元中。大于0放1,小于0放-1,等于0放0。 10. 程序解釋o

13、nedata 30htwo data 31h;two地址定義為31hmaxdata 32hclrc;c清零mov a,onesubb a,two;(a)-(31h)結(jié)果送ajnc xmaxymax:mova,twosjmpdonexmax:mova,onedone:movmax,a該程序的作用是:本程序完成one和two的兩個(gè)單元中的數(shù)的比較,大數(shù)存入max單元中。 11. 程序解釋block1 data 20hblock2 data 40h mov r0,#block1 mov r1,#block2 mov r2,#03 clr cloop: mov a,r0 ;被加數(shù)送a addc a,r

14、1 ;帶進(jìn)位加法 mov r0,a ;和送(r0) inc r0 inc r1 djnz r2,loop1 sjmp $ end該程序的作用是:內(nèi)部ram中block1(20h)開始的三字節(jié)數(shù)與block2(40h)開始的兩個(gè)三字節(jié)數(shù)相加,和數(shù)存放到block1開始的單元。 12. 程序解釋shift:mov dptr,#tabjmov a,r2rl a ;a乘2add a,r2jmp a+dptr;跳轉(zhuǎn)到(a)+(dptr)pctabj:ljmp prg0;跳轉(zhuǎn)到prg0 ljmp prg1ljmp prgn該程序的作用是:根據(jù)內(nèi)部ram中r2數(shù)據(jù)轉(zhuǎn)向不同的子程序,r2=0轉(zhuǎn)prg0,r2=

15、1轉(zhuǎn)prg1, r2=n轉(zhuǎn)prgn 13. 程序解釋start:clr amov r2,#10 mov r1,#21h ;21h送r1 next: add a,r1 ;(a)+(r1)a inc r1 djnz r2,next ;未加完,跳轉(zhuǎn) mov22h,a sjmp $ end該程序的作用是:完成21h單元開始的10個(gè)數(shù)據(jù)塊的累加,結(jié)果保存到22h單元。14. 程序解釋len data 20hmax data 21h addr data 30h mov max,#00h mov r0,#addr loop: mov a,r0 cjne a,max,next1 ;(a)與(max)比較,不等

16、去nextnext1: jc next ;c=1 去next mov max,anext: inc r0 ;r0內(nèi)容加1 djnz len,loop sjmp $ end該程序的作用是:內(nèi)部ram中addr(30h)開始的x個(gè)數(shù)據(jù)的比較,將最大的數(shù)字送max單元。x由len(20h)單元給出。 15. 程序解釋 mov a,r0anl a,#0fh ;0fh與a相與,結(jié)果送a mov dptr,#asctabmovc a,a+dptr ;查表 mov r0,a ; 查表結(jié)果存入r0 sjmp $asctab:db 0, 1, 2, 3, 4 db5, 6, 7, 8, 9 db a, b, c

17、, d, e , f end該程序的作用是:將r0中低4位的0f的十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換成asctab中的編碼存放到r0中。16. 程序解釋 org 100hmerg:movx a,r0 ; 讀片外ram第一字節(jié)anl a,#0fhswap a ;高低4位相互交換 mov b,a inc r0movx a,r0 anl a,#0fhorl a,b ;a或b, 結(jié)果送a dec r0 movx r0,a sjmp $ end該程序的作用是:將r0指向的兩個(gè)字節(jié)的低4位和并為一個(gè)字節(jié),保存到原r0指向的存儲(chǔ)單元。 17. 程序解釋start:mov dptr,#dtatabmova,r4 ;(r4)a

18、add a,dpl ;(dpl)+(a)a movdpl,aclr a ;清aaddca,dphmovdph,a clr a movca,a+dptr movr5,a retdtatab: db ;元素表格,高字節(jié)在前 db end該程序的作用是:根據(jù)r4中的內(nèi)容(元素序號(hào))在dtatab表格中查表,將查表得到的數(shù)據(jù)存入r5中。18. 程序解釋start:mov a, r0acall sqr ;調(diào)用子程sqr mov r2,amov a, r1 acall sqradd a,r2 ;(r2)+(a)a mov r2,a sjmp $sqr: add a,#01hmovc a,a+pc ;查平方

19、表 retsqrtab:db 0,1,4,9,16 ;平方表 db 25,36,49,64,81 end該程序的作用是:將r0和r1中的兩個(gè)個(gè)位數(shù)進(jìn)行平方元算,然后相加,和存入r2中。19. 程序解釋mov r2,#0ahmov r0,#50hclr aloop: mov r0,a ;(a)(r0) inc r0djnz r2,loop ;(r2)-1不等于0,跳轉(zhuǎn) ret ;子程序返回 end 該程序的作用是: 將50h59h單元置0 20. 程序解釋cont:mov r0, #10 ;10送r0 mov 31h,#00hmov r1,#01hclop:mov a,r1clr crlc a

20、;乘2 add a,31h ;(a)+(31h)結(jié)果送a mov 31h,a inc r1 djnz r0,clopretend該程序的作用是: 將110十個(gè)數(shù)乘2后再累加,結(jié)果送31h單元。 21. 程序解釋dlay:mov r7,#02h ;02h送r7 dl:movr6,#0ffhdl1:djnz r6,dl1 ;(r6)-1不為零轉(zhuǎn)移。djnz r7,dl retend ;程序結(jié)束偽指令 該程序的作用是:利用r6,r7實(shí)現(xiàn)雙循環(huán)延時(shí)子程序22. 程序解釋math data 1000h pass data 20hnopass data 21h mov pass,#00hmov nopas

21、s,#00h mov r2,#0c8hmov dptr,#mathloop:movx a, dptr ;片外單元(dptr)acjne a,#60,loop1 ;(a)不等于60轉(zhuǎn)移 loop1: jnc next1next: inc nopass sjmp next2next1: inc pass ;pass單元內(nèi)容加1 next2: inc dptr djnz r2,loop ret end該程序的作用是:完成1000h開始的200(c8h)個(gè)數(shù)的過(guò)濾統(tǒng)計(jì),在60及以上的統(tǒng)計(jì)到pass,<60的到nopass。 23. 程序解釋clean:mov dptr,#1000h ; 設(shè)置數(shù)據(jù)

22、區(qū)首地址 movr2,#51hclr acloop:movx dptr, a ; 0 (dptr)inc dptr djnzr2,cloop ; r2-1不為零轉(zhuǎn)移 ret end該程序的作用是:將外部ram1000h1050h單元的內(nèi)容清零。24. 程序解釋dmov:mov dptr,#2000hmov r2,#00hdloop:movx a,dptr ;設(shè)置源數(shù)據(jù)區(qū)首地址mov dph,#30h ;置目的數(shù)據(jù)區(qū)高8位地址 movx dptr,a mov dph,#20hinc dptr ;指向下一個(gè)數(shù)據(jù)單元 djnz r2,dloop end該程序的作用是:將2000h20ffh的數(shù)據(jù)塊傳

23、送到3000h30ffh單元 25. 程序解釋lok1:mov21h,0movr2,#08h;置統(tǒng)計(jì)次數(shù)mova,20hloop:rlc a;a的內(nèi)容帶進(jìn)位作循環(huán)jnclp1inc 21hlp1:djnzr2,loop;次數(shù)未完繼續(xù)ret該程序的作用是:求20h單元數(shù)據(jù)中”1”的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果存入21h。 26. 程序解釋sum data31hblock data33h clr aclrcmov sum,amovsum+1,amovr2,#10movr1,#block ;33h送r1loop:mov a,sumadd a,r1 ;(a)+(r1)amov sum,amov a,sum+1a

24、ddca,0 ;加進(jìn)位位到高字節(jié)mov sum+1,ainc r1djnz r2,loopsjmp $end該程序的作用是:完成block開始的10個(gè)字節(jié)數(shù)據(jù)的累加,結(jié)果(雙字節(jié))保存到(sum+1)(sum)。27. 程序解釋org 0000hsjmp main;跳轉(zhuǎn)到mainorg 0003h. org 0030hmain:;主程序subint0: reti;int0中斷返回sub_t0: sub_int1: sub_t1: sub_uart: 該程序的作用是:8031/8051系統(tǒng)程序框架,包括主程序及全部中斷服務(wù)程序框架。28. 程序解釋tb:mova,r2adda,r2movr3,a

25、adda,#6movca,a+pc;查第一字節(jié)xcha,r3;交換a,r3內(nèi)容,保存在r3adda,#3movca,a+pcmovr4,arettab:dw1520,3721,dw該程序的作用是:根據(jù)r2內(nèi)容為索引,在tab檢索數(shù)據(jù),檢索結(jié)果存放到r3r4中。(tab中內(nèi)容為雙字節(jié)數(shù)據(jù)) 29. 程序解釋datlen data 21hseach:mov r0,#30h ;30h送r0 mov 20h,#0ffhslop: mov a,r0cjnea,20h,next ;a與20h單元內(nèi)容比較 next: jncslp1 ;(a)大,跳轉(zhuǎn) mov 20h,aslp1: inc r0djnz da

26、tlen,slop ret end該程序的作用是:將30h開始的datlen個(gè)數(shù)據(jù)中最小的數(shù)搜出,保存到20h單元。30. 程序解釋 org 100hdatax data 10hdatay data 11hclr c ;清c mov a,dataxrlc a ;a左循環(huán) jnc posiclr a sjmp doneposi: mova,#01hdone:mov datay,a ;(a)送datay sjmp $ end該程序的作用是: 判斷10h單元的內(nèi)容,結(jié)果送11單元,大于等于零時(shí)送1,小于零時(shí)送零。 31. 程序解釋org100hmova,r0cjnea,#3ah,next1;(a)與

27、3ah比較jncerrcjne a,#30hjcerr;有借位,跳轉(zhuǎn)clrcsubba,#30h;轉(zhuǎn)換ascii碼為十進(jìn)制數(shù)字sjmpdoneerr:mova,#0ffhdone:movr0,asjmp$end該程序的作用是:完成將r0中十進(jìn)制數(shù)字09的ascii碼值轉(zhuǎn)換為十進(jìn)制值,結(jié)果存放到r0。32. 程序解釋conp:movdptr,#8000h ;置外ram數(shù)據(jù)區(qū)首地址movr0,#20hclop: mova,r0 jb ,lp1 ;判奇偶,奇數(shù),轉(zhuǎn)判下一個(gè)movxdptr,ainc dptrlp1: inc r0cjne r0,#30h,clop ;判循環(huán),未完繼續(xù) ret該程序的作

28、用是: 完成對(duì)202fh單元中的數(shù)據(jù)判斷,如果數(shù)據(jù)為偶數(shù),將被寫入外部ram中8000h開始的存儲(chǔ)單元。五、綜合設(shè)計(jì)題()1、設(shè)計(jì)一串行通信接收程序,將接收的16個(gè)數(shù)據(jù)存入片內(nèi)50h5fh中,串行口為方式1,波特率為1200bps,smod=0,fosc6mhz。參考答案t1工作方式2:,x243f3hmovtmod,#00100000bmovscon,#01010000bmovpcon,#00hmovth1,#0f3hmovtl1,#0f3hclresmovr7,#16movr0,#50hsetbtr1wait:jnbri,waitclrrimovr0,sbufincr0djnzr7,wai

29、t2.試編程要求用t1定時(shí)器控制引腳輸出周期為40ms、占空比為50的矩形脈沖。要求主程序入口地址0050h及中斷服務(wù)子程序入口地址2000h。fosc=6mhz(15)方式1:(216x)×220000,xdbf0horg000hljmpmainorg001bhljmpt1_intorg0050hmain:movtmod,#00010000bmovth1,#0d8hmovtl1,#0f0hsetbeasetbet1setbtr1sjmp$org2000ht1_int:cplmovth1,#0d8hmovtl1,#0f0hreti3、試編制程序,使t0每計(jì)滿500個(gè)外部輸入脈沖后,由

30、t1定時(shí),在輸出一個(gè)脈寬10ms的正脈沖(假設(shè)在10ms內(nèi)外部輸入脈沖少于500個(gè)),fosc12mhz。(15)計(jì)算過(guò)程如下:(216-x1)*1us=10000us x1=b8f0h216-x0=500us x0=fe0chorg000hljmpmainorg00bhljmpt0_intorg01bhljmpt1_intorg100hmain:movsp,#60hmovtmod,#00010101bmovie,#bmovth0,0fehmovtl0,0chclrsetbtr0sjmp$t0_int:movth0,0fehmovtl0,0chmovth1,#0b8hmovtl1,#0f0hs

31、etbsetbtr1retit1_int:clrclrtr1reti4.如下圖示,甲乙兩機(jī)進(jìn)行通信,要求甲機(jī)能讀取8個(gè)按鍵的狀態(tài)(0或1)并將讀到的狀態(tài)發(fā)送給乙機(jī),乙機(jī)接收到后將數(shù)據(jù)通過(guò)8個(gè)發(fā)光二極管顯示,要求編寫甲乙兩機(jī)的通信程序。(20)t1工作在方式2:波特率1200t1初值:甲機(jī):main:movtmod,#00100000bmovscon,#01000000bmovpcon,#00hmovth1,#0f3hmovtl1,#0f3hclressetbtr1movp1,#0ffhloop:mova,p1movsbuf,ajnbti,$clrtisjmploop乙機(jī):org000hljmp

32、mainorg0023hljmpi_esorg050hmain:movtmod,#00100000bmovscon,#01010000bmovpcon,#00hmovth1,#0f3hmovtl1,#0f3hclressetbtr1sjmp$i_es:mova,sbufclrrimovp1,areti5.使用定時(shí)/計(jì)數(shù)器0以工作方式2實(shí)現(xiàn)定時(shí),在輸出周期為200s的連續(xù)方波。已知晶振頻率fosc=6mh。求計(jì)數(shù)初值,方式控制字,編制相應(yīng)程序.(中斷方式)tmod格式:解:(2分)計(jì)數(shù)初值x=256-50=206=ceh(2分)tmod=02h(6分)主程序:movtmod#02hmovth0,

33、#0cehmovtl0,#0cehsetbeasetbet0loop:setbtr0here:s jmp$中斷服務(wù)程序:cplreti6、試編寫程序,查找在內(nèi)部ram的30h60h單元中出現(xiàn)“0ffh”這一數(shù)據(jù)的次數(shù)。并將查找到的結(jié)果存入61h單元。答:start: mov 61h,#0mov r0,#30hmov r2,#30hloop: mov a,r0cjne a,#0ffh,nextinc 61hnext: inc r0djnz r2,loopret7、編寫程序,將外部數(shù)據(jù)存儲(chǔ)器中的4000h40ffh單元全部置“1”。org 0000hmain: mov a,#0ffh ;送預(yù)置數(shù)給

34、amov r0,#0ffh ;設(shè)置循環(huán)次數(shù)mov dptr,#4000h ;設(shè)置數(shù)據(jù)指針的初值loop: movx dptr,a ;當(dāng)前單元清零inc dptr ;指向下一個(gè)單元djnz r0,loop ;是否結(jié)束end8.、試編寫程序,查找在內(nèi)部ram的40h60h單元中是否有0ffh這一數(shù)據(jù)。若有,則將51h單元置為“00h”;若未找到,則將51h單元置為“01h”。(5分)start: mov r0,#40hmov r2,#20hloop: mov a,r0cjne a,#0ffh,nextmov 51h,#00hljmp exitnext: inc r0djnz r2,loopmov

35、51h,#01hexit: ret9、編寫一段程序,功能要求為:當(dāng)引腳的電平正跳變時(shí),對(duì)的輸入脈沖進(jìn)行計(jì)數(shù);當(dāng)引腳的電平負(fù)跳變時(shí),停止計(jì)數(shù),并將計(jì)數(shù)值寫入r0、r1(高位存r1,低位存r0)。(15分)答:將的輸入脈沖接入t0,即使用t0計(jì)數(shù)器完成對(duì)口的脈沖計(jì)數(shù)。編寫程序如下:org 0000hljmp mainorg 000bhljmp it0pmain: jnb ,mainmov tmod,#05h ;定時(shí)器/計(jì)數(shù)器t0為計(jì)數(shù)方式1setb tr0 ;啟動(dòng)t0,開始計(jì)數(shù)setb et0 ;允許t0中斷setb ea ;cpu開中斷wait: jb ,waitclr eaclr tr0mov

36、 r1,th0mov r0,tl0ajmp $it0p: inc r2 ;在電平負(fù)跳變前,如果計(jì)數(shù)器溢出,則進(jìn)位存入r2reti11. 編程將片內(nèi)ram20h2fh 單元開始的16個(gè)數(shù)傳送到片外ram 3000h300fh 開始的單元中。(12分)mov r0,#20hmov dptr,#3000hmov r7,#10h (6分)loop: mov a,r0movx dptr,ainc r0inc dptrdjnz r7,loopnopend (6分)12.將存放在單片機(jī)片內(nèi)數(shù)據(jù)存儲(chǔ)器30h,31h,32h三個(gè)單元中不同的數(shù)據(jù)按從小到大的順序排序,并將結(jié)果存放在片內(nèi)ram的30h32h中。(1

37、0分)mov sp,#52hmov a,30hclr c subb a,31hjc lp1mov a,31hxch a,30hmov 31h,a (3分)lp1: mov a,30hclr csubb a,32hjc lp2mov a,32hxch a,30hxch a,31hmov 32h,asjmp lp3 (3分)lp2: mov a,31hclr csubb a,32hjc lp3mov a,31hxch a,32hmov 31h,asjmp lp3lp3: nop (4分)sjmp $13、使用定時(shí)器中斷方式編程實(shí)現(xiàn)從引腳上輸出一個(gè)周期為1s的方波。(系統(tǒng)時(shí)鐘為6mhz)解:使用定時(shí)

38、器t0產(chǎn)生50ms的定時(shí),然后在計(jì)數(shù)10次,從而500ms的定時(shí)。 (5分)org 0000hajmp mainorg 000bhljmp tmr0_intorg 0030hmain: mov tmod,#01hmov th0,#9ehmov tl0,#58hmov r7,#10setb et0setb easetb tr0sjmp $tmr0_int: clr tr0djnz r7,loopmov r7,#10cpl loop: mov th0,#9ehmov tl0,#58hsetb tr0reti (10分)14.已知一mcs51單片機(jī)系統(tǒng)的片內(nèi)ram 20h單元存放了一個(gè)8位無(wú)符號(hào)數(shù)7

39、ah,片外擴(kuò)展ram的8000h存放了一個(gè)8位無(wú)符號(hào)數(shù)86h,試編程完成以上兩個(gè)單元中的無(wú)符號(hào)數(shù)相加,并將和值送往片外ram的01h、00h單元中,同時(shí)將所編寫程序運(yùn)行完成后的數(shù)據(jù)和狀態(tài)添入下表中給出的psw的有關(guān)位以及寄存器a、dptr和ram單元中。cy a dptr 片外01h 片外00h 片外8000h 參考答案cy a dptr 片外01h 片外00h 片外8000h 0 01h 8000h 0lh 00h 86h mov dptr,#8000h ;加數(shù)單元地址送dptr movx a,dptr ;取加數(shù)之一add a,20h ;兩數(shù)相加mov r0,#00h ;和值的低位送片外00h單元movx r0,a inc r0 clr a ;計(jì)算和值的高位addc a,#00h movxr0,a ;高位送片外01h單元ret 編程要考慮將進(jìn)位位的值作為結(jié)果的一部分取出來(lái)。采用其他編程方式也可以,但結(jié)果是不會(huì)改變的,和值100h 六、簡(jiǎn)答題1請(qǐng)將片外ram 20h25h單元清零mov r0,#20h mov r7,#06h clr a loop:movx r0,a inc r0 djnz r7,loop 2請(qǐng)將rom 3000h單元內(nèi)容送r7 mov dptr, #30

溫馨提示

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