單片機原理編程題_第1頁
單片機原理編程題_第2頁
單片機原理編程題_第3頁
單片機原理編程題_第4頁
單片機原理編程題_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上一 編程題 (每小題8分,共16分)1. 設(shè)在內(nèi)RAM 40H開始的存儲區(qū)有若干個字符和數(shù)字,已知最后一個為字符“$“(并且只有一個,試統(tǒng)計這些字符數(shù)字的個數(shù),結(jié)果存入30H單元中。參考程序:ORG 0000HSTART:MOV R1,#40H;R1作為地址指針CLR A;A作為計數(shù)器LOOP:CJNE R1,#24H,NEXT;與“$”號比較,不等轉(zhuǎn)移SJMP NEXT1;找到“$“結(jié)束循環(huán)NEXT:INC A;計數(shù)器加1INC R1;指針加1SJMP LOOP;循環(huán)NEXT1:INC A;再加入”$”這個字符MOV 30H,A;存結(jié)果END2. 試編一程序,分別統(tǒng)

2、計在內(nèi)部RAM的30H50H單元的數(shù)據(jù)區(qū)中奇數(shù)和偶數(shù)的個數(shù),并將奇數(shù)和偶數(shù)的個數(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個LED發(fā)光二極管,由INT0接一消抖按鍵開關(guān),開始P1.0的LED亮,以后由INT0按鍵每中斷一次,下一個LED亮,順序下移,且每次只一個LED亮,周而復(fù)始。請

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個有符號數(shù),連續(xù)存放在以2000H為首地址的存儲區(qū)中,試編程統(tǒng)計其中正數(shù)、負(fù)數(shù)、零的個數(shù)并分別存放在30H、31H、32H單元中。MOV 30H,#0MOV 31H,#0MOV 32H,#0MOV DPTR ,#2000HMOV R1,#100L4:MOVX A,DPTRINC DP

4、TRCJNE A,#0,L1INC 32HSJMP L2L2:JC L3INC 30HSJMP L2L3:INC 31HL2:DJNZ R1,L4SJMP $5.編程將內(nèi)部數(shù)據(jù)存儲器20H24H單元壓縮的BCD碼轉(zhuǎn)換成ASC存放在于25H開始的單元。參考程序:注意壓縮的BCD碼為一個字節(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

5、A,R0ANL A,#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ù)存儲器1000H1050H中的內(nèi)容傳送到片內(nèi)數(shù)據(jù)存儲器 20H70H中。2ORG 0200HMOV A

6、,R0ANL A,#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碼程序功能:利用查表的方法實現(xiàn)RO中的十六進(jìn)制數(shù)轉(zhuǎn)換為ASC碼對每小題程序中劃線的指令含義(或指令作用)進(jìn)行解釋,并說明程序的作用。*1. 程序解釋 ORG 100HMOV A,R0 ;R0的內(nèi)容送A ANL A,#0FHMOV R1,A MOV A,R0SWAP A ;A的內(nèi)容高低4位交換 ANL A,#0FHM

7、OV R2,A SJMP $ ;等待 END該程序的作用是:將原R0中數(shù)據(jù)按照高低4位分成兩個字節(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 30HVAR

8、DATA 30HFUNCDATA 31HMOV A,VAR ;30單元的內(nèi)容送AJZ DONE ;A為零轉(zhuǎn)移JNB ACC.7,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 ;絕對轉(zhuǎn)移地址表起始地址送DPTR JMP A+DPTR ;(PC)

9、=(A)+(DPTR) BRTAB:AJMPROUT000AJMPROUT001AJMPROUT002AJMPROUT127END該程序的作用是:本程序完成128分支轉(zhuǎn)移操作,根據(jù)R3中的數(shù)值轉(zhuǎn)移到相應(yīng)的128個分支程序中。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該程序的作用是:向單片機內(nèi)部RAM的22H,23H,24H單元分別送數(shù)據(jù)00,01,02。 6. 程序解釋 ORG 003

10、0H MOV A, 20H MOV B, 21H DIV AB ; A除以B MOV 31H, A ; 商送30H單元 IMOV 31H,B ; 余數(shù)送31H單元SJMP$END該程序的作用是:將20H單元中有一個二進(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:

11、JNC NEXT1INC GRADB ;21H單元的內(nèi)容加1 SJMP NEXTNEXT1: INC GRADANEXT: INC DPTRDJNZ R2,LOOP ;(R2)-1R2 不為零,轉(zhuǎn)移 SJMP $END該程序的作用是 本程序完成對100個數(shù)(如100個學(xué)生成績)的過濾統(tǒng)計,成績在60以上的學(xué)生統(tǒng)計到GRADA,<60的學(xué)生統(tǒng)計到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:D

12、JNZ R2,LOOP ;LEN個單元未加完,繼續(xù) MOV SUM,A SJMP $ END該程序的作用是:完成BLOCK單元開始的LEN單元中數(shù)據(jù)個數(shù)的累加,累加結(jié)果保存到SUM單元中。 9. 程序解釋XXDATA 40HYY DATA41HMOVA,XX JZ DONE MOVR0,#0FFH ;提示:0FFH表示-1 JNB ACC.7,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放

13、-1,等于0放0。 10. 程序解釋ONEDATA 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的兩個單元中的數(shù)的比較,大數(shù)存入MAX單元中。 11. 程序解釋BLOCK1 DATA 20HBLOCK2 DATA 40H MOV R0,#BLOCK1 MOV R1,#BLOCK2 MOV R2,#03 CLR CLOOP: MOV A

14、,R0 ;被加數(shù)送A ADDC A,R1 ;帶進(jìn)位加法 MOV R0,A ;和送(R0) INC R0 INC R1 DJNZ R2,LOOP1 SJMP $ END該程序的作用是:內(nèi)部RAM中BLOCK1(20H)開始的三字節(jié)數(shù)與BLOCK2(40H)開始的兩個三字節(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)向不

15、同的子程序,R2=0轉(zhuǎn)PRG0,R2=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個數(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,NE

16、XT1 ;(A)與(MAX)比較,不等去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個數(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,

17、 7, 8, 9 DB A, B, C, 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指向的兩個字節(jié)的低4位和并為一個字節(jié),保存到原R0指向的存儲單元。 17. 程序解釋START:MOV DPTR,#DT

18、ATABMOVA,R4 ;(R4)A 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)容(元素序號)在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,#

19、01HMOVC A,A+PC ;查平方表 RETSQRTAB:DB 0,1,4,9,16 ;平方表 DB 25,36,49,64,81 END該程序的作用是:將R0和R1中的兩個個位數(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:

20、MOV A,R1CLR CRLC A ;乘2 ADD A,31H ;(A)+(31H)結(jié)果送A MOV 31H,A INC R1 DJNZ R0,CLOPRETEND該程序的作用是: 將110十個數(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實現(xiàn)雙循環(huán)延時子程序22. 程序解釋MATH DATA 1000H PASS DATA 20HNOPASS DATA 21H MOV

21、 PASS,#00HMOV NOPASS,#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)個數(shù)的過濾統(tǒng)計,在60及以上的統(tǒng)計到PASS,<60的到NOPASS。 23. 程序解釋CLEAN:MOV

22、 DPTR,#1000H ; 設(shè)置數(shù)據(jù)區(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 ;指向下一個數(shù)據(jù)單元 DJNZ R2,DLOOP END該程序的作

23、用是:將2000H20FFH的數(shù)據(jù)塊傳送到3000H30FFH單元 25. 程序解釋LOK1:MOV21H,0MOVR2,#08H;置統(tǒng)計次數(shù)MOVA,20HLOOP:RLC A;A的內(nèi)容帶進(jìn)位作循環(huán)JNCLP1INC 21HLP1:DJNZR2,LOOP;次數(shù)未完繼續(xù)RET該程序的作用是:求20H單元數(shù)據(jù)中”1”的個數(shù),并將統(tǒng)計結(jié)果存入21H。 26. 程序解釋SUM DATA31HBLOCK DATA33H CLR ACLRCMOV SUM,AMOVSUM+1,AMOVR2,#10MOVR1,#BLOCK ;33H送R1LOOP:MOV A,SUMADD A,R1 ;(A)+(R1)AMO

24、V SUM,AMOV A,SUM+1ADDCA,0 ;加進(jìn)位位到高字節(jié)MOV SUM+1,AINC R1DJNZ R2,LOOPSJMP $END該程序的作用是:完成BLOCK開始的10個字節(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:MO

25、VA,R2ADDA,R2MOVR3,AADDA,#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,A

26、SLP1: INC R0DJNZ DATLEN,SLOP RET END該程序的作用是:將30H開始的DATLEN個數(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單元,大于等于零時送1,小于零時送零。 31. 程序解釋ORG100HMOVA,R0CJ

27、NEA,#3AH,NEXT1;(A)與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 ACC.0,LP1 ;判奇偶,奇數(shù),轉(zhuǎn)判下一個MOVXDPTR,AINC DPTRLP1: INC R0CJNE R0,#30H

28、,CLOP ;判循環(huán),未完繼續(xù) RET該程序的作用是: 完成對202FH單元中的數(shù)據(jù)判斷,如果數(shù)據(jù)為偶數(shù),將被寫入外部RAM中8000H開始的存儲單元。五、綜合設(shè)計題()1、設(shè)計一串行通信接收程序,將接收的16個數(shù)據(jù)存入片內(nèi)50H5FH中,串行口為方式1,波特率為1200bps,SMOD=0,fosc6MHz。參考答案T1工作方式2:,x243f3hMOVTMOD,#BMOVSCON,#BMOVPCON,#00HMOVTH1,#0F3HMOVTL1,#0F3HCLRESMOVR7,#16MOVR0,#50HSETBTR1WAIT:JNBRI,WAITCLRRIMOVR0,SBUFINCR0DJ

29、NZR7,WAIT2.試編程要求用T1定時器控制P1.7引腳輸出周期為40ms、占空比為50的矩形脈沖。要求主程序入口地址0050H及中斷服務(wù)子程序入口地址2000H。fosc=6MHz(15)方式1:(216x)×220000,xdbf0hORG000HLJMPMAINORG001BHLJMPT1_INTORG0050HMAIN:MOVTMOD,#BMOVTH1,#0D8HMOVTL1,#0F0HSETBEASETBET1SETBTR1SJMP$ORG2000HT1_INT:CPLP1.7MOVTH1,#0D8HMOVTL1,#0F0HRETI3、試編制程序,使T0每計滿500個外

30、部輸入脈沖后,由T1定時,在P1.0輸出一個脈寬10ms的正脈沖(假設(shè)在10ms內(nèi)外部輸入脈沖少于500個),fosc12MHz。(15)計算過程如下:(216-x1)*1us=10000us x1=b8f0h216-x0=500us x0=fe0chorg000hljmpmainorg00bhljmpt0_intorg01bhljmpt1_intorg100hmain:movsp,#60hmovtmod,#bmovie,#bmovth0,0fehmovtl0,0chclrp1.0setbtr0sjmp$t0_int:movth0,0fehmovtl0,0chmovth1,#0b8hmovtl

31、1,#0f0hsetbp1.0setbtr1retit1_int:clrp1.0clrtr1reti4.如下圖示,甲乙兩機進(jìn)行通信,要求甲機能讀取8個按鍵的狀態(tài)(0或1)并將讀到的狀態(tài)發(fā)送給乙機,乙機接收到后將數(shù)據(jù)通過8個發(fā)光二極管顯示,要求編寫甲乙兩機的通信程序。(20)T1工作在方式2:波特率1200T1初值:甲機:MAIN:MOVTMOD,#BMOVSCON,#BMOVPCON,#00HMOVTH1,#0F3HMOVTL1,#0F3HCLRESSETBTR1MOVP1,#0FFHLOOP:MOVA,P1MOVSBUF,AJNBTI,$CLRTISJMPLOOP乙機:ORG000HLJMP

32、MAINORG0023HLJMPI_ESORG050HMAIN:MOVTMOD,#BMOVSCON,#BMOVPCON,#00HMOVTH1,#0F3HMOVTL1,#0F3HCLRESSETBTR1SJMP$I_ES:MOVA,SBUFCLRRIMOVP1,ARETI5.使用定時/計數(shù)器0以工作方式2實現(xiàn)定時,在P1.0輸出周期為200s的連續(xù)方波。已知晶振頻率fosc=6MH。求計數(shù)初值,方式控制字,編制相應(yīng)程序.(中斷方式)TMOD格式:解:(2分)計數(shù)初值X=256-50=206=CEH(2分)TMOD=02H(6分)主程序:MOVTMOD#02HMOVTH0,#0CEHMOVTL0,

33、#0CEHSETBEASETBET0LOOP:SETBTR0HERE:S JMP$中斷服務(wù)程序:CPLP1.0RETI6、試編寫程序,查找在內(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ù)存儲器中的4000H40FFH單元全部置“1”。ORG 0000HMAIN: MOV A,#0FFH ;送預(yù)置數(shù)給AMOV R0,

34、#0FFH ;設(shè)置循環(huán)次數(shù)MOV DPTR,#4000H ;設(shè)置數(shù)據(jù)指針的初值LOOP: MOVX DPTR,A ;當(dāng)前單元清零INC DPTR ;指向下一個單元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 51H,#01H

35、EXIT: RET9、編寫一段程序,功能要求為:當(dāng)P1.0引腳的電平正跳變時,對P1.1的輸入脈沖進(jìn)行計數(shù);當(dāng)P1.2引腳的電平負(fù)跳變時,停止計數(shù),并將計數(shù)值寫入R0、R1(高位存R1,低位存R0)。(15分)答:將P1.1的輸入脈沖接入T0,即使用T0計數(shù)器完成對P1.1口的脈沖計數(shù)。編寫程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMAIN: JNB P1.0,MAINMOV TMOD,#05H ;定時器/計數(shù)器T0為計數(shù)方式1SETB TR0 ;啟動T0,開始計數(shù)SETB ET0 ;允許T0中斷SETB EA ;CPU開中斷WAIT: JB P1.2,

36、WAITCLR EACLR TR0MOV R1,TH0MOV R0,TL0AJMP $IT0P: INC R2 ;在電平負(fù)跳變前,如果計數(shù)器溢出,則進(jìn)位存入R2RETI11. 編程將片內(nèi)RAM20H2FH 單元開始的16個數(shù)傳送到片外RAM 3000H300FH 開始的單元中。(12分)MOV R0,#20HMOV DPTR,#3000HMOV R7,#10H (6分)LOOP: MOV A,R0MOVX DPTR,AINC R0INC DPTRDJNZ R7,LOOPNOPEND (6分)12.將存放在單片機片內(nèi)數(shù)據(jù)存儲器30H,31H,32H三個單元中不同的數(shù)據(jù)按從小到大的順序排序,并將結(jié)

37、果存放在片內(nèi)RAM的30H32H中。(10分)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、使用定時器中斷方式編程實現(xiàn)從P1.0引腳上輸出一個周期

38、為1s的方波。(系統(tǒng)時鐘為6MHz)解:使用定時器T0產(chǎn)生50ms的定時,然后在計數(shù)10次,從而500ms的定時。 (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 P1.0LOOP: MOV TH0,#9EHMOV TL0,#58HSETB TR0RETI (10分)14.已知一MCS51單

39、片機系統(tǒng)的片內(nèi)RAM 20H單元存放了一個8位無符號數(shù)7AH,片外擴展RAM的8000H存放了一個8位無符號數(shù)86H,試編程完成以上兩個單元中的無符號數(shù)相加,并將和值送往片外RAM的01H、00H單元中,同時將所編寫程序運行完成后的數(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 ;計算和值的高位ADDC A,#00H MOVXR0,A ;高位送片外01H單元RET 編程要考慮將進(jìn)位位的值作為結(jié)果的一部分取出來。采用其他編程方式也可以,但結(jié)果是不會改變的,和值100H 六、簡答題1請將片外RAM 20H25H單元清零MoV R0,#20H MOV R7,#06H CLR A LOOP:MOVX R0,A INC R0 DJNZ R7,LOOP 2請將ROM 3000

溫馨提示

  • 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

提交評論