單片機(jī)習(xí)題參考答案_第1頁
單片機(jī)習(xí)題參考答案_第2頁
單片機(jī)習(xí)題參考答案_第3頁
單片機(jī)習(xí)題參考答案_第4頁
單片機(jī)習(xí)題參考答案_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

鐵道社單片機(jī)習(xí)題集參考答案習(xí)題一一、選擇題1.十進(jìn)制121轉(zhuǎn)換為8位二進(jìn)制數(shù)是(A)。A.01111001BB.01110111BC.01101110BD.10001010B2.十進(jìn)制數(shù)112.375轉(zhuǎn)換成十六進(jìn)制數(shù)是(B)。A.70.5HB.70.6HC.71.5HD.71.6H3.十進(jìn)制254.28轉(zhuǎn)換為BCD碼是(D)。A.0011010100.101000B.010001010100.00110000C.1101010100.00101D.001001010100.001010004.11101111101.1B=(A)。A.77D.8HB.77C.8HC.77D.1HD.77C.1H5.ABC.DEH=(D)B。A.101010111100.11101111B.010101100111.10001001C.101111001101.11101111D.101010111100.110111106.數(shù)字符號(hào)0和9的ASCII碼十進(jìn)制表示為(C)。A.30、39B.30H、39HC.48、57D.48H、57H7.一個(gè)字節(jié)的十六進(jìn)制數(shù)最大相當(dāng)于十進(jìn)制數(shù)的(B)。A.256B.255C.254D.1008.將BCD碼0011011101010010轉(zhuǎn)換為十進(jìn)制數(shù),應(yīng)為(A)。A.3752B.1BA90C.3964D二、簡答題1.什么是單片機(jī)?答:把微型計(jì)算機(jī)的基本功能部件:中央處理器(CPU)、存儲(chǔ)器、輸入/輸出接口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)等多種資源集成在一個(gè)半導(dǎo)體芯片上,使得一塊集成電路芯片就能構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。這種集成電路芯片被稱為單片微型計(jì)算機(jī)(singlechipmicrocomputer),簡稱單片機(jī)。2.單片機(jī)主要應(yīng)用于哪些領(lǐng)域?答:(1)生產(chǎn)自動(dòng)化(2)實(shí)時(shí)測(cè)控(3)智能化產(chǎn)品(4)智能化儀表(5)信息通信技術(shù)(6)科學(xué)研究(7)國防現(xiàn)代化3.單片機(jī)應(yīng)用系統(tǒng)由哪幾部分組成?答:單片機(jī)應(yīng)用系統(tǒng)由單片機(jī)、外部存儲(chǔ)器、輸入通道、輸出通道等部分組成4.MCS-51系列中8031,8051,8751有什么區(qū)別?答:8031/8051/8751這3種芯片常稱為8051子系列,它們之間的區(qū)別僅在于片內(nèi)程序存儲(chǔ)器不同。8031片內(nèi)無程序存儲(chǔ)器,8051片內(nèi)有4KB的ROM,8751片內(nèi)有4KB的EPROM,其它結(jié)構(gòu)性能相同。其中8031易于開發(fā),價(jià)格低廉,應(yīng)用廣泛5.為什么單片機(jī)又稱為嵌入式微控制器?答:單片機(jī)在應(yīng)用時(shí)通常裝入到各種智能化產(chǎn)品之中,所以又稱嵌入式微控制器(EmbeddedMicroControllerUnitEMCU)。單片機(jī)應(yīng)用系統(tǒng)就是典型的嵌入式系統(tǒng)。嵌入式計(jì)算機(jī)系統(tǒng),是作為其他系統(tǒng)的組成部分使用的。由于通用計(jì)算機(jī)系統(tǒng)有限的可靠性、較高的價(jià)位及龐大的身軀,限制了其在嵌入式系統(tǒng)的廣泛應(yīng)用,尤其限制了以嵌入式計(jì)算機(jī)系統(tǒng)作為核心控制產(chǎn)品的發(fā)展。單片機(jī)以較小的體積、現(xiàn)場(chǎng)運(yùn)行環(huán)境的高可靠性滿足了許多對(duì)象的嵌入式應(yīng)用要求。在嵌入式系統(tǒng)中,單片機(jī)是最重要也是應(yīng)用最多的智能核心器件。6.在51子系列單片機(jī)中,程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器最大可擴(kuò)展為多少字節(jié)?答:在51子系列單片機(jī)中,片外程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器最大可擴(kuò)展為64K字節(jié)。7.在單片機(jī)中,片內(nèi)ROM的配置有幾種形式?用戶應(yīng)根據(jù)什么原則選用?答:在單片機(jī)中,片內(nèi)ROM的配置有3種形式?用戶應(yīng)根據(jù)實(shí)用原則選用。如:片內(nèi)駐留掩膜ROM配置的單片機(jī),用戶無法自行改寫片內(nèi)的程序,推廣應(yīng)用受到限制;片內(nèi)駐留EPROM配置的單片機(jī),用戶可用開發(fā)工具把應(yīng)用程序?qū)懭肫瑑?nèi)EPROM,該用戶帶來極大方便,簡化系統(tǒng)結(jié)構(gòu),易于推廣應(yīng)用;片內(nèi)無ROM配置的單片機(jī),用戶必須外接片外EPROM作為程序存儲(chǔ)器,其容量可視需要靈活配置。三、計(jì)算題1.將下列十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制和二進(jìn)制數(shù)。(1)44.375=2C.6H=101100.011B (2)171=ABH=10101011B (3)0.6875=0.BH=0.1011B (4)127.65625=7F.A8H=1111111.10101B 2.將下列十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制和十進(jìn)制數(shù)。(1)7E2H=11111100010B=2018 (2)1FFFH=1111111111111B=8191 (3)3200H=11001000000000B=12800 (4)F7H=11110111B=2473.將下列二進(jìn)制帶符號(hào)數(shù),分別用原碼和補(bǔ)碼表示。(1)+1010011B[+1010011B]原=[+1010011B]補(bǔ)=01010011B (2)-01011010B [-01011010B]原=11011010B[-01011010B]補(bǔ)=10100110B(3)+0101010B[+0101010B]原=[+0101010B]補(bǔ)=00101010B(4)-0111100B[-0111100B]原=10111100B[-0111100B]補(bǔ)=11000100B4.下列機(jī)器數(shù)為帶符號(hào)數(shù)的補(bǔ)碼,試寫出他們對(duì)應(yīng)的真值。(1)E2H [E2H]真值=-30(2)1FH [1FH]真值=+31(3)00111100B [00111100B]真值=+60(4)11000011B[11000011B]真值=-615.將下列BCD碼轉(zhuǎn)換為十進(jìn)制數(shù)。(1)BCD碼0011011101010010轉(zhuǎn)換為十進(jìn)制數(shù)為3752(2)BCD碼1001011010000100轉(zhuǎn)換為十進(jìn)制數(shù)為96846.已知X、Y,試分別計(jì)算[X+Y]補(bǔ)和[X-Y]補(bǔ),并指出是否產(chǎn)生溢出。(1)X=+1001110, Y=+0010110[X+Y]補(bǔ)=01100100不會(huì)產(chǎn)生溢出[X-Y]補(bǔ)=00111000不會(huì)產(chǎn)生溢出(2)X=+0101101, Y=-1100100[X+Y]補(bǔ)=11001001不會(huì)產(chǎn)生溢出[X-Y]補(bǔ)=10010001產(chǎn)生溢出(3)X=-0101110, Y=+0111011(4)X=-1000101, Y=-0110011習(xí)題二一、選擇題1.在MCS-51單片機(jī)中,DPTR和SP分別是(C)的寄存器A.DPTR和SP均為8位 B.DPTR為8位,SP為16位(1)MOVXA,@R0 ;MOVXA,@DPTRMOVXA,@R0和MOVXA,@DPTR指令均為外部數(shù)據(jù)傳送指令,但訪問的存儲(chǔ)空間大小不同(2)MOVX@R0,A ;MOVX@DPTR,A同上(3)MOVXA,@R0 ;MOVX@R0,AA與外部數(shù)據(jù)存儲(chǔ)器和外部數(shù)據(jù)存儲(chǔ)器與A之間的傳送6.在MCS-51單片機(jī)片內(nèi)RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H,分析下段程序中各指令的功能;說明源操作數(shù)的尋址方式,以及按序執(zhí)行每條指令后的結(jié)果。MOVA,40H ;直接尋址 A=48HMOVR0,A ;寄存器尋址R0=48HMOV@R0,30H ;直接尋址 (48H)=38HMOV40H,38H ;直接尋址 (40H)=40HMOVR0,30H ;直接尋址 R0=38HMOV90H,R0 ;寄存器尋址(90H)=38HMOV48H,#30H ;立即尋址 (48H)=30HMOVA,@R0 ;寄存器間接尋址A=40H7.DAA指令的作用是什么?怎樣使用?DAA指令的作用是在進(jìn)行BCD碼運(yùn)算時(shí),跟在ADD和ADDC指令之后,將相加后存放在累加器A中的結(jié)果進(jìn)行調(diào)整修正。8.試編程將片外數(shù)據(jù)存儲(chǔ)器50H中的內(nèi)容傳送到片內(nèi)RAM54H單元中。MOV R0,#50HMOVX A,@R0MOV 54H,A9.試編程將寄存器R7的內(nèi)容傳送到R1中去。MOVA,R7MOV R1,A10.用兩種方法實(shí)現(xiàn)累加器A與寄存器B的內(nèi)容交換。XCHA,B 或MOVR0,AMOVA,BMOVB,R011.試編程將片外RAM40H單元的內(nèi)容與R1的內(nèi)容交換。MOV B,R1MOV R0,#40HMOVXA,@R0MOVR1,AMOV A,BMOVX@R0,A12.若要完成以下的數(shù)據(jù)傳送,應(yīng)如何用MCS-51的指令來實(shí)現(xiàn)?(1)R1內(nèi)容傳送到R0。(2)外部RAM20H單元內(nèi)容R0。(3)外部RAM20H單元內(nèi)容送內(nèi)部RAM20H單元。(4)外部RAM1000H單元內(nèi)容送內(nèi)部RAM20H單元。(5)外部ROM20H單元內(nèi)容R0。(6)外部ROM2000H單元內(nèi)容送內(nèi)部RAM20H單元。13.已知:A=0C9H,B=8DH,CY=1。執(zhí)行指令A(yù)DDC A,B結(jié)果如何?A=57H執(zhí)行指令SUBB A,B結(jié)果如何?A=3BH14.列舉4條能使累加器A清零的指令。CLRAMOVA,#00HANDA,#00H XORA,ACC15.試用3種方法將累加器A中無符號(hào)數(shù)乘2。1)MOVB,#02MULAB2)RLA3)ADDA,ACC16.分析下列指令執(zhí)行后,A及PSW中進(jìn)位位CY、奇偶位P和溢出位OV的值。(1)當(dāng)A=5BH時(shí); ADD A,#8CH(2)當(dāng)A=5BH時(shí); ANL A,#7AH(3)當(dāng)A=5BH時(shí); XRL A,#7FH(4)當(dāng)A=5BH,CY=1時(shí); SUBB A,#0E8H17.試說明指令CJNE@R1,#7AH,10H的作用。若本指令地址為250H,其轉(zhuǎn)移地址是多少?(@R1)與#7AH比較不等于轉(zhuǎn)移,轉(zhuǎn)移的偏移量為10H;其轉(zhuǎn)移地址是263H18.參照例題21若系統(tǒng)的晶振頻率為5MHz,求子程序DELAY的延時(shí)時(shí)間。若想加長或縮短延時(shí)時(shí)間,應(yīng)怎樣修改?晶振頻率為5MHz時(shí),1M=2.4微秒,子程序DELAY的延時(shí)時(shí)間共為1002*2.4=2404.8微秒;若想加長或縮短延時(shí)時(shí)間可以增加/減少NOP指令或增加/減少循環(huán)19.試編一程序?qū)⑼獠繑?shù)據(jù)存儲(chǔ)器2100H單元中的高4位置“1”,其余位清“0MOVA,#0F0HMOVDPTR,#2100HMOVX@DPTR,A20.試編程將內(nèi)部數(shù)據(jù)存儲(chǔ)器40H單元的第0位和第7位置“1”MOVA,40HCPLA SETBACC.0 SETBACC.7MOV40H,A21.將ACC.5與80H位相與的結(jié)果,通過P1.4輸出。MOVC,80HANLC,ACC.5MOVP1.4,C22.使用位操作指令,求下面邏輯方程:(1)P1.7=ACC.0∧(B.0∨P2.1)∨ MOV C,B.0 ORL C,P2.1 MOV 30H,C MOV C,ACC.0 ANL C,30H ORL C,/P3.2 MOV P1.7,C(2)PSW.5=P1.3∧ACC.2∨B.5∧ MOVC,P1.3 ANLC,ACC.2 ORLC,B.5 ANLC,/P1.1 MOVPSW.5,C(3)P2.3=∧B.4∨∧P1.0基本同上三、分析計(jì)算1.已知A=7AH,R0=30H,(30H)=A5H,PSW=81H。問執(zhí)行以下各指令的結(jié)果(每條指令都以題中規(guī)定的數(shù)據(jù)參加操作)。(1)XCH A,R0 A=30HR0=7AH P=0(2)XCH A,30H A=A5H(30H)=7AH P=0(3)XCH A,@R0 A=A5H(30H)=7AH P=0(4)XCHD A,@R0 A=75H(30H)=AAH P=1(5)SWAP A A=A7HP=1(6)ADD A,R0 A=AAHCY=0OV=1P=0(7)ADD A,30H A=1FHCY=1OV=1P=1(8)ADD A,#30H A=AAHCY=0OV=1P=0(9)ADDC A,R0 A=ABHCY=0OV=1P=1(10) SUBB A,30H A=D4HCY=1OV=0P=0(11) ADD A,#30H A=CY=OV=P=(12) DA A A=CY= P=(13) RL A A=CY= P=(14) RLC A A=CY= P=(15) CJNE A,#30H,00 A=CY= P=(16) CJNE A,30H,00 A=CY= P=2.設(shè)A=82H,R0=17H,(17H)=34H,問執(zhí)行以下指令后A=?ANL A,#17H ;A=02HORL 17H,A ;A=02H(17H)=36HXRL A,@R0 ;A=34HCPL A ;A=CBH3.已知:A=75H,PSW=81H,轉(zhuǎn)移指令所在地址為2080H,當(dāng)執(zhí)行以下指令后,PC值等于多少?(1)執(zhí)行JNZ 12H后,PC值=? PC=2094H(2)執(zhí)行JNC 4H后,PC值=? PC=2082H(3)執(zhí)行JB P,55H后,PC值=? PC=20D8H(4)執(zhí)行JBC AC,78H后,PC值=? PC=2083H (5)執(zhí)行CJNE A,#50H,9AH后, PC值=? PC=201DH(6)執(zhí)行DJNZ PSW,0BCH后,PC值=? PC=203FH4.已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H。問此時(shí)執(zhí)行RET指令以后,SP=?PC=?執(zhí)行RET指令以后,SP=23HPC=3412H5.若SP=25H,PC=2345H,標(biāo)號(hào)LABEL所在的地址為3455H,問執(zhí)行長調(diào)用指令LCALLLABLE后,堆棧指針和堆棧的內(nèi)容發(fā)生什么變化?PC的值等于什么?堆棧指針SP=27H;堆棧的內(nèi)容發(fā)生變化(26H)=48H,(27H)=23H;PC的值等于3455H6.上題中的LCALL指令能否直接換成ACALL指令,為什么?如果使用ACALL指令,則可調(diào)用的地址范圍是什么?LCALL指令不能直接換成ACALL指令,因?yàn)槌隽宿D(zhuǎn)移范圍,如果使用ACALL指令,則可調(diào)用的地址范圍是2K四、編寫程序1.試編寫程序,將內(nèi)部RAM的20H,21H,22H,三個(gè)連續(xù)單元的內(nèi)容依次存入2FH,2EH和2DH單元。MOV20H,2FHMOV21H,2EHMOV22H,2DH2.試編寫程序能夠?qū)?nèi)部RAM中32H~30H的內(nèi)容左移1位,即:32H31H30HCY0CLRCMOVA,30HRLCAMOV30H,AMOVA,31HRLCAMOV31H,AMOVA,32HRLCAMOV32H,A3.編寫程序,若累加器A的內(nèi)容分別滿足以下條件時(shí),則程序轉(zhuǎn)至LABEL存貯單元。設(shè)A中存的是無符號(hào)數(shù)。(1)A≥10CLRCSUBBA,#10HJNCLABEL(2)A>10(3)A≤104.利用查表技術(shù)將累加器A中的一位BCD碼轉(zhuǎn)換為相應(yīng)的十進(jìn)制數(shù)的七段字型碼,結(jié)果送P1口輸出。0~9的七段碼分別是:3FH、05H、5BH、4FH、55H、5DH、7DH、07H、TFH、5FH。MOVDPTR,#TABMOVCA,@A+DPTRMOVP1,ATAB:DB3FH、05H、5BH、4FH、55H、5DH、7DH、07H、TFH、5FH習(xí)題四一、簡答題1.什么叫“偽指令”?偽指令與指令有什么區(qū)別?2.MCS-51系列單片機(jī)匯編語言有哪些偽指令?它們的用途是什么?匯編語言的格式是怎樣的?3.匯編語言程序設(shè)計(jì)分哪幾個(gè)步驟?4.列出畫程序流程圖的各種圖形符號(hào),并說明用途。5.分析下述程序的功能。X DATA30HY DATA32H MOV A,X JNB ACC.7,TRUE CPL AADD A,#01HTRUE:MOV Y,A本程序的功能是求片內(nèi)RAM地址為30H單元中數(shù)的補(bǔ)碼后送32H單元二、計(jì)算題1.下列程序執(zhí)行后,按要求回答問題。(1) ORG 2000HMOV A,#00HMOV B,#01HMOV SP,#10HPUSH ACCPUSH BRET結(jié)果:SP=10H,PC=0201H。(2)運(yùn)行前:CY=0,AC=0,OV=0,P=0。MOV A,#77H MOV B,#34H ADD A,B DA A結(jié)果:A=11H,CY=1。(3)運(yùn)行前:CY=0,AC=0,OV=0,P=0。 MOV A,#07HMOV B,#02H MUL AB結(jié)果:A=0EH,B=00H,OV=0,P=1。(4) MOV R0,#10H MOV 10H,#20H MOV @R0,#30H MOV A,R0結(jié)果:A=10H,R0=10H,(10H)=30H。2.下列程序段匯編后,從3000H開始的各有關(guān)存儲(chǔ)器單元的內(nèi)容將是什么?ORG 3000HTAB1:EQU 3234HTAB2:EQU 4000HDB ‘START’DW TAB1,TAB2,9000H從3000H開始的各有關(guān)存儲(chǔ)器單元的內(nèi)容是‘S’、‘T’、‘A’、‘R’、‘T’、32H、34H、40H、00H、90H、00H三、應(yīng)用題1.編寫程序?qū)?nèi)部RAM30H中的壓縮BCD碼轉(zhuǎn)換為ASCII碼,并存入31H和32H單元中。MOVA,30HANLA,#0FHADDA,#30HMOV31H,AMOVA,30HSWAPAANLA,#0FHADDA,#30HMOV32H,ASJMP$2.若晶振為6MHz,試編制一個(gè)延時(shí)5ms的子程序。MOVR0,#5LP1:MOVR1,#124LP2:NOPNOPDJNZR1,LP2DJNZR0,LP1RET(((1+1+2)*124+1+2)*5+1+2)*2μs=4996μs3.試編制一段程序,其功能是在P1.0輸出周期大約為6MS,占空比為2:1的脈沖(設(shè)fose=12MHz)。START: SETB P1.0ACALL YSACALL YSCPL P1.0ACALL YSSJMP STARTYs: MOV R0,#6LP1: MOV R1,#249LP2: NOPNOP DJNZ R1,LP2 DJNZ R0,LP1 RET4.編程將片內(nèi)20H單元開始的30個(gè)數(shù)傳送到片外RAM3000H開始的單元中。MOVR0,#20HMOVDTPR,#3000HMOVR1,#30LP:MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR1SJMP$5.在片外2000H開始的單元中有100個(gè)有符號(hào)數(shù),試編程統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)、零的個(gè)數(shù)的程序MOVR0,#100MOVDPTR,#2000HHUI:MOVXA,@DPTRCJNEA,#00H,PT1INCR1JMPSSSPT1:JNBACC.7ZHENINCR3JMPSSSZHEN:INCR2SSS:INCDPTRDJNZR0,HUISJMP$6.試設(shè)計(jì)數(shù)據(jù)塊傳送程序,將起始地址為0200H的100個(gè)連續(xù)單元中的內(nèi)容送到以2000H為首址的區(qū)域中去。MOVR7,#100MOVP2,#20HMOVR0,#00HMOVDTPR,#0200HLOOP: MOVXA,@DPTRMOVX@R0,AINCR0INCDPTRDJNZR7,LOOPSJMP$7.設(shè)有兩個(gè)長度為15的數(shù)組,分別存放在0200H和0500H為首址的存儲(chǔ)區(qū)域中,試編寫程序求其對(duì)應(yīng)項(xiàng)之和,結(jié)果存放在以0600H為首址的存儲(chǔ)區(qū)域中。MOVR7,#15MOVR0,#00HCLRCLOOP: MOVP2,,#02HMOVXA,@R0MOVB,AMOVP2,#05HMOVXA,@R0ADDCA,BMOVP2,#06HMOVX@R0,AINCR0DJNZR7,LOOPSJMP$8.分別用數(shù)據(jù)傳送指令和位操作指令編寫程序,將內(nèi)RAM位尋址區(qū)的128位單元全部清零。MOVR0,#20HMOVR1,#0FHMOVA,#00HLOOP: MOV@R0,AINCR0DJNZR1,LOOPSJMP$9.編程求內(nèi)部RAM中40H~49H10個(gè)單元中的內(nèi)容的平均值,并放人4AH單元中。START:MOV R3,#0MOV R4,#0MOV R2,#10MOV R0,#40HLOOP:MOV A,R3ADD A,@R0MOV R3,ACLR AADDC A,R4MOV R4,AINC R0DJNZ R2,LOOP;調(diào)用單字節(jié)無符號(hào)除法程序即可10.設(shè)內(nèi)部RAM中30H和31H單元中有2個(gè)帶符號(hào)數(shù),求出其中的大數(shù)存放在32單元中。CLR CMOV A,30HSUBB A,31HJZ XMAXJB ACC.7,NEGJB OV,YMAXSJMP XMAXNEG: JB OV,XMAXYMAX: MOV A,31HSJMP RMAXXMAX: MOV A,30HRMAX: MOV 32H,ARET11.請(qǐng)用位操作指令編寫下面邏輯表達(dá)式值的程序。(1)P1.7=ACC.0∧(B.0∨P2.1)∨P3.2 MOVC,B.0 ORLC,P2.1 ANLC,ACC.0 ORLC,P3.2 MOVP1.7,C(2)PSW.5=P1.3∧ACC.2∨B.5∧P1.1(3)P2.3=P1.5∧B.4∨ACC.7∧P1.012.使用位操作指令實(shí)現(xiàn)下列邏輯操作,但不得改變未涉及位的內(nèi)容。(1)使ACC.0置“1”SETBACC.0(2)清除累加器高4位 CLRACC.7CLRACC.6CLRACC.5CLRACC.4(3)清除ACC.3,ACC.5,ACC.7位。CLRACC.7CLRACC.5CLRACC.313.試編程把片外RAM從2040H開始的連續(xù)50個(gè)單元的內(nèi)容按降序排列,結(jié)果存入3000H開始的存儲(chǔ)區(qū)中。START;MOVR0,#50 MOVDPTR,#2040H MOVR1,#20HLOOP: MOVX A,@DPTR MOV@R1,A INCDPTR INC R1DJNZR0,LOOP ACALL SORTMOVDPTR,#3000H MOVR1,#20HLOOP: MOVA,@R1MOVX @DPTR,A INCDPTR INC R1DJNZR0,LOOPSJMP$14.試編一查表程序,從首地址為2000H,長度為100的數(shù)據(jù)表中,查找出A的ASCII碼,將其地址存入2010H和2011H單元中。MOVR7,#100MOV

B,’A’

MOV

DPTR,#2000HLOOP: MOVX

A,@DPTR

CJNE

A,B,NFIND

SJMPFIND

RETNFIND: INC

DPTR

DJNZ

R7,LOOP

FIND:MOV

2010H,DPLMOV

2011H,DPH

RET15.設(shè)計(jì)一個(gè)多字節(jié)無符號(hào)數(shù)加法子程序和減法子程序。N字節(jié)無符號(hào)數(shù)加法程序([R0]+[R1])=([R0]);入口:R0,R1,R7;占用資源:ACC,B;出口:R0,CFNADDN:MOVB,R0CLRCNADN1:MOVA,@R0ADDCA,@R1MOV@R0,AINCR0INCR1DJNZR7,NADN1MOVR0,BRET;N字節(jié)無符號(hào)數(shù)減法程序([R0]-[R1])=([R0]);入口:R0,R1,R7;占用資源:ACC,B;出口:R0,CFNSUBN:MOVB,R0MOVR7,NCLRCNSUBN1:MOVA,@R0SUBBA,@R1MOV@R0,AINCR0INCR1DJNZR7,NSUBN1MOVR0,BRET16.在128分支程序中是用AJMP指令實(shí)現(xiàn)分支轉(zhuǎn)移的。若用長轉(zhuǎn)移指令LJMP來代替AJMP指令,以便子程序入口地址可在64KB范圍內(nèi)安排。試修改原來的程序,使之能適應(yīng)新的要求。?修改后的程序最多能有256個(gè)分支MOVDPTR,#JPTABMOVA,R1MOVB,#03MULABPUSHAMOVA,BADDA,DPHPOPAJMP@A+DPTRJPTAB:LJMPPROGRAM0LJMPPROGRAM1LJMPPROGRAMN習(xí)題五一、選擇題(1)MCS-51單片機(jī)中斷源和可設(shè)置的中斷優(yōu)先等級(jí)分別為(B)。A.中斷源為2個(gè),中斷優(yōu)先等級(jí)為2個(gè)B.中斷源為5個(gè),中斷優(yōu)先等級(jí)為2個(gè)C.中斷源為4個(gè),中斷優(yōu)先等級(jí)為1個(gè)D.中斷源為3個(gè),中斷優(yōu)先等級(jí)為1個(gè)(2)MCS-51單片機(jī)定時(shí)/計(jì)數(shù)器的方式0和方式1分別是(A)位定時(shí)/計(jì)數(shù)器。A.13和16B.16和13C.8和16D.16(3)MCS-51單片機(jī)定時(shí)/計(jì)數(shù)器的最大定時(shí)時(shí)間是(B)(設(shè)時(shí)鐘頻率為6MHz)。A.65.536msB.131.072msC.8.192msD.16.384ms(4)MCS-51單片機(jī)定時(shí)/計(jì)數(shù)器方式l時(shí),其最大的計(jì)數(shù)個(gè)數(shù)是(A)。A.65536D.65635C.8192D(5)T1中斷源的中斷矢量地址是(D)。A.0003HB.000BHC.0013HD.001BH(6)IE0是(C)的中斷標(biāo)志。A.T0B.T1C.二.簡答題(1)以方式0為例,說明MCS-51的定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)和定時(shí)功能的基本原理。以THi、TLi16位中的13位(TLi的高3位未用)構(gòu)成一個(gè)加1計(jì)數(shù)器,定時(shí)方式工作時(shí),以主頻12分頻后的頻率信號(hào)作為加1脈沖信號(hào);計(jì)數(shù)方式工作時(shí),以從外部接口送入的頻率信號(hào)作為加1脈沖信號(hào)。(2)單片機(jī)8051內(nèi)部有幾個(gè)定時(shí)/計(jì)數(shù)器?它們由哪些專用寄存器組成?單片機(jī)8051內(nèi)部有2個(gè)定時(shí)/計(jì)數(shù)器;它們由TH0、TL0、TH1、TL1、TMOD、TCON專用寄存器組成。(3)單片機(jī)8051的定時(shí)/計(jì)數(shù)器有哪幾種工作方式?各有什么特點(diǎn)?單片機(jī)8051的定時(shí)/計(jì)數(shù)器有4種工作方式;工作方式0:13位計(jì)數(shù)器;工作方式1:16位計(jì)數(shù)器;工作方式2:初值可以自動(dòng)重新裝入的8位計(jì)數(shù)器;工作方式3:T0拆分成兩個(gè)獨(dú)立的8位計(jì)數(shù)器,占用了T1的有關(guān)引腳、控制位、中斷,T1仍可工作在不需中斷控制的工作方式0、工作方式1、工作方式2。(4)定時(shí)/計(jì)數(shù)器作為定時(shí)用時(shí),其定時(shí)時(shí)間與哪些因素有關(guān)?作為計(jì)數(shù)用時(shí),對(duì)輸入信號(hào)頻率有何限制?定時(shí)/計(jì)數(shù)器作為定時(shí)用時(shí),其定時(shí)時(shí)間與工作方式、初值、主頻等因素有關(guān),作為計(jì)數(shù)用時(shí),對(duì)輸入信號(hào)頻率的限制是不允許超出主頻的1/24,且高低電平的保持時(shí)間大于1個(gè)機(jī)器周期。(5)說明對(duì)MCS-51定時(shí)器進(jìn)行初始化編程的步驟和內(nèi)容。①向TMOD寫入工作方式控制字。②向計(jì)數(shù)器TLi、THi裝入初值。③置TRi=1,啟動(dòng)計(jì)數(shù)。④若需要時(shí),置ETi=1,允許定時(shí)/計(jì)數(shù)器中斷。⑤置EA=1,CPU開中斷。(6)8051單片機(jī)提供了幾個(gè)中斷源?有幾級(jí)中斷優(yōu)先級(jí)別?各中斷標(biāo)志是如何產(chǎn)生的?又如何清除這些中斷標(biāo)志?各中斷源所對(duì)應(yīng)的中斷矢量地址是多少?8051單片機(jī)提供了5個(gè)中斷源;有2級(jí)中斷優(yōu)先級(jí)別;各中斷源所對(duì)應(yīng)的中斷矢量地址是0003H、000BH、0013H、001BH、0023H(7)試分析以下幾種中斷優(yōu)先級(jí)的排列順序(級(jí)別由高到低)是否可能?若可能,則應(yīng)如何設(shè)置中斷源的中斷級(jí)別?否則,請(qǐng)簡述不可能的理由。①定時(shí)器T0溢出中斷,定時(shí)器T1溢出中斷,外部中斷,外部中斷,串行口中斷;②串行口中斷,外部中斷,定時(shí)器T0溢出中斷,外部中斷,定時(shí)器T1溢出中斷;③外部中斷,定時(shí)器T1溢出中斷,外部中斷,定時(shí)器T0溢出中斷,串行口中斷;④外部中斷,外部中斷,串行口中斷,定時(shí)器T0溢出中斷,定時(shí)器T1溢出中斷;⑤串行口中斷,定時(shí)器T0溢出中斷,外部中斷,外部中斷,定時(shí)器T1溢出中斷;⑥外部中斷,外部中斷,定時(shí)器T0溢出中斷,串行口中斷,定時(shí)器T1溢出中斷;⑦外部中斷,定時(shí)器T1溢出中斷,定時(shí)器T0溢出中斷,外部中斷,串行口中斷。(8)外部中斷有幾種觸發(fā)方式?如何選擇?在何種觸發(fā)方式下,需要在外部設(shè)置中斷請(qǐng)求觸發(fā)器?為什么?(9)利用定時(shí)器來測(cè)量單次正脈沖寬度,采用何種工作方式可獲得最大的量程?設(shè)fosc=6MHz,求允許測(cè)量的最大脈寬是多少?(10)串行通信與并行通信各有什么優(yōu)缺點(diǎn),它們分別適用于什么場(chǎng)合?(11)串行通信與并行通信相比各有何特點(diǎn)?(12)串行通信有幾種通信方式?(13)串行口有幾種工作方式?它們各有什么特點(diǎn)?(14)設(shè)串行異步通信的傳送速率為2400波特,傳送的是帶奇偶校驗(yàn)的ASCII碼字符,每個(gè)字符包含10位(1個(gè)起始位,7個(gè)數(shù)據(jù)位,1個(gè)奇偶校驗(yàn)位,1個(gè)停止符),試問每秒最多可傳送多少個(gè)字符?三.應(yīng)用題1.利用MCS-51定時(shí)器分別實(shí)現(xiàn)以下要求,說明實(shí)現(xiàn)方法,并編制程序。①T1工作于方式1或方式2,使P1.0腳輸出周期為400μs的連續(xù)方波。利用定時(shí)器T1方式2定時(shí),200μs引起一次中斷MAIN: MOV TMOD,#20HMOV TL1,#9CHMOV TH1,#9CHMOV IE,#88HSETB TR1SJMP $ORG 001BHCPL P1.0RETI②測(cè)量不等寬方波的高低電平持續(xù)時(shí)間TH和TL。 測(cè)量不等寬方波的高電平持續(xù)時(shí)間TH同例5.6程序測(cè)量不等寬方波的低電平持續(xù)時(shí)間TL將例5.6程序改動(dòng)如下WAIT1: JNB P3.2,WAIT1SETB TR0WAIT2: JB P3.2,WAIT2WAIT2: JNB P3.2,WAIT3③檢測(cè)一段程序的執(zhí)行時(shí)間(估計(jì)不大于2ms)。利用T1工作于方式2定時(shí),使周期為1μs引起一次中斷,記錄中斷次數(shù)*1μs即為程序的執(zhí)行時(shí)間。 ORG 0000H AJMP MAIN ORG 001BH AJMP INTMAIN: MOV TMOD,#20HMOV TL1,#FFHMOV TH1,#FFHMOV IE,#88HSETB TR1(需檢測(cè)的程序段)CLR TR1SJMP $INT: ORG 001BHINC R0或INC DPTRRETI END④為MCS-51擴(kuò)展一個(gè)外部中斷源。參見例5.5MAIN: MOV TMOD,#60HMOV TL1,#FFHMOV TH1,#FFHMOV IE,#88HSETB TR1SJMP $⑤對(duì)外部脈沖記數(shù),當(dāng)記到100時(shí),從P1.1腳輸出一個(gè)正跳變。利用定時(shí)器T1方式2對(duì)外部信號(hào)計(jì)數(shù)MAIN: MOV TMOD,#60HMOV TL1,#9CHMOV TH1,#9CHMOV IE,#88HSETB TR1SJMP $ORG 001BHSETB P1.1NOPNOPCPL P1.1RETI2.設(shè)系統(tǒng)有兩個(gè)中斷源,分別為外部中斷和串口,要求串口中斷為優(yōu)先,試編制它的初始化程序。ORG 0000H AJMP MAIN ORG 0003H AJMP INT0ORG 0023H AJMP SIO ORG 0100HMAIN: SETB EA SETB ES SETB EX0SETB PSSJMP $3.當(dāng)定時(shí)器T0作在方式3時(shí),由于TR1位已被T0占用,如何控制定時(shí)器T1的開啟和關(guān)閉?當(dāng)定時(shí)器T0作在方式3時(shí),定時(shí)器T1仍可設(shè)置為方式0、方式、方式2。但由于TR1、TF1以及T1的中斷源已被定時(shí)器T0占用,此時(shí)定時(shí)器T1僅由控制位C/T切換其定時(shí)或計(jì)數(shù)功能,當(dāng)計(jì)數(shù)器計(jì)滿溢出時(shí),只能將輸出送往串口。4.已知單片機(jī)系統(tǒng)時(shí)鐘頻率fosc=6MHz,若要求定時(shí)值分別為0.1ms、1ms和10m,定時(shí)器T0工作在方式0、方式1、方式2定時(shí)值為0.1ms時(shí):定時(shí)器T0工作在方式0時(shí),對(duì)應(yīng)的初值為8142(FEH0EH)定時(shí)器T0工作在方式1時(shí),對(duì)應(yīng)的初值為65486(FFHCEH)定時(shí)器T0工作在方式2時(shí),對(duì)應(yīng)的初值為206(CEH)定時(shí)值為1ms時(shí):定時(shí)器T0工作在方式0時(shí),對(duì)應(yīng)的初值為7692(F0H0CH)定時(shí)器T0工作在方式1時(shí),對(duì)應(yīng)的初值為65036(FEH0CH)定時(shí)器T0工作在方式2時(shí),無對(duì)應(yīng)的初值定時(shí)值為10m時(shí):定時(shí)器T0工作在方式0時(shí),對(duì)應(yīng)的初值為3192(63H18H)定時(shí)器T0工作在方式1時(shí),對(duì)應(yīng)的初值為60536(ECH78H)定時(shí)器T0工作在方式2時(shí),無對(duì)應(yīng)的初值5.已知單片機(jī)系統(tǒng)時(shí)鐘頻率fosc=6MHz,試編寫程序,使P1.0輸出如下的矩形脈沖(建議用定時(shí)器工作方式2)P1.0→40μs←--360μs--→ORG 0000H AJMP MAIN ORG 000BH AJMP CTC0 ORG 0100HMAIN: MOV TMOD,#02HMOV TL0,#236MOV TH0,#236MOV R0,#0SETB EASETB ET0SETB TR0SETB P1.0SJMP $CTC0:CLR P1.0 INC R0 CJNE R0,#10,RT CPL P1.0MOV R0,#0RT: RETI6.已知單片機(jī)系統(tǒng)時(shí)鐘頻率fosc=6MHz,試編寫程序,利用定時(shí)器T0工作在方式3,使P1.0和P1.1分別輸出周期為1ms和400μs的方波。ORG 0000H AJMP MAIN ORG 000BH AJMP CTC250ORG 001BH AJMP CTC100 ORG 0100HMAIN: MOV TMOD,#03HMOV TL0,#6MOV TH0,#156SETB EASETB ET0SETB ET1SETB TR0SETB TR1SJMP $CTC250:CPL P1.0MOV TL0,#6 RETICTC100:CPL P1.1MOV TH0,#156 RETI7.將定時(shí)器T1設(shè)置為外部事件計(jì)數(shù)器,要求每計(jì)數(shù)100個(gè)脈沖,T1轉(zhuǎn)為1ms定時(shí)方式,定時(shí)到后,又轉(zhuǎn)為計(jì)數(shù)方式,周而復(fù)始。設(shè)系統(tǒng)時(shí)鐘頻率為6MHz,試編寫程序。ORG 0000H AJMP MAIN ORG 0050HMAIN: SJMP JS100ORG 0100H JS100: MOV TMOD,#01100000BMOV TH1,#156MOV TL1,#156SETB EASETB ET1SETB TR1 LOOP1: JB TF1,NEXT1 SJMP LOOP1 NEXT1: CLR TR1AJMP DS1msSJMP $ORG 0200H DS1ms: MOV TMOD,#00000000BMOV TH1,#F0HMOV TL1,#0CHSETB EASETB ET1SETB TR1 LOOP2: JB TF1,NEXT2 SJMP LOOP2 NEXT2: CLR TR1AJMP JS100SJMP $END8.設(shè)單片機(jī)系統(tǒng)時(shí)鐘頻率fosc=6MHz,現(xiàn)利用定時(shí)器T1方式2產(chǎn)生110bps波特率,試計(jì)算出定時(shí)器的初值。依據(jù)公式: 波特率=2SMOD/32*T1溢出率取SMOD=0T1溢出率=1/(28—初值)計(jì)算得出: 定時(shí)器的初值為1149.由MCS-51單片機(jī)的串行口的方式1發(fā)送1,2,…,F(xiàn)FH等255個(gè)數(shù)據(jù),試用中斷方式編寫發(fā)送程序(波特率為2400,fosc=12MHz)。ORG 0000HAJMP MAINORG 0100HMAIN: MOV TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3HSETB EASETB TR1MOV PCON,#00HMOV SCON,#50HMOV A,#01HMOV R5,#255SETB TISJMP $ORG 0023HACOUT: CLR TIMOV SBUF,AINC ADJNZ R5,TNEXTCLR ESCLR TR1TNEXT:RETIEND10.設(shè)計(jì)一個(gè)單片機(jī)的雙機(jī)通信系統(tǒng),并編寫通信程序。將甲機(jī)內(nèi)部RAM30H~3FH存儲(chǔ)區(qū)的數(shù)據(jù)塊通過串行口傳送到乙機(jī)內(nèi)部RAM40H~4FH存儲(chǔ)區(qū)中去。習(xí)題六1.利用8051定時(shí)器的門控位測(cè)量某正脈沖高電平的寬度。已知正脈沖寬度小于10ms,fosc=12MHz。試編程測(cè)量脈寬,并把測(cè)試的結(jié)果轉(zhuǎn)換為BCD碼存入片內(nèi)50H開始的連續(xù)單元中,十位和個(gè)位存入50H單元。解:該題與[例5.6]類似。分析:[例5.6]當(dāng)GATE=1、TR0=1,只有/INT0引腳上出現(xiàn)高電平時(shí),T0才被允許計(jì)數(shù)。利用這一功能測(cè)試/INT0引腳上正脈沖的寬度(以機(jī)器周期數(shù)表示)。設(shè)外部待測(cè)脈沖由/INT0(P3.2)輸入,T0工作在方式1,設(shè)置為定時(shí)狀態(tài),GATE置“1”,測(cè)試時(shí),在/INT0端為“0”時(shí)置TR0為“1”,當(dāng)/INT0端變?yōu)椤?”時(shí)啟動(dòng)計(jì)數(shù);/INT0端再次變?yōu)椤?”時(shí)停止計(jì)數(shù)。此時(shí)的計(jì)數(shù)值就是被測(cè)正脈沖的寬度。如下圖所示:/INT0(P3.2)對(duì)T0初始化 │←T0從0開始計(jì)數(shù)→│TR0←0,停止T0計(jì)數(shù),TMOD←09H,讀出T0值TR←1程序如下: ORG 0000H LJMPMAIN ORG0100HMAIN: MOV TMOD,#09H ;T0工作于方式1定時(shí),GATE=1 MOV TL0,#00H MOV TH0,#00HWAIT1:JB P3.2,WAIT1 ;等待P3.2變低 SETB TR0 ;啟動(dòng)T0WAIT2:JNB P3.2,WAIT2 ;等待P3.2變高WAIT3:JB P3.2,WAIT3 ;等待P3.2再變低 CLR TR0 ;T0停止計(jì)數(shù);16位二進(jìn)制數(shù)轉(zhuǎn)換十進(jìn)制數(shù)。 MOV R7,TH0;存放計(jì)數(shù)值 MOV R6,TL0 MOV R5,#00H MOV R4,#0AH MOV R0,#50H MOV 31H,#05LOOP: LCALL DDIV MOV @R0,02H INC R0 DJNZ 31H,LOOP SJMP $DDIV: MOV A,R4 JNZ DDIV0 MOVA,R5 JZ ERRORDDIV0: MOV R2,#00H MOV R3,#00H MOV R1,#16DDIV1: CLR C MOV A,R6 RLC A MOV R6,A MOV A,R7 RLC A MOV R7,A MOV A,R2 RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A MOV A,R2 SUBB A,R4 JC DDIV2 MOV 30H,A MOV A,R3 SUBB A,R5 JC DDIV2 INC R6 MOV R3,A MOV A,30H MOV R2,ADDIV2: DJNZ R1,DDIV1 CLR F0 SJMP NEXTERROR: SETB F0NEXT: RET END2.試用中斷技術(shù)設(shè)計(jì)一個(gè)秒產(chǎn)生電路,用于控制P1.0口的發(fā)光二極管LED閃亮,其閃爍頻率為5Hz,設(shè)fosc=6MHz。分析:利用定時(shí)/計(jì)數(shù)器產(chǎn)生5HZ時(shí)序信號(hào)。5HZ頻率的周期是:1/5hz=0.2s1/2周期是:0.1s當(dāng)時(shí)鐘頻率是:fosc=6MHz時(shí),機(jī)器周期為2微秒。所以:0.1s=x.2微秒,x=0.1s/2微秒=0.05乘以10的6次方=50000解:定時(shí)器T0工作以方式1。時(shí)間常數(shù)的初值是:65536-50000=1553615536=3CB0HTL0=0B0HTH0=3CH程序清單:ORG0000HLJMPMAINORG000BH;T0LJMPTT0ORG0100HMAIN:MOVSP,#30HMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBEASETBET0SETBTR0SJMP$TT0:MOVTH0,#3CHMOVTL0,#0B0HCPLP1.0RETIEND3.完善6.1.1動(dòng)態(tài)顯示控制LED顯示器的設(shè)計(jì),編寫程序使其能夠輸出顯示年字符“2006分析:由于顯示的是固定的字符,所以直接選擇字符的編碼輸出即可。解:ORG 0000H LJMP START ORG 0100HSTART: MOV A,#0FFH MOV P3,A ;使4個(gè)LED均不亮LP0: MOV P1,#7DH ;‘6’MOVP3,#0FEH ;11111110B、LED0顯示字符6 LCALL DELAY10MS ;延時(shí)10MS MOV P1,#3FH ;‘8’ MOV P3,#0F9H ;11111001B、LED2、LED1顯示字符0 ACALL DELAY10MS ;延時(shí)10MS MOV P1,#05BH ;‘2’ MOV P3,#0F7H ;11110111B、LED2、LED1顯示字符2 ACALL DELAY10MS ;延時(shí)10MS AJMP LP0 ;重復(fù)DELAY10MS: MOVR7,#5LOOP0: MOVR6,#212DJNZR6,$ ;2VSDJNZR6,$DJNZR6,$DJNZR6,$DJNZR7,LOOP0RETEND4.試設(shè)計(jì)使用8751單片機(jī)外接8個(gè)七段LED顯示器和8個(gè)BCD碼撥盤的電路。并編寫程序能夠依次讀入8個(gè)BCD碼撥盤數(shù)據(jù)后存入片內(nèi)30H~37H單元中,然后依次送LED顯示器輸出顯示。分析:1、8個(gè)LED數(shù)碼顯示字段,由P1口輸出。2、8個(gè)位控制由P3口輸出。3、8個(gè)BCD碼撥盤由P2口輸入,8421分別接P2.3、P2.2、P2.1、P2.0。4、8個(gè)撥盤的公共端分別為,A1~A8,由P0口控制位選通,分別對(duì)應(yīng)P0.0~P0.7。解1:編程讀入1#~8#BCD撥盤置入的數(shù)據(jù),并將讀入的數(shù)據(jù)存入片內(nèi)RAM的30H~37H單元中。輸入子程序RDIN:RDIN: MOV R7,#08H ;讀入次數(shù)計(jì)數(shù) MOV R0,#30H ;片內(nèi)RAM的首址送R0 MOV A,#0FEH ;選通1#撥盤,RDIN10: MOV R2,A ;暫存R2中 MOV P0,A ;輸出位選控制信號(hào) MOV A,P2 ;讀入撥盤數(shù)據(jù) CPL A ;取反使之為高電平有效 MOV @R0,A ;存入片內(nèi)RAM INC R0 ;指向下一個(gè)RAM單元 MOV A,R2 RL A ;指向下一個(gè)撥盤 DJNZ R7,RDIN10 ;8個(gè)撥盤未讀完轉(zhuǎn) RET ;讀完返主解2:顯示子程序DISPLAY:數(shù)碼管顯示的數(shù)據(jù)存放在內(nèi)存單元30H~37H中,每一地址單元內(nèi)均為十進(jìn)制BCD碼。由于采用軟件動(dòng)態(tài)掃描實(shí)現(xiàn)數(shù)據(jù)顯示功能,顯示用十進(jìn)制BCD碼數(shù)據(jù)的對(duì)應(yīng)段碼存放在ROM表中。顯示時(shí),先取出30H~37H某一地址中的數(shù)據(jù),然后查得對(duì)應(yīng)的顯示用段碼從P1口輸出。P3口將對(duì)應(yīng)的數(shù)碼管選中,就能顯示該地址單元的數(shù)據(jù)值。DISPLAY:MOV R0,#30H ;建立顯示緩沖區(qū)首址 MOV R3,#0FEH ;從右數(shù)第一位顯示 MOV A,R3 ;描字放入ALD10: MOV P3,A ;從P3口輸出 MOV A,@R0 ;取顯示數(shù)據(jù)到A MOV DPTR,#TAB ;取段碼表地址 MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼 MOV P1,A ;碼放P1口 ACALL DL1MS ;延時(shí)1ms INC R0 ;指向下一地址 MOV A,R3 JB ACC.7,LD20 ;ACC.7=0一次顯示結(jié)束 RL A ;A中數(shù)據(jù)循環(huán)左移 MOV R3,A ;將位控碼送R3保存 AJMP LD10 ;繼續(xù)掃描LD20: RET TAB: DB 0C0H ;字形代碼表0 DB 0F9H ;字形代碼表1 DB 0A4H ;字形代碼表2 DB 0B0H ;字形代碼表3 DB 99H ;形代碼表4 DB 92H ;字形代碼表5 DB 82H ;字形代碼表6 DB 0F8H ;字形代碼表7 DB 80H ;字形代碼表8 DB 90H ;字形代碼表9 DB 88H ;字形代碼表A DB 0FFH ;DL1MS: MOV R6,#14H ;1ms延時(shí)程序DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET 解3:主程序MAIN:ORG0000HLJMPMAINORG0100HMAIN:LCALLRDINLCALLDISPLAYEND說明:本程序進(jìn)行了軟件調(diào)試,若實(shí)際應(yīng)用還需與硬件調(diào)試。5.仿造6.2.1音樂門鈴的電路,設(shè)計(jì)一個(gè)音樂盒,當(dāng)打開音樂盒蓋時(shí),自動(dòng)播放“祝你生日快樂”的樂曲。解:對(duì)教材中120頁的程序進(jìn)行硬件聯(lián)機(jī)調(diào)試,獲得成功之后,將“祝你生日快樂”的相應(yīng)初值替換原來樂曲的初值即可。;時(shí)鐘頻率12mhz,產(chǎn)生“小星星”樂曲。ORG8000HLJMPMAINORG800BH ;T0LJMPTT0ORG801BH ;T1LJMPTT1ORG8100H ;MAIN:MOVTMOD,#11H ;T1,T0方式1MOVDPTR,#TABMOVIE,#8AH ;10001010BCPU允許中斷,T0,T1允許中斷。MOVTCON,#50H ;TR0=1,TR1=1.MOVR6,#00HNEXT:MOVR7,#00HMOVTH1,#3CHMOVTL1,#0B0HMOVA,R6MOVCA,@A+DPTRJZTOENDMOVTH0,#0FEHMOVTL0,ACJNER7,#08,$INCR6SJMPNEXTTOEND:CLRTR0SJMP$TT1:INCR7RETITT0:CPLP3.4MOVTH0,#0FEHMOVTL0,AMOVP1,ARETI;“祝你生日快樂”的初值。;TAB:DB~ 6.完善6.2.3實(shí)時(shí)時(shí)鐘中斷的設(shè)計(jì),使其具有自動(dòng)記秒、分、時(shí)、日的功能,即記滿60秒加1分鐘,記滿60分鐘加1小時(shí),記滿24小時(shí)加1天。定時(shí)器定時(shí)器0工作方式1計(jì)數(shù)初值顯示緩沖區(qū)單元清0定義堆棧區(qū)MAIN定時(shí)開始開中斷設(shè)置循環(huán)次數(shù)調(diào)用顯示子程序圖9.6系統(tǒng)主程序流程圖取個(gè)位數(shù),并占取個(gè)位數(shù),并占A低半字節(jié)加1使十位數(shù)占A高半字節(jié)取十位數(shù)DISPLAY十進(jìn)制調(diào)整個(gè)位數(shù)送緩沖單元把十位數(shù)交換到低半字節(jié)十位數(shù)送緩沖單元圖9.7加1子程序流程秒顯示緩沖單元清0秒顯示緩沖單元清0秒加1循環(huán)次數(shù)減1計(jì)數(shù)器重新加載現(xiàn)場(chǎng)保護(hù)PITO是否滿8次是否60秒時(shí)顯示緩沖單元清0是否24小時(shí)是否60分分值加1現(xiàn)場(chǎng)恢復(fù)時(shí)值加1分顯示緩沖單元清0返回圖9-8中斷服務(wù)程序流程(1)主程序清單如下:ORG 0000H ;程序執(zhí)行開始地址LJMP START ;跳到標(biāo)號(hào)START執(zhí)行ORG 000BH ;定時(shí)器0中斷程序入口LJMP INTT0 ;跳到標(biāo)號(hào)INTT0執(zhí)行ORG 0100H START:MOV SP,#60H ;確立堆棧區(qū);顯示緩沖單元清0 MOV R0,#79H ;顯示緩沖區(qū)首地址 MOV R7,#06H ;顯示位數(shù)ML1: MOV @R0,#00H INC R0 DJNZ R7,ML1調(diào)試用賦初值MOV 79H,#08MOV 7AH,#05MOV 7BH,#07MOV 7CH,#05 MOV 7DH,#02MOV 7EH,#02 MOV TMOD,#01H ;設(shè)置定時(shí)器0為方式1MOV TL0,#0DCH ;裝計(jì)數(shù)器初值MOV TH0,#0CH SETB EA ;總中斷開放SETB ET0 ;允許T0中斷SETB TR0 ;開啟T0定時(shí)器MOV 30H,#08H ;(30H)計(jì)數(shù)溢出次數(shù)ML0: LCALL DISPLAY ;調(diào)用顯示子程序 SJMP ML0 (2)顯示子程序。調(diào)試而加的程序。數(shù)碼管顯示的數(shù)據(jù)存放在內(nèi)存單元79H~7EH中,其中79H、7AH存放秒數(shù)據(jù),79H秒個(gè)位,7AH秒十位。7BH~7CH存放分?jǐn)?shù)據(jù),7DH~7EH存放時(shí)數(shù)據(jù),每一地址單元內(nèi)均為十進(jìn)制BCD碼。由于采用軟件動(dòng)態(tài)掃描實(shí)現(xiàn)數(shù)據(jù)顯示功能,顯示用十進(jìn)制BCD碼數(shù)據(jù)的對(duì)應(yīng)段碼存放在ROM表中。示時(shí),先取出79H~7EH某一地址中的數(shù)據(jù),然后查得對(duì)應(yīng)的顯示用段碼從P1口輸出。P3口將對(duì)應(yīng)的數(shù)碼管選中,就能顯示該地址單元的數(shù)據(jù)值。DISPLAY:MOV R0,#79H ;建立顯示緩沖區(qū)首址 MOV R3,#0FEH ;從右數(shù)第一位顯示 MOV A,R3 ;掃描字放入ALD0: MOV P3,A ;從P3口輸出 MOV A,@R0 ;取顯示數(shù)據(jù)到A MOV DPTR,#TAB ;取段碼表地址 MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼 MOV P1,A ;段碼放P1口 ACALL DL10MS ;延時(shí)1MS INC R0 ;指向下一地址 MOV A,R3 JNB ACC.5,LD1 ;ACC.5=0一次顯示結(jié)束 RL A ;A中數(shù)據(jù)循環(huán)左移 MOV R3,A ;將位控碼送R3保存 AJMP LD0 ;繼續(xù)掃描LD1: RET DL10MS:MOVR5,#50LOOP1:MOVR7,#00LOOP0:MOVR6,#00DJNZR6,$;2VSDJNZR6,$DJNZR6,$DJNZR6,$DJNZR6,$;2VS DJNZR7,LOOP0DJNZR5,LOOP1RET⑶中斷服務(wù)程序(PITO)中斷服務(wù)程序的主要功能是進(jìn)行計(jì)時(shí)操作。程序開始先判斷計(jì)數(shù)溢出是否滿了8次,滿8次表明還沒達(dá)到最小計(jì)時(shí)單位秒,中斷返回;如滿8次則表明已達(dá)到最小計(jì)時(shí)單位秒,順序繼續(xù)向下執(zhí)行,進(jìn)行計(jì)時(shí)操作。中斷服務(wù)程序流程如圖9-8所示。中斷子程序清單:INTT0: PUSH ACC ;現(xiàn)場(chǎng)保護(hù) PUSH PSW SETB PSW.3 ;選1組通用寄存器 MOV TL0,#0DCH ;計(jì)數(shù)器重新加載 MOV TH0,#0CH MOV A,30H ;循環(huán)次數(shù)減1 DEC A MOV 30H,A JNZ RET0 ;不滿8次轉(zhuǎn)移 MOV 30H,#08H ;滿8次開始計(jì)時(shí) MOV R0,#7AH ;秒顯示緩沖單元 ACALL DAAD1 ;秒加1 MOV A,R2 ;加1后秒值在R2 XRL A,#60H ;判是否到60秒 JNZ RET0 ;不到轉(zhuǎn)移 ACALL CLR0 ;到60S顯示單元清0 MOV R0,#7CH ;分顯示緩沖單元地址 ACALL DAAD1 ;分加1 MOV A,R2 XRL A,#60H ;判是否到60分 JNZ RET0 ACALL CLR0 ;到60分顯示單元清0 MOV R0,#7EH ;時(shí)顯示緩沖單元地址 ACALL DAAD1 ;時(shí)加1 MOV A,R2 XRL A,#24H ;判是否24小時(shí) JNZ RET0 ACALL CLR0 ;到24小時(shí)清緩沖單元RET0: POP ACC ;現(xiàn)場(chǎng)恢復(fù) POP PSW RETI ;中斷返回⑷清緩沖單元子程序CLR0: CLR A ;清緩沖單元子程序 MOV @R0,A ;十位數(shù)緩沖單元清0 DEC R0 MOV @R0,A ;個(gè)位數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論