版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單片機(jī)單片機(jī)原理與應(yīng)用第4版習(xí)題答案第一章1.單片機(jī)內(nèi)部至少包含哪些部件?答:中央處理器CPU、I/O口、隨機(jī)存儲器RAM、只讀存儲器ROM。2.根據(jù)程序存儲器的差別,單片機(jī)可以分為哪幾種類型?答:MCS-51系列單片機(jī)按片內(nèi)不同程序存儲器的配置來分,可以分為以下3種類型:1、片內(nèi)帶MaskROM(掩膜ROM)型:例如8051、80C51、8052、80C52。此類芯片是由半導(dǎo)體廠家在芯片生產(chǎn)過程中,將用戶的應(yīng)用程序代碼通過掩膜工藝制作到ROM中。其應(yīng)用程序只能委托半導(dǎo)體廠家“寫入”,一旦寫入后不能修改。此類單片機(jī)適合大批量使用。2、片內(nèi)帶EPROM型:例如8751、87C51、8752。此類芯片帶有透明窗口,可通過紫外線擦除存儲器中的程序代碼,應(yīng)用程序可通過專門的編程器寫入到單片機(jī)中,需要更改時可擦除重新寫入。此類單片機(jī)價格較貴,不宜于大批量使用。3、片內(nèi)帶EEPROM(電可擦可編程只讀存儲器)型:例如8951、89C51、8952。此類芯片可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。此類單片機(jī)目前應(yīng)用很廣。4、片內(nèi)無ROM(ROMLess)型:例如8031、80C31、8032。此類芯片的片內(nèi)沒有程序存儲器,使用時必須在外部并行擴(kuò)展程序存儲器存儲芯片。此類單片機(jī)由于必須在外部并行擴(kuò)展程序存儲器存儲芯片,造成系統(tǒng)電路復(fù)雜,目前較少使用。3.單片機(jī)的主要特點(diǎn)是什么?它適宜構(gòu)成通用微機(jī)系統(tǒng)還是專用微機(jī)系統(tǒng)?為什么?答:單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的計算機(jī)系統(tǒng)。其主要特點(diǎn)如下:1、價格便宜。2、功能不大。只能專用在適用的領(lǐng)域,但在適用的領(lǐng)域中,性價比卻是最佳。3、可靠性高,抗干擾能力強(qiáng)。4、功耗比較低。對電源要求低,適用面廣。5、外圍擴(kuò)展能力強(qiáng)??梢詰?yīng)用到不同的控制系統(tǒng)中。根據(jù)其特點(diǎn)可知,單片機(jī)功能不大,不適宜構(gòu)成通用微機(jī)系統(tǒng),只適宜構(gòu)成專用微機(jī)系統(tǒng)。4.研制微機(jī)應(yīng)用系統(tǒng)時,應(yīng)如何選擇單片機(jī)的型號?答:在單片機(jī)應(yīng)用研究系統(tǒng)開發(fā)中,單片機(jī)是整個設(shè)計的核心。在進(jìn)行正式的單片機(jī)應(yīng)用研究系統(tǒng)開發(fā)之前,需要根據(jù)不同單片機(jī)的特性,從中作出合理的選擇。1.仔細(xì)調(diào)查市場,盡量選用主流的、貨源充足的單片機(jī)型號,這些器件使用比較廣泛,有許多設(shè)計資料供學(xué)習(xí)或參考。2.盡量選擇所需硬件集成在單片機(jī)內(nèi)部的型號,例如ADC、DAC、I2C、SPI和USB等。這樣便于整個控制系統(tǒng)的軟件管理,減少外部硬件的投入,縮小整體電路板的面積,從而減少總體投資等。3.對于手持設(shè)備,移動設(shè)備或者其他需要低功耗的設(shè)備,盡量選擇低電壓、低功耗的單片機(jī)型號,這樣可以減少能量的消耗,延長設(shè)備的使用壽命。4.在資金等條件允許的情況下,盡量選擇功能豐富,擴(kuò)展能力強(qiáng)的單片機(jī),這樣便于以后的功能升級和擴(kuò)展。5.對于體積有限制的產(chǎn)品,盡量選擇貼片封裝的單片機(jī)型號,這樣可以減少電路板面積,從而降低硬件成本,同時也有助于電磁兼容設(shè)計。第二章1.分別寫出一個MCS-51中ROM、EPROM、無ROM型單片機(jī)的型號和內(nèi)部資源。其中哪個產(chǎn)品內(nèi)部具有固化的軟件?該軟件能否被所有用戶所使用?怎樣使用該種產(chǎn)品?答:1、8051、80C51、8052、80C52。此類芯片帶有4K字節(jié)的掩膜ROM,由半導(dǎo)體廠家在芯片生產(chǎn)過程中,將用戶的應(yīng)用程序代碼通過掩膜工藝制作到ROM中。其應(yīng)用程序只能委托半導(dǎo)體廠家“寫入”,一旦寫入后不能修改。2、8751、87C51、8752。此類芯片帶有4K字節(jié)的EPROM,帶有透明窗口,可通過紫外線擦除存儲器中的程序代碼,應(yīng)用程序可通過專門的編程器寫入到單片機(jī)中,需要更改時可擦除重新寫入。3、8031、80C31、8032。此類芯片片內(nèi)無ROM,使用時必須在外部并行擴(kuò)展程序存儲器芯片。其中8051、80C51、8052、80C52等產(chǎn)品具有固化軟件,該軟件不能被所有用戶所使用,應(yīng)用程序只能委托半導(dǎo)體廠家“寫入”。2.MCS-51中無ROM型單片機(jī)在應(yīng)用中P2口和P0口能否直接作為輸入/輸出口連接開關(guān)、指示燈之類的外圍設(shè)備?為什么?答:不能。因為無ROM型單片機(jī)在應(yīng)用中必須擴(kuò)展程序存儲器,P0口必須作為地址總線的低8位及數(shù)據(jù)總線復(fù)用,P2口必須作為高8位地址總線送出高8位地址,因此P2口和P0口的輸出信號都是不穩(wěn)定的,不能直接作為輸入/輸出口連接開關(guān)、指示燈之類的外圍設(shè)備。3.什么是堆棧?8032的堆棧區(qū)可以設(shè)在什么地方?一般應(yīng)設(shè)在什么區(qū)域?如何實(shí)現(xiàn)?試舉例說明。答:堆棧是在片內(nèi)RAM中專門開辟出來的一個區(qū)域,數(shù)據(jù)的存取是以"后進(jìn)先出"的結(jié)構(gòu)方式處理的。實(shí)質(zhì)上,堆棧就是一個按照"后進(jìn)先出"原則組織的一段內(nèi)存區(qū)域。堆棧操作指令PUSHdirect、POPdirect只能采用直接尋址方式,8032的片內(nèi)RAM中只有低128字節(jié)可以采用直接尋址方式訪問,因此,盡管8032片內(nèi)RAM的地址范圍是00H-0FFH,但堆棧區(qū)只可以設(shè)在內(nèi)部RAM中的00H-7FH的區(qū)域內(nèi),一般應(yīng)設(shè)在30H-7FH的范圍內(nèi)??梢酝ㄟ^賦值的方式設(shè)置堆棧區(qū),如:MOVSP,#60H。4.8031的內(nèi)部RAM中,哪些可以作為數(shù)據(jù)緩沖區(qū)?答:8031內(nèi)部RAM的128字節(jié)均可以作為數(shù)據(jù)緩沖區(qū),但00H~1FH通常作為工作寄存器區(qū)使用,20H~2FH通常作為位尋址區(qū)使用。5.對于8052單片機(jī),地址為90H的物理單元有哪些?答:一個是P1口,P1口的物理地址就是90H,使用直接尋址方式訪問;還有一個是RAM單元,必須使用寄存器間接尋址方式訪問。6.MCS-51單片機(jī)構(gòu)成系統(tǒng)時,程序存儲器的容量最大是多少?答:MCS-51單片機(jī)構(gòu)成系統(tǒng)時,程序存儲器的容量最大是64KB。7.當(dāng)單片機(jī)系統(tǒng)的程序存儲器的容量為8KB時,程序存儲器的開始地址為多少?答:因為單片機(jī)復(fù)位時,PC=0000H,程序都是從0000H開始執(zhí)行,所以無論何種情況,程序存儲器的開始地址都必須是0000H。8.MCS-51單片機(jī)構(gòu)成系統(tǒng)時,外部數(shù)據(jù)存儲器的容量最大是多少?答:MCS-51單片機(jī)構(gòu)成系統(tǒng)時,外部存儲器的容量最大是64KB。9.當(dāng)單片機(jī)系統(tǒng)外部數(shù)據(jù)存儲器的容量為8KB時,數(shù)據(jù)存儲器的開始地址一定要是0000H嗎?答:不一定。10.什么是單片機(jī)的的節(jié)電方式?答:MCS-51系列運(yùn)行時耗電小,還提供兩種節(jié)電工作方式——空閑方式和掉電方式。在單片機(jī)空閑時程序停止運(yùn)行,進(jìn)入待機(jī)狀態(tài),在接收到一個中斷時退出空閑方式,處理完后繼續(xù)進(jìn)入空閑方式,就這樣斷斷續(xù)續(xù)的工作以達(dá)到節(jié)電目的。11.CHMOS型單片機(jī),進(jìn)入掉電方式時,單片機(jī)的振蕩器是否工作?采用什么辦法能使單片機(jī)退出掉電方式?答:不工作。在掉電方式中,振蕩器停止工作,單片機(jī)內(nèi)部所以功能部件停止工作。在掉電方式期間,內(nèi)部RAM和寄存器的內(nèi)容維持不變。退出掉電方式的唯一方法是硬件復(fù)位。12.CHMOS型單片機(jī),進(jìn)入空閑方式時,單片機(jī)的振蕩器是否工作?采用什么辦法能使單片機(jī)退出空閑方式?答:工作。進(jìn)入空閑方式中,中斷、串行口和定時器繼續(xù)工作。CPU現(xiàn)場、內(nèi)部RAM和其他特殊功能寄存器內(nèi)容維持不變。有兩種方法退出空閑方式,一是采用被允許的中斷源請求中斷;二是硬件復(fù)位,因為空閑方式中,振蕩器在工作,所以僅需兩個機(jī)器周期便完成復(fù)位。第三章1.指出下列指令中劃線操作數(shù)的尋址方式和指令的操作功能。答:MOVA,#78H;立即尋址,將立即數(shù)送入累加器AMOVA,78H;直接尋址,將內(nèi)部RAM78H單元內(nèi)容送累加器AMOVA,R6;寄存器尋址,將R6內(nèi)容送累加器AINC@R0;寄存器間接尋址,將指針R0指向的內(nèi)部RAM單元內(nèi)容加1PUSHACC;直接尋址,將累加器A的內(nèi)容入棧RLA;寄存器尋址,將累加器A的內(nèi)容左移1位CPL30H;位尋址,將位變量30H的內(nèi)容取反SJMP$;相對尋址,原地等待MOVCA,@A+PC;基寄存器加變址寄存器間接尋址,程序存儲器PC和累加器A中內(nèi)容相加形成ROM地址,取數(shù)送到累加器A。2.指出下列指令中哪些是非法的?INC@R1DECDPTRMOVA,@R2MOVR1,@R0MOVP1.1,30HMOV#30H,AMOV20H,21HMOVOV,30HMOVA,@A+DPTRRRC30HRLBANL20H,#30HXRLC,30H答:DECDPTRDECDPLMOVA,@R2MOVA,@R1MOVR1,@R0MOVA,@R0MOVP1.1,30HMOVC,30H和MOVP1.1,CMOV#30H,AMOVA,#30HMOVOV,30HMOVC,30H和MOVOV,CMOVA,@A+DPTRMOVCA,@A+DPTRRRC30HRRCA因為所有的移位指令均是對累積器A進(jìn)行的RLBRLAXRLC,30H錯,因為位操作指令中,沒有位的異或運(yùn)算3.如何將1個立即數(shù)30H送入內(nèi)部RAM90H單元?如何將立即數(shù)送特殊功能寄存器P1?答:(1)MOVR0,#90HMOV@R0,#30H(2)MOVP1,#30H4.執(zhí)行下列一段程序后,試分析有關(guān)單元內(nèi)容。答:MOVPSW,#0;(PSW)=00HMOVR0,#30H;(R0)=30HMOV30H,#40H(30H)=40HMOV40H,#50(40H)=32HMOVA,@R0(A)=40HADDCA,#0CEH(A)=40H+0CEH+0=0EHPSW=10000001B=81HINCR0(R0)=31H最后的執(zhí)行結(jié)果:(R0)=31H,(30H)=40H,(40H)=32H,(A)=0EH,(PSW)=81H5.試編寫一段程序,將內(nèi)部RAM40H、41H單元內(nèi)容傳送到外部RAM2000H、2001H單元中去。答:MOVDPTR,#2000HMOVR0,#40HMOVA,@R0MOVX@DPTR,AINCR0INCDPTRMOVA,@R0MOVX@DPTR,A6.試編寫一段程序,根據(jù)累加器A的內(nèi)容,到程序存儲器1000H起始的表格中取一雙字節(jié)數(shù),送內(nèi)部RAM50H、51H單元。答:MOVDPTR,#1000HPUSHACCMOVCA,@A+DPTRMOV50H,APOPACCINCDPTRMOVCA,@A+DPTRMOV51H,A7.試編寫一段程序,進(jìn)行兩個16位數(shù)的相減運(yùn)算:6483H-56E2H。結(jié)果高8位存內(nèi)部RAM40H,低8位存41H。答:CLRCMOVA,#83HSUBBA,#0E2HMOV41H,AMOVA,#64HSUBBA,#56HMOV40H,A8.試編寫一段程序,將30H、31H單元中存放的BCD數(shù),壓縮成一個字節(jié)(原30H單元內(nèi)容為高位),并放入30H單元。答:MOVA,30HSWAPAORLA,31HMOV30H,A9.試編寫一段程序,將30H~32H單元中的壓縮BCD拆成6個單字節(jié)BCD數(shù),并放入33H到38H單元。答:MOVA,30HMOVR0,#33HACALLLPMOVA,31HACALLLPMOVA,32HACALLLPSJMP$LP:MOVB,AANLA,#0FHMOV@R0,AINCR0MOVA,BSWAPAANLA,#0FHMOV@R0,AINCR0RET10.設(shè)晶振頻率為6MHz,試編寫一個延時1ms的子程序,并利用該子程序,編寫一段主程序,在P1.0引腳上輸出高電平寬2ms、低電平寬1ms的方波信號。答:機(jī)器周期T=2μs,延時1ms的子程序應(yīng)運(yùn)行500T,子程序為:DELAY:MOVR0,#248;1TDJNZR0,$;2TNOP;1TRET2T子程序運(yùn)行機(jī)器周期數(shù)為:1T+248*2T+1T+2T=500T,500T=1ms主程序為:MOVPSW,#00HLOOP:SETBP1.0ACALLDELAYACALLDELAYCLRP1.0ACALLDELAYSJMPLOOP第四章1.試根據(jù)P1口和P3口的結(jié)構(gòu)特性,指出它們作為輸入口或第二功能輸入/輸出的條件。答:P1口作為輸入口時,相應(yīng)的口鎖存器必須先置“1”,使輸出場效應(yīng)管T截止,CPU讀P1時才能準(zhǔn)確讀取外部電路的輸入信息。同理,P3口作為第二功能I/O口時,相應(yīng)的口鎖存器也必須先置“1”。2.MCS-51中無ROM型單片機(jī),在應(yīng)用中P0口和P2口能否直接作為輸入/輸出口連接開關(guān)、指示燈之類的外圍設(shè)備?為什么?答:不能。因為無ROM型單片機(jī)在應(yīng)用中必須擴(kuò)展程序存儲器,P0口必須作為地址總線的低8位及數(shù)據(jù)總線復(fù)用,P2口必須作為高8位地址總線送出高8位地址,因此P2口和P0口的輸出信號都是不穩(wěn)定的,不能直接作為輸入/輸出口連接開關(guān)、指示燈之類的外圍設(shè)備。3.什么是堆棧?堆棧的作用有哪些?答:堆棧是在片內(nèi)RAM中專門開辟出來的一個區(qū)域,數(shù)據(jù)的存取是以"后進(jìn)先出"的結(jié)構(gòu)方式處理的。實(shí)質(zhì)上,堆棧就是一個按照"后進(jìn)先出"原則組織的一段內(nèi)存區(qū)域。作用:(1)子程序調(diào)用和中斷服務(wù)時CPU自動將當(dāng)前PC值壓棧保存,返回時自動將PC值彈出堆棧。(2)保護(hù)現(xiàn)場/恢復(fù)現(xiàn)場(3)數(shù)據(jù)傳輸4.MCS-51的T0、T1的定時器和計數(shù)器的方式差別是什么?試舉例說明這兩種方式的用途。答:MCS-51的T0、T1的定時器和計數(shù)器本質(zhì)上都是計數(shù)器,定時器方式是對單片機(jī)內(nèi)部的機(jī)器周期數(shù)進(jìn)行計數(shù),計數(shù)器方式是對T0、T1引腳上輸入的外部脈沖(方波)信號進(jìn)行計數(shù)。定時器方式用來產(chǎn)生定時信號,可用于串行通信,也可以通過口輸出脈沖和方波信號;計數(shù)器方式可以用來檢測外部信號的頻率和脈寬。5.晶振為12MHz,用T0產(chǎn)生1ms的定時,可以選擇哪幾種方式?分別寫出定時器的方式字和計數(shù)初值。如需要1s的定時,應(yīng)如何實(shí)現(xiàn)?答:由于定時器工作在方式2和方式3下時的最大定時時間只有0.256ms,因此要想獲得1ms的定時時間,定時器必須工作在方式0或方式1。機(jī)器周期T=12×1/12×10-6s=1μs,計數(shù)值T計數(shù)=1ms/1μm=1000。1、采用方式0,定時器的方式字TMOD=00H,定時器的計數(shù)初值為TC=M-T/T計數(shù)=213-1*103/1=7192=1C18H,TH0應(yīng)裝#1CH;TL0應(yīng)裝#18H。2、采用方式1,定時器的方式字TMOD=01H,定時器的計數(shù)初值為TC=M-T/T計數(shù)=216-1*103/1=64536=FC18H,TH0應(yīng)裝#0FCH;TL0應(yīng)裝#18H。如需要1s的定時,可以采用查詢相應(yīng)溢出標(biāo)志位,結(jié)合軟件計數(shù)100循環(huán),即可實(shí)現(xiàn)1s的定時。6.晶振為12MHz,如何用T0來測試20Hz~1000Hz之間的方波信號(設(shè)高低電平寬度相同)的周期?又如何測試頻率為0.5MHz左右的脈沖頻率?答:1、使用定時器方式,利用方波的邊沿觸發(fā)定時器的開始與結(jié)束,比如使用上升沿來啟動定時器計數(shù),機(jī)器周期T為1μs,下降沿停止計數(shù)。依據(jù)計數(shù)值N計算周期,周期=2N*T。2、T0工作在計數(shù)器方式,待測試的脈沖信號引入T0引腳計數(shù),同時T1工作在定時器方式,定時1ms,1ms定時結(jié)束時取T0計數(shù)值,脈沖頻率=1000*T0計數(shù)值。7.若晶振為11.0592MHz,串行口工作于方式1、波特率為4800bit/s,分別寫出用T1、T2作為波特率發(fā)生器的方式字和計數(shù)初值。答:T1作為波特率發(fā)生器。由:波特率=2SMOD*振蕩器頻率/[32*12*(256-X)]設(shè)SMOD=0,可得,4800=20*11059200/32/12/(256-X),可得的計數(shù)初值X=250=0FAH,將X值裝入TH1中,TMOD=20H。MOVTMOD,#20H;T1方式2MOVTH1,#0FAHT2作為波特率發(fā)生器,需對T2CON(置“1”TCLK、RCLK)、TH2、TL2、RCAP2H、RCAP2L初始化編程,再置“1”TR2,具體略。8.串行口方式0能否外接多個74LS164?若不可以,說明原因;若可以,畫出邏輯框圖并說明數(shù)據(jù)輸出方法。答:串口工作方式0時,可以外接多個74LS164。此時TXD用于發(fā)送同步脈沖接74LS164的CLK端,RXD用于發(fā)送數(shù)據(jù)接第一片74LS164的數(shù)據(jù)輸入端DSA和DSB,74LS164的/CR和Vcc端接+5V,Vss端接地,后一片74LS164的數(shù)據(jù)輸入端DSA和DSB接前一片74LS164的Q7。只要將數(shù)據(jù)載入SUBF之后,時鐘脈沖和數(shù)據(jù)就會自動出現(xiàn)在單片機(jī)的I/O端口,程序不需要對I/O口再進(jìn)行干預(yù)。出現(xiàn)在74LS164的數(shù)據(jù)低位在右,高位在左。將數(shù)據(jù)多次載入SUBF,就可以在多個74LS164的輸出端得到穩(wěn)定的數(shù)據(jù)。邏輯框圖略,可參考教材的例4-8.9.MCS-51的中斷處理程序能否存儲在64KB程序存儲器的任意區(qū)域?若可以,如何實(shí)現(xiàn)?答:可以。因為每個中斷源的中斷入口地址處均預(yù)留了8個單元的空間,8個單元足夠存放一條跳轉(zhuǎn)指令,使程序轉(zhuǎn)向64KB程序存儲區(qū)的任意區(qū)域。在相應(yīng)的中斷入口使用JMP指令進(jìn)行跳轉(zhuǎn)就可以實(shí)現(xiàn)。10.在一個8031系統(tǒng)中,晶振為12MHz,一個外部中斷請求信號是一個寬度為500ms的負(fù)脈沖,則應(yīng)該采用哪種中斷觸發(fā)方式,如何實(shí)現(xiàn)?答:應(yīng)該采用邊沿觸發(fā)方式,采用SETBIT0或SETBIT1即可。若采用電平觸發(fā)方式,由于外部中斷請求信號長期存在,可能會引起重復(fù)中斷。11.若外部中斷請求信號是一個低電平有效的信號,是否一定要選擇電平觸發(fā)方式?為什么?答:不一定。因為采用邊沿觸發(fā),能自動鎖存中斷信號,是一種可靠的中斷管理方式。第五章1.若晶振為6MHz,試編寫一個2ms延時子程序。答:晶振為6MHz,機(jī)器周期T為2μs,應(yīng)計滿1000個T。DELAY:MOVR7,#10DLY0:MOVR6,#49DLY1:DJNZR6,DLY1;2TDJNZR7,DLY0;2TRET2.試編制一個子程序,對串行口初始化,使串行口以方式1,波特率1200bit/s(晶振為11.059MHz)發(fā)送字符串“MCS-51”。答:ORG0000HAJMPMAINORG0100HMAIN:MOVTMOD,#20HMOVTL1,#0E8HMOVTH1,#0E8HSETBTR1MOVSCON,#42HMOVR4,#0MOVDPTR,#TABFS1:MOVA,R4MOVCA,@A+DPTRCJNER4,#6,FS2SJMPFSJSFS2:JBCTI,FS3SJMPFS2FS3:MOVSBUF,AINCR4SJMPFS1FSJS:SJMP$TAB:‘M’,‘C’,‘S’,‘-’,‘5’,‘1’END3.晶振為11.059MHz,串行口工作與方式3,波特率為2400bit/s,第9位數(shù)據(jù)為奇校驗位。編制一個程序,對串行口初始化,并用查詢方式接受串行口上輸入的10個字符存入內(nèi)部RAM中30H開始的區(qū)域。答:RECS: MOV SCON,#0D0H;串行口方式3允許接收 MOV TMOD,#20H;T1方式2定時 MOV TL1,#0F4H;寫入T1時間常數(shù) MOV TH1,#0F4H SETBTR1 ;啟動T1 MOV R0,#30H;設(shè)數(shù)據(jù)指針 MOV R7,#10 ;接收數(shù)據(jù)長度WAIT: JBC RI,NEXT ;等待串行口接收SJMPWAIT NEXT: MOV A,SBUF ;取一個接收字符 JNB P,COMP ;奇偶校驗 JNB RB8,ERR ;P≠RB8,數(shù)據(jù)出錯 SJMPRIGHT ;P=RB8,數(shù)據(jù)正確COMP: JB RB8,ERRRIGHT: MOV @R0,A;保存一個字符 INC R0 ;修改指針 DJNZR7,WAIT ;全部字符接收完? CLR F0 ;F0=0,接收數(shù)據(jù)全部正確ERR:SETBF0 ;F0=1,接收數(shù)據(jù)出錯 RET4.寫一個子程序,其功能是將(R0)指出的兩個RAM單元中的數(shù)轉(zhuǎn)化為ASCII字符,并用查詢方式從串行口上發(fā)送出去。答:設(shè)串行口以方式1工作,波特率為1200bit/s,晶振為11.059MHz。ORG0000HAJMPMAINORG0100HMAIN:MOVTMOD,#20HMOVTL1,#0E8HMOVTH1,#0E8HSETBTR1MOVSCON,#42HMOVR4,#2FS1:MOVA,@R0ANLA,#0FHMOVDPTR,#TABMOVCA,A+DPTRFS2:JBCTI,FS3SJMPFS2FS3:MOVSBUF,AINCR0DJNZR4,FS1FSJS:SJMP$TAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,41H,43H,44H,45H,46HEND5.試編寫一個子程序?qū)⒆址癕CS-51Microcomputer”裝入外部RAM8000H開始的顯示緩沖區(qū)。答:ORG0000HAJMP0030HMIAN:MOVDPTR,#8000HMOVR1,#0MOVR0,#20LOOP:MOVA,R1ADDA,#6MOVCA,@A+PCMOVX@DPTR,AINCDPTRINCR1DJNZR0,LOOPSJMP$TAB:DB‘MCS-51Microcomputer’END6.試設(shè)計一個n字節(jié)的無符號十進(jìn)制數(shù)加法子程序,其功能為將(R0)和(R1)指出的內(nèi)部RAM中兩個n字節(jié)壓縮BCD碼無符號十進(jìn)制數(shù)相加,結(jié)果存放于被加數(shù)單元中。子程序入口時,R0,R1分別指向被加數(shù)和加數(shù)的低位字節(jié),字節(jié)數(shù)n存于R2,出口時R0指向和的最高位字節(jié),CY為進(jìn)位位。答:LENEQUnORG0000HAJMPMAINORG0030HMAIN:MOVSP.#60HMOVR2,#LENACALLADD_NBYTESJMP$ADD_NBYTE:CLRCLOOP:MOVA,@R0ADDCA,@R1DAAMOV@R0,AINCR0INCR1DJNZR2,LOOPRETEND7.試設(shè)計一個n字節(jié)的無符號十進(jìn)制數(shù)減法子程序,其功能是將R0指出的內(nèi)部RAM中n字節(jié)無符號壓縮BCD碼減去(R1)指出的內(nèi)部RAM中n字節(jié)無符號壓縮BCD碼,結(jié)果存放在被減數(shù)單元中。子程序入口時,R0,R1分別指向被減數(shù)和減數(shù)的低位字節(jié),字節(jié)數(shù)n存于R2,出口R0指向差的高位字節(jié),CY=1為正,CY=0為負(fù),結(jié)果為補(bǔ)碼。答:以n=2為例。將2字節(jié)無符號壓縮BCD碼被減數(shù)轉(zhuǎn)換4位BCD碼,存入60H~63H,再轉(zhuǎn)換為二進(jìn)制數(shù),存R3R4。MOVA,@R0ANLA,#0FHMOV63H,AMOVA,@R0SWAPAANLA,#0FHMOV62H,AINCR0MOVA,@R0ANLA,#0FHMOV63H,AMOVA,@R0SWAPAANLA,#0FHMOV62H,ADTB:MOVR0,#60HMOVR3,#3MOVR3,#0MOVA,@R0MOVR4,ALOOP:MOVA,R4MOVB,#10MULABMOVR4,AMOVA,BXCHA,R3MOVB,#10MULABADDA,R3MOVR3,AINCR0MOVA,R4ADDA,@R0MOVR4,AMOVA,R3ADDCA,#0MOVR3,ADJNZR2,LOOP用相同程序可將2字節(jié)無符號壓縮BCD碼減數(shù)轉(zhuǎn)換4位BCD碼,存入60H~63H,再轉(zhuǎn)換為二進(jìn)制數(shù),存R5R6。雙字節(jié)無符號數(shù)減法程序,差存入R7R1NSUB1:MOVA,R4CLRCSUBBA,R6MOVR1,AMOVA,R3SUBBA,R5MOVR7,AJBCPOUTCMPT:MOVA,R1;負(fù)數(shù)求補(bǔ)CPLAADDA,#1MOVR1,AMOVA,R7CPLAADDCA,#0MOV@R0,ADECR0MOV@R0,R1INCR0RET8.試設(shè)計一個子程序,其功能為判斷R2R3R4R5中的壓縮BCD碼十進(jìn)制數(shù)最高位是否為0,若最高位為0,且該十進(jìn)制數(shù)不為0,則通過左移使最高位不為0。略9.試設(shè)計一個雙字節(jié)無符號整數(shù)乘法子程序,其功能將R3R2和R5R4相乘,積存于30H-33H單元。答:MULTB:CLRAMOV30H,AMOV31H,AMOV32H,AMOV33H,AMOVR0,#30HMOVA,R2MOVB,R4MULABACALLRADDMOVA,R2MOVB,R5MULABDECR0ACALLRADDMOVA,R4MOVB,R3MULABDECR0DECR0ACALLRADDMOVA,R5MOVB,R3MULABDECR0ACALLRADDSJMP$RADD:ADDA,@R0MOV@R0,AMOVA,BINCR0ADDCA,@R0MOV@R0,AINCR0MOVA,@R0ADDCA,#00HMOV@R0,ARET10.試設(shè)計一個子程序,其功能將無符號二進(jìn)制整數(shù)R2R3R4R5除以R6R7,其商存放于30H,31H單元,余數(shù)存于R2R3。略11.試設(shè)計一個子程序,其功能為將R0指出的內(nèi)部RAM中6個單字節(jié)正整數(shù)按從小到大的次序重新排列。答:ORG0200HMOV30H,#6SUM1EQU30HSUM2EQU31HLOOP1:MOVA,R0INCAMOVR1,AMOVSUM2,SUM1DJNZSUM1,LOOP2SJMPDONELOOP2:DJNZSUM2,LOOP3SJMPLOOP1LOOP3:MOVA,@R0CLRCSUBBA,@R1JCNEXTXCHA,@R1MOV@R0,ANEXT:INCR0INCR1SJMPLOOP2DONE:END12.試設(shè)計一個子程序,其功能為應(yīng)用查表指令:MOVCA,@A+PC,求累加器A的平方值,結(jié)果送入A,入口時A<15。答:MEMO:INCAMOVCA,@A+PCRETTAB:DB0,1,4,9,16,25,36,49DB64,81,100,121,144,169,196,22513.試設(shè)計一個子程序,其功能將R0指出的內(nèi)部RAM中雙字節(jié)壓縮BCD碼轉(zhuǎn)化為二進(jìn)制數(shù)存放于R1指出的內(nèi)部RAM中,并將結(jié)果再轉(zhuǎn)化為BCD碼存放于30H開始的單元中。答:先將壓縮BCD碼轉(zhuǎn)化為BCD碼存放于30H開始的單元中MOVR2,R0MOVA,@R0PUSHACCANLA,#0FHMOV30H,APOPACCSWAPAANLA,#0FHMOV31H,AINCR0MOVA,@R0PUSHACCANLA,#0FHMOV32H,APOPACCSWAPAANLA,#0FHMOV33H,AMOVA,31H;((R1))=(31H)*10+(30H)MOVB,#10MULABADDA,30HMOV@R1,AMOVA,32H;((R1)+1)((R1))=(32H)*100+((R1))MOVB,#100MULABADDA,@R1MOV@R1,AINCR1MOVA,BADDCA,@R1MOV@R1,AMOVA,33H;((R1)+1)((R1))=(33H)*1000+((R1)+1)((R1))MOVB,#232MULABDECR1ADDA,@R1PUSHPSWMOV@R1,AINCR1MOV@R1,BMOVA,33HMOVB,#3MULABPOPPSWADDCA,@R1MOV@R1,A14.若晶振為6MHz,用T0產(chǎn)生500us的定時中斷,試編寫有關(guān)的初始化程序和對時鐘進(jìn)行計數(shù)的T0中斷服務(wù)程序。時鐘計數(shù)單元為:30H,31H,32H,分別存放壓縮BCD碼的時分秒?yún)?shù)。答:晶振為6MHz,機(jī)器周期T為2μs,500us=250T,T0可以工作在方式2。有關(guān)的初始化程序和對時鐘進(jìn)行計數(shù)的T0中斷服務(wù)程序如下:ORG0000HSJMPMAINORG000BHSJMPPT0ORG0030HMAIN:MOVTMOD,#02HMOVTH0,#6MOVIE,82HSETBTR0CLRAMOV30H,AMOV31H,AMOV32H,AMOV33H,AMOV34H,AMOV35H,AMOVR7,#40MOVR6,#50SJMP$PT0:DJNZR7,A1MOVR7,#40DJNZR6,A1MOVR6,#50INC33HCJNE33H,#60,A2MOV33H,#0MOV30H,#0INC34HCJNE34H,#60,A3MOV34H,#0MOV31H,#0INC35HCJNE35H,#24,A4MOV35H,#0MOV32H,#0A1:RETIA2:MOVA,33HMOVB,#10DIVABSWAPAMOV30H,BMOVR0,#30HXCHDA,@R0MOV30H,ASJMPA1A3:MOVA,34HMOVB,#10DIVABSWAPAMOV31H,BMOVR0,#31HXCHDA,@R0MOV31H,ASJMPA1A4:MOVA,35HMOVB,#10DIVABSWAPAMOV32H,BMOVR0,#32HXCHDA,@R0MOV32H,ASJMPA115.在一個8031系統(tǒng)中,晶振為12MHz,P1口上輸入8路脈沖,頻率為0.1-3Hz,現(xiàn)用T0產(chǎn)生1ms定時,由T0中斷服務(wù)程序讀P1口的狀態(tài),若發(fā)生上跳則該路軟件計數(shù)單元加1,每到1分鐘將各路計數(shù)值拆分成2位十六進(jìn)制數(shù)送顯示緩沖區(qū)70H-7FH,并清零各計數(shù)器,試編寫有關(guān)程序。答:設(shè)置8路脈沖計數(shù)值緩沖區(qū)60H-67H,機(jī)器周期T=1μs,1ms=1000T,T0工作在方式1,ORG0000HSJMPMAINORG000BHSJMPPT0ORG0030HMAIN:MOVTMOD,#01HMOVTH0,#0FCHMOVTL0,#18HMOVIE,82HSETBTR0CLRAMOV60H,AMOV61H,AMOV62H,AMOV63H,AMOV64H,AMOV65H,AMOV66H,AMOV67H,AMOV70H,AMOV71H,AMOV72H,AMOV73H,AMOV74H,AMOV75H,AMOV76H,AMOV77H,AMOV78H,AMOV79H,AMOV7AH,AMOV7BH,AMOV7CH,AMOV7DH,AMOV7EH,AMOV7FH,AMOVR7,#8MOVR0,#60HMOVR1,#70HMOV68H,P1MOV69H,P1SJMP$PT0:MOV6AH,P1MOV6BH,P1PUSHACCA3:MOVA,68HRRCAMOV68H,AJCA0MOVA,6AHRRCAMOV6AH,AJNCA1INC@R0MOVA,@R0ANLA,#0FHMOV@R1,AMOVA,@R0SWAPAANLA,#0FHINCR1MOV@R1,ADECR1A2:INCR0INCR1INCR1DJNZR7,A3MOV68H,6BHPOPACCRETIA0:MOVA,6AHRRCAMOV6AH,AA1:SJMPA216.在某應(yīng)用系統(tǒng)中,有A-T20個單字符合法命令,這些命令的處理程序入口地址依次存放在標(biāo)號為CADR開始的地址表中,若輸入的命令字符存放于A,試編寫一個散轉(zhuǎn)程序,其功能為:若(A)為非法字符,則轉(zhuǎn)CDER;若為合法字符,則轉(zhuǎn)相應(yīng)的入口地址。答:A-T字符對應(yīng)的ASC碼16進(jìn)制數(shù)為41H-54H,散轉(zhuǎn)程序為:PUSHACCCLRCSUBBA,#55HJNCCDERPOPACCPUSHACCCLRCSUBBA,#41HJCCDERPOPACCMOVB,#3MULABMOVDPTR,#CADRJMP@A+DPTRCADR:LJMPPGALJMPPGB…CDER:非法字符處理第六章一個8051擴(kuò)展系統(tǒng),用線選法最多可以擴(kuò)展幾片6264?畫出原理圖,并確定每片6264的地址范圍解:一個8051擴(kuò)展系統(tǒng),用線選法最多可以擴(kuò)展3片6264。擴(kuò)展電路中6264的地址線A0-A12與地址鎖存器373的輸出及P2.0-P2.4的對應(yīng)線相連,6264的數(shù)據(jù)線D0-D7與P0口對應(yīng)相連,6264的讀寫控制端和與8051的和對應(yīng)相連,三個6264的片選信號端分別接8051的P2.5,P2.6,P2.7。第一片
(1100
)0000
0000
0000
————(1101)FFFF
FFFF
FFFFC000
H
DFFFH
第二片
(1010)0000
0000
0000
————(1011)FFFF
FFFF
FFFF
A000H
BFFFH
第三片
(0110)0000
0000
0000
————(0111)FFFF
FFFF
FFFF
6000H
7FFFHMCS-51單片機(jī)用地址譯碼法最多可擴(kuò)展多少片6264?它們的地址范圍各是多少?試畫出其邏輯圖。解:最多可擴(kuò)展8片6264,地址范圍如下:第一片:0000H-1FFFH第二片:2000H-3FFFH第三片:4000H-5FFFH第四片:6000H-7FFFH第五片:8000H-9FFFH第六片:0A000H-0BFFFH第七片:0C000H-0DFFFH第八片:0E000H-0FFFFH一個8032擴(kuò)展系統(tǒng),擴(kuò)展了一片27256、一片62256、一片74LS377、一片74LS245、一片8255、一片0809、一片0832,試畫出其邏輯圖,并寫出各器件的地址范圍。解:8032擴(kuò)展一片27256、一片62256的邏輯圖如圖所示,P2.7低電平時可選中62256,27256、62256的地址范圍均為0000H-7FFFH。采用3-8譯碼器使用全地址譯碼法連接其他芯片,采用P2.0、P2.1、P2.2作為3-8譯碼器的輸入信號,P2.7作為3-8譯碼器的使能信號,只有當(dāng)P2.7=1,3-8譯碼器才有有效低電平輸出。設(shè)3-8譯碼器的Y0連74LS377的片選信號端,8032的連74LS377的CLK端,則74LS377的地址范圍為:8000H-8FFFH;設(shè)3-8譯碼器的Y1連74LS245的片選信號端,8032的連74LS245的DIR端,則74LS245的地址范圍為:9000H-9FFFH;設(shè)3-8譯碼器的Y2連8255的片選信號端,地址鎖存器373的輸出A0、A1分別接8255的A0、A1,8032的、連8255的、端,則8255的PA口地址范圍為:1010XXXXXXXXXX00;PB口地址范圍為:1010XXXXXXXXXX01;PC口地址范圍為:1010XXXXXXXXXX10;控制口地址范圍為:1010XXXXXXXXXX11。X為0和1之間的任意數(shù)。設(shè)3-8譯碼器的Y3與8032的、信號分別或非后連0809的端及START/ALE并連端,0809的EOC端經(jīng)非門連接8032的,8032的ALE經(jīng)2分頻后接0809的CLOCK端,地址鎖存器373的輸出A0、A1、A2分別接0809的A0、A1、A2,則0809的8個通道地址范圍為:1011XXXXXXXXX000、1011XXXXXXXXX001、1011XXXXXXXXX010、1011XXXXXXXXX011、1011XXXXXXXXX100、1011XXXXXXXXX101、1011XXXXXXXXX110、1011XXXXXXXXX111。設(shè)3-8譯碼器的Y4接0832的片選信號端/并連端,8032的接0832的/并連端,則0832的地址范圍為:1100XXXXXXXXXXXX。部分邏輯圖略。在一個89C51擴(kuò)展系統(tǒng)中,P2口接I/O設(shè)備,P0口做擴(kuò)展總線口使用,擴(kuò)展一片8255、一片0832,試畫出其邏輯圖,并編寫一個初始化程序,使8255的PA、PC口為方式0輸出,PB口以方式0輸入。解:由于8255A內(nèi)部已有數(shù)據(jù)總線驅(qū)動器,可以直接與MCS-51單片機(jī)總線相連接。下圖是8255A與MCS-51單片機(jī)的一種連接方法。由于P2口接I/O設(shè)備,應(yīng)采用MOVX@Ri,A、MOVXA,@Ri類指令訪問8255和0832,74LS373的Q7連8255的端,Q6連0832的端和端,其他如上圖和教材圖6-32所示。8255的A口地址為70H、B口地址為71H、C口地址為72H、控口地址為73H,0832地址為0DFH,8255的控制字為10000010B,初始化程序為:MOVR0,#73HMOVA,#10000010BMOVX@R0,A5.試編制一個程序,使0832輸出一個幅度為4V的三角波形。解:設(shè)0832地址為7FFFH,外接基準(zhǔn)電壓為0-5V,4V對應(yīng)的數(shù)值為4*255/5=204ORG0000H
JMPSTARTORG0030H
START:CLRALOOP:MOVDPTR,#7FFFH;該循環(huán)產(chǎn)生上升波形MOVX@DPTR,AINCA
CALLDEL1;延時
CJNEA,#204,LOOP
LOOP1:MOVDPTR,#7FFFH;該循環(huán)產(chǎn)生下降波形
MOVX@DPTR,ADECACALLDEL1;延時
JNZLOOP1
SJMPLOOP
DEL1:MOVR6,#2;延時子程序
DEL2:MOVR7,#250DJNZR7,DEL2;內(nèi)循環(huán)250遍
DJNZR6,DEL1;外循環(huán)2遍
RET
END晶振頻率為12MHz,利用程序存儲器中0E00H~0FFFH表格內(nèi)的512B數(shù)據(jù),通過D/A轉(zhuǎn)換,產(chǎn)生頻率約為1Hz的正弦周期波形,試編制有關(guān)程序。解:設(shè)D/A轉(zhuǎn)換器0832的地址為0DFFFH,則8032正弦波電壓輸出程序如下:MOVR5,#00HSIN:MOVA,R5MOVDPTR,#0E00HMOVA,@A+DPTRMOVDPTR,#0DFFFHMOV@DPTR,AINCR5AJMPSINORG0E00HTAB:DB:808386898D909396999C9FA2A5A8ABAEB1B4B7BABCBFC2C5C7CACCCFD1D4D7D6DADDDFE1E3E5E7E9EAECEEEFF1F2F4F5F6F7F8F9FAFBFCFDFDFCFBFAF9F8F7F6F5F4F2F1EFEEECEAE9E7E5E3E1DEDDDAD8D6D4D1CFCCCAC7C5C2BFBCBAB7B4B1AEABA8A5A29F9C999693908D89868380807C7976726F6C696663605D5A5755514E4C484543403D3A383533302E2B29272522201E1C1A1816151311100E0D0B0A09080706050403020201000000000000000000000000010202030405060708090A0B0D0E1011131516181A1C1E202225
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工廠代工合同范例
- 綠化草皮合同范例
- 沙坪壩區(qū)家電運(yùn)輸合同范例
- 建筑管網(wǎng)安裝合同范例
- 產(chǎn)品抵押工資合同范例
- 個人欠款合同范例范例
- 烘焙合作協(xié)議合同范例
- 家具駐廠安裝合同范例
- 加盟運(yùn)營合同范例
- 建設(shè)工程施工合同范例
- 江蘇省南通市崇川區(qū)啟秀中學(xué)2021-2022學(xué)年九年級上學(xué)期期末物理試卷
- 2021-2022學(xué)年四川省成都市高新區(qū)人教版四年級上冊期末考試數(shù)學(xué)試卷(原卷版)
- 倉庫整改報告PPT
- 以甘蔗為原料年產(chǎn)10萬噸生物乙醇工廠設(shè)計
- 養(yǎng)老機(jī)構(gòu)養(yǎng)老院服務(wù)安全風(fēng)險分級管控清單
- 單位內(nèi)發(fā)生治安案件、涉嫌刑事案件的報告制度
- 陶藝課程講義
- 幼兒園一日活動保教工作標(biāo)準(zhǔn)細(xì)則
- 銀行統(tǒng)計報送工作實(shí)施細(xì)則
- 【實(shí)用文檔】生產(chǎn)制造過程流程圖
- 中國頸椎病診治與康復(fù)指南
評論
0/150
提交評論