單片機單片機原理與應用-第4版-習題答案(趙德安)_第1頁
單片機單片機原理與應用-第4版-習題答案(趙德安)_第2頁
單片機單片機原理與應用-第4版-習題答案(趙德安)_第3頁
單片機單片機原理與應用-第4版-習題答案(趙德安)_第4頁
單片機單片機原理與應用-第4版-習題答案(趙德安)_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

付費下載

下載本文檔

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

文檔簡介

單片機單片機原理與應用第4版習題答案第一章1.單片機內部至少包含哪些部件?答:中央處理器CPU、I/O口、隨機存儲器RAM、只讀存儲器ROM。2.根據程序存儲器的差別,單片機可以分為哪幾種類型?答:MCS-51系列單片機按片內不同程序存儲器的配置來分,可以分為以下3種類型:1、片內帶MaskROM(掩膜ROM)型:例如8051、80C51、8052、80C52。此類芯片是由半導體廠家在芯片生產過程中,將用戶的應用程序代碼通過掩膜工藝制作到ROM中。其應用程序只能委托半導體廠家“寫入”,一旦寫入后不能修改。此類單片機適合大批量使用。2、片內帶EPROM型:例如8751、87C51、8752。此類芯片帶有透明窗口,可通過紫外線擦除存儲器中的程序代碼,應用程序可通過專門的編程器寫入到單片機中,需要更改時可擦除重新寫入。此類單片機價格較貴,不宜于大批量使用。3、片內帶EEPROM(電可擦可編程只讀存儲器)型:例如8951、89C51、8952。此類芯片可以在電腦上或專用設備上擦除已有信息,重新編程。此類單片機目前應用很廣。4、片內無ROM(ROMLess)型:例如8031、80C31、8032。此類芯片的片內沒有程序存儲器,使用時必須在外部并行擴展程序存儲器存儲芯片。此類單片機由于必須在外部并行擴展程序存儲器存儲芯片,造成系統電路復雜,目前較少使用。3.單片機的主要特點是什么?它適宜構成通用微機系統還是專用微機系統?為什么?答:單片機是一種集成電路芯片,是采用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊硅片上構成的一個小而完善的計算機系統。其主要特點如下:1、價格便宜。2、功能不大。只能專用在適用的領域,但在適用的領域中,性價比卻是最佳。3、可靠性高,抗干擾能力強。4、功耗比較低。對電源要求低,適用面廣。5、外圍擴展能力強。可以應用到不同的控制系統中。根據其特點可知,單片機功能不大,不適宜構成通用微機系統,只適宜構成專用微機系統。4.研制微機應用系統時,應如何選擇單片機的型號?答:在單片機應用研究系統開發中,單片機是整個設計的核心。在進行正式的單片機應用研究系統開發之前,需要根據不同單片機的特性,從中作出合理的選擇。1.仔細調查市場,盡量選用主流的、貨源充足的單片機型號,這些器件使用比較廣泛,有許多設計資料供學習或參考。2.盡量選擇所需硬件集成在單片機內部的型號,例如ADC、DAC、I2C、SPI和USB等。這樣便于整個控制系統的軟件管理,減少外部硬件的投入,縮小整體電路板的面積,從而減少總體投資等。3.對于手持設備,移動設備或者其他需要低功耗的設備,盡量選擇低電壓、低功耗的單片機型號,這樣可以減少能量的消耗,延長設備的使用壽命。4.在資金等條件允許的情況下,盡量選擇功能豐富,擴展能力強的單片機,這樣便于以后的功能升級和擴展。5.對于體積有限制的產品,盡量選擇貼片封裝的單片機型號,這樣可以減少電路板面積,從而降低硬件成本,同時也有助于電磁兼容設計。第二章1.分別寫出一個MCS-51中ROM、EPROM、無ROM型單片機的型號和內部資源。其中哪個產品內部具有固化的軟件?該軟件能否被所有用戶所使用?怎樣使用該種產品?答:1、8051、80C51、8052、80C52。此類芯片帶有4K字節的掩膜ROM,由半導體廠家在芯片生產過程中,將用戶的應用程序代碼通過掩膜工藝制作到ROM中。其應用程序只能委托半導體廠家“寫入”,一旦寫入后不能修改。2、8751、87C51、8752。此類芯片帶有4K字節的EPROM,帶有透明窗口,可通過紫外線擦除存儲器中的程序代碼,應用程序可通過專門的編程器寫入到單片機中,需要更改時可擦除重新寫入。3、8031、80C31、8032。此類芯片片內無ROM,使用時必須在外部并行擴展程序存儲器芯片。其中8051、80C51、8052、80C52等產品具有固化軟件,該軟件不能被所有用戶所使用,應用程序只能委托半導體廠家“寫入”。2.MCS-51中無ROM型單片機在應用中P2口和P0口能否直接作為輸入/輸出口連接開關、指示燈之類的外圍設備?為什么?答:不能。因為無ROM型單片機在應用中必須擴展程序存儲器,P0口必須作為地址總線的低8位及數據總線復用,P2口必須作為高8位地址總線送出高8位地址,因此P2口和P0口的輸出信號都是不穩定的,不能直接作為輸入/輸出口連接開關、指示燈之類的外圍設備。3.什么是堆棧?8032的堆棧區可以設在什么地方?一般應設在什么區域?如何實現?試舉例說明。答:堆棧是在片內RAM中專門開辟出來的一個區域,數據的存取是以"后進先出"的結構方式處理的。實質上,堆棧就是一個按照"后進先出"原則組織的一段內存區域。堆棧操作指令PUSHdirect、POPdirect只能采用直接尋址方式,8032的片內RAM中只有低128字節可以采用直接尋址方式訪問,因此,盡管8032片內RAM的地址范圍是00H-0FFH,但堆棧區只可以設在內部RAM中的00H-7FH的區域內,一般應設在30H-7FH的范圍內。可以通過賦值的方式設置堆棧區,如:MOVSP,#60H。4.8031的內部RAM中,哪些可以作為數據緩沖區?答:8031內部RAM的128字節均可以作為數據緩沖區,但00H~1FH通常作為工作寄存器區使用,20H~2FH通常作為位尋址區使用。5.對于8052單片機,地址為90H的物理單元有哪些?答:一個是P1口,P1口的物理地址就是90H,使用直接尋址方式訪問;還有一個是RAM單元,必須使用寄存器間接尋址方式訪問。6.MCS-51單片機構成系統時,程序存儲器的容量最大是多少?答:MCS-51單片機構成系統時,程序存儲器的容量最大是64KB。7.當單片機系統的程序存儲器的容量為8KB時,程序存儲器的開始地址為多少?答:因為單片機復位時,PC=0000H,程序都是從0000H開始執行,所以無論何種情況,程序存儲器的開始地址都必須是0000H。8.MCS-51單片機構成系統時,外部數據存儲器的容量最大是多少?答:MCS-51單片機構成系統時,外部存儲器的容量最大是64KB。9.當單片機系統外部數據存儲器的容量為8KB時,數據存儲器的開始地址一定要是0000H嗎?答:不一定。10.什么是單片機的的節電方式?答:MCS-51系列運行時耗電小,還提供兩種節電工作方式——空閑方式和掉電方式。在單片機空閑時程序停止運行,進入待機狀態,在接收到一個中斷時退出空閑方式,處理完后繼續進入空閑方式,就這樣斷斷續續的工作以達到節電目的。11.CHMOS型單片機,進入掉電方式時,單片機的振蕩器是否工作?采用什么辦法能使單片機退出掉電方式?答:不工作。在掉電方式中,振蕩器停止工作,單片機內部所以功能部件停止工作。在掉電方式期間,內部RAM和寄存器的內容維持不變。退出掉電方式的唯一方法是硬件復位。12.CHMOS型單片機,進入空閑方式時,單片機的振蕩器是否工作?采用什么辦法能使單片機退出空閑方式?答:工作。進入空閑方式中,中斷、串行口和定時器繼續工作。CPU現場、內部RAM和其他特殊功能寄存器內容維持不變。有兩種方法退出空閑方式,一是采用被允許的中斷源請求中斷;二是硬件復位,因為空閑方式中,振蕩器在工作,所以僅需兩個機器周期便完成復位。第三章1.指出下列指令中劃線操作數的尋址方式和指令的操作功能。答:MOVA,#78H;立即尋址,將立即數送入累加器AMOVA,78H;直接尋址,將內部RAM78H單元內容送累加器AMOVA,R6;寄存器尋址,將R6內容送累加器AINC@R0;寄存器間接尋址,將指針R0指向的內部RAM單元內容加1PUSHACC;直接尋址,將累加器A的內容入棧RLA;寄存器尋址,將累加器A的內容左移1位CPL30H;位尋址,將位變量30H的內容取反SJMP$;相對尋址,原地等待MOVCA,@A+PC;基寄存器加變址寄存器間接尋址,程序存儲器PC和累加器A中內容相加形成ROM地址,取數送到累加器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進行的RLBRLAXRLC,30H錯,因為位操作指令中,沒有位的異或運算3.如何將1個立即數30H送入內部RAM90H單元?如何將立即數送特殊功能寄存器P1?答:(1)MOVR0,#90HMOV@R0,#30H(2)MOVP1,#30H4.執行下列一段程序后,試分析有關單元內容。答: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最后的執行結果:(R0)=31H,(30H)=40H,(40H)=32H,(A)=0EH,(PSW)=81H5.試編寫一段程序,將內部RAM40H、41H單元內容傳送到外部RAM2000H、2001H單元中去。答:MOVDPTR,#2000HMOVR0,#40HMOVA,@R0MOVX@DPTR,AINCR0INCDPTRMOVA,@R0MOVX@DPTR,A6.試編寫一段程序,根據累加器A的內容,到程序存儲器1000H起始的表格中取一雙字節數,送內部RAM50H、51H單元。答:MOVDPTR,#1000HPUSHACCMOVCA,@A+DPTRMOV50H,APOPACCINCDPTRMOVCA,@A+DPTRMOV51H,A7.試編寫一段程序,進行兩個16位數的相減運算:6483H-56E2H。結果高8位存內部RAM40H,低8位存41H。答:CLRCMOVA,#83HSUBBA,#0E2HMOV41H,AMOVA,#64HSUBBA,#56HMOV40H,A8.試編寫一段程序,將30H、31H單元中存放的BCD數,壓縮成一個字節(原30H單元內容為高位),并放入30H單元。答:MOVA,30HSWAPAORLA,31HMOV30H,A9.試編寫一段程序,將30H~32H單元中的壓縮BCD拆成6個單字節BCD數,并放入33H到38H單元。答:MOVA,30HMOVR0,#33HACALLLPMOVA,31HACALLLPMOVA,32HACALLLPSJMP$LP:MOVB,AANLA,#0FHMOV@R0,AINCR0MOVA,BSWAPAANLA,#0FHMOV@R0,AINCR0RET10.設晶振頻率為6MHz,試編寫一個延時1ms的子程序,并利用該子程序,編寫一段主程序,在P1.0引腳上輸出高電平寬2ms、低電平寬1ms的方波信號。答:機器周期T=2μs,延時1ms的子程序應運行500T,子程序為:DELAY:MOVR0,#248;1TDJNZR0,$;2TNOP;1TRET2T子程序運行機器周期數為:1T+248*2T+1T+2T=500T,500T=1ms主程序為:MOVPSW,#00HLOOP:SETBP1.0ACALLDELAYACALLDELAYCLRP1.0ACALLDELAYSJMPLOOP第四章1.試根據P1口和P3口的結構特性,指出它們作為輸入口或第二功能輸入/輸出的條件。答:P1口作為輸入口時,相應的口鎖存器必須先置“1”,使輸出場效應管T截止,CPU讀P1時才能準確讀取外部電路的輸入信息。同理,P3口作為第二功能I/O口時,相應的口鎖存器也必須先置“1”。2.MCS-51中無ROM型單片機,在應用中P0口和P2口能否直接作為輸入/輸出口連接開關、指示燈之類的外圍設備?為什么?答:不能。因為無ROM型單片機在應用中必須擴展程序存儲器,P0口必須作為地址總線的低8位及數據總線復用,P2口必須作為高8位地址總線送出高8位地址,因此P2口和P0口的輸出信號都是不穩定的,不能直接作為輸入/輸出口連接開關、指示燈之類的外圍設備。3.什么是堆棧?堆棧的作用有哪些?答:堆棧是在片內RAM中專門開辟出來的一個區域,數據的存取是以"后進先出"的結構方式處理的。實質上,堆棧就是一個按照"后進先出"原則組織的一段內存區域。作用:(1)子程序調用和中斷服務時CPU自動將當前PC值壓棧保存,返回時自動將PC值彈出堆棧。(2)保護現場/恢復現場(3)數據傳輸4.MCS-51的T0、T1的定時器和計數器的方式差別是什么?試舉例說明這兩種方式的用途。答:MCS-51的T0、T1的定時器和計數器本質上都是計數器,定時器方式是對單片機內部的機器周期數進行計數,計數器方式是對T0、T1引腳上輸入的外部脈沖(方波)信號進行計數。定時器方式用來產生定時信號,可用于串行通信,也可以通過口輸出脈沖和方波信號;計數器方式可以用來檢測外部信號的頻率和脈寬。5.晶振為12MHz,用T0產生1ms的定時,可以選擇哪幾種方式?分別寫出定時器的方式字和計數初值。如需要1s的定時,應如何實現?答:由于定時器工作在方式2和方式3下時的最大定時時間只有0.256ms,因此要想獲得1ms的定時時間,定時器必須工作在方式0或方式1。機器周期T=12×1/12×10-6s=1μs,計數值T計數=1ms/1μm=1000。1、采用方式0,定時器的方式字TMOD=00H,定時器的計數初值為TC=M-T/T計數=213-1*103/1=7192=1C18H,TH0應裝#1CH;TL0應裝#18H。2、采用方式1,定時器的方式字TMOD=01H,定時器的計數初值為TC=M-T/T計數=216-1*103/1=64536=FC18H,TH0應裝#0FCH;TL0應裝#18H。如需要1s的定時,可以采用查詢相應溢出標志位,結合軟件計數100循環,即可實現1s的定時。6.晶振為12MHz,如何用T0來測試20Hz~1000Hz之間的方波信號(設高低電平寬度相同)的周期?又如何測試頻率為0.5MHz左右的脈沖頻率?答:1、使用定時器方式,利用方波的邊沿觸發定時器的開始與結束,比如使用上升沿來啟動定時器計數,機器周期T為1μs,下降沿停止計數。依據計數值N計算周期,周期=2N*T。2、T0工作在計數器方式,待測試的脈沖信號引入T0引腳計數,同時T1工作在定時器方式,定時1ms,1ms定時結束時取T0計數值,脈沖頻率=1000*T0計數值。7.若晶振為11.0592MHz,串行口工作于方式1、波特率為4800bit/s,分別寫出用T1、T2作為波特率發生器的方式字和計數初值。答:T1作為波特率發生器。由:波特率=2SMOD*振蕩器頻率/[32*12*(256-X)]設SMOD=0,可得,4800=20*11059200/32/12/(256-X),可得的計數初值X=250=0FAH,將X值裝入TH1中,TMOD=20H。MOVTMOD,#20H;T1方式2MOVTH1,#0FAHT2作為波特率發生器,需對T2CON(置“1”TCLK、RCLK)、TH2、TL2、RCAP2H、RCAP2L初始化編程,再置“1”TR2,具體略。8.串行口方式0能否外接多個74LS164?若不可以,說明原因;若可以,畫出邏輯框圖并說明數據輸出方法。答:串口工作方式0時,可以外接多個74LS164。此時TXD用于發送同步脈沖接74LS164的CLK端,RXD用于發送數據接第一片74LS164的數據輸入端DSA和DSB,74LS164的/CR和Vcc端接+5V,Vss端接地,后一片74LS164的數據輸入端DSA和DSB接前一片74LS164的Q7。只要將數據載入SUBF之后,時鐘脈沖和數據就會自動出現在單片機的I/O端口,程序不需要對I/O口再進行干預。出現在74LS164的數據低位在右,高位在左。將數據多次載入SUBF,就可以在多個74LS164的輸出端得到穩定的數據。邏輯框圖略,可參考教材的例4-8.9.MCS-51的中斷處理程序能否存儲在64KB程序存儲器的任意區域?若可以,如何實現?答:可以。因為每個中斷源的中斷入口地址處均預留了8個單元的空間,8個單元足夠存放一條跳轉指令,使程序轉向64KB程序存儲區的任意區域。在相應的中斷入口使用JMP指令進行跳轉就可以實現。10.在一個8031系統中,晶振為12MHz,一個外部中斷請求信號是一個寬度為500ms的負脈沖,則應該采用哪種中斷觸發方式,如何實現?答:應該采用邊沿觸發方式,采用SETBIT0或SETBIT1即可。若采用電平觸發方式,由于外部中斷請求信號長期存在,可能會引起重復中斷。11.若外部中斷請求信號是一個低電平有效的信號,是否一定要選擇電平觸發方式?為什么?答:不一定。因為采用邊沿觸發,能自動鎖存中斷信號,是一種可靠的中斷管理方式。第五章1.若晶振為6MHz,試編寫一個2ms延時子程序。答:晶振為6MHz,機器周期T為2μs,應計滿1000個T。DELAY:MOVR7,#10DLY0:MOVR6,#49DLY1:DJNZR6,DLY1;2TDJNZR7,DLY0;2TRET2.試編制一個子程序,對串行口初始化,使串行口以方式1,波特率1200bit/s(晶振為11.059MHz)發送字符串“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位數據為奇校驗位。編制一個程序,對串行口初始化,并用查詢方式接受串行口上輸入的10個字符存入內部RAM中30H開始的區域。答:RECS: MOV SCON,#0D0H;串行口方式3允許接收 MOV TMOD,#20H;T1方式2定時 MOV TL1,#0F4H;寫入T1時間常數 MOV TH1,#0F4H SETBTR1 ;啟動T1 MOV R0,#30H;設數據指針 MOV R7,#10 ;接收數據長度WAIT: JBC RI,NEXT ;等待串行口接收SJMPWAIT NEXT: MOV A,SBUF ;取一個接收字符 JNB P,COMP ;奇偶校驗 JNB RB8,ERR ;P≠RB8,數據出錯 SJMPRIGHT ;P=RB8,數據正確COMP: JB RB8,ERRRIGHT: MOV @R0,A;保存一個字符 INC R0 ;修改指針 DJNZR7,WAIT ;全部字符接收完? CLR F0 ;F0=0,接收數據全部正確ERR:SETBF0 ;F0=1,接收數據出錯 RET4.寫一個子程序,其功能是將(R0)指出的兩個RAM單元中的數轉化為ASCII字符,并用查詢方式從串行口上發送出去。答:設串行口以方式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.試編寫一個子程序將字符串“MCS-51Microcomputer”裝入外部RAM8000H開始的顯示緩沖區。答:ORG0000HAJMP0030HMIAN:MOVDPTR,#8000HMOVR1,#0MOVR0,#20LOOP:MOVA,R1ADDA,#6MOVCA,@A+PCMOVX@DPTR,AINCDPTRINCR1DJNZR0,LOOPSJMP$TAB:DB‘MCS-51Microcomputer’END6.試設計一個n字節的無符號十進制數加法子程序,其功能為將(R0)和(R1)指出的內部RAM中兩個n字節壓縮BCD碼無符號十進制數相加,結果存放于被加數單元中。子程序入口時,R0,R1分別指向被加數和加數的低位字節,字節數n存于R2,出口時R0指向和的最高位字節,CY為進位位。答:LENEQUnORG0000HAJMPMAINORG0030HMAIN:MOVSP.#60HMOVR2,#LENACALLADD_NBYTESJMP$ADD_NBYTE:CLRCLOOP:MOVA,@R0ADDCA,@R1DAAMOV@R0,AINCR0INCR1DJNZR2,LOOPRETEND7.試設計一個n字節的無符號十進制數減法子程序,其功能是將R0指出的內部RAM中n字節無符號壓縮BCD碼減去(R1)指出的內部RAM中n字節無符號壓縮BCD碼,結果存放在被減數單元中。子程序入口時,R0,R1分別指向被減數和減數的低位字節,字節數n存于R2,出口R0指向差的高位字節,CY=1為正,CY=0為負,結果為補碼。答:以n=2為例。將2字節無符號壓縮BCD碼被減數轉換4位BCD碼,存入60H~63H,再轉換為二進制數,存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字節無符號壓縮BCD碼減數轉換4位BCD碼,存入60H~63H,再轉換為二進制數,存R5R6。雙字節無符號數減法程序,差存入R7R1NSUB1:MOVA,R4CLRCSUBBA,R6MOVR1,AMOVA,R3SUBBA,R5MOVR7,AJBCPOUTCMPT:MOVA,R1;負數求補CPLAADDA,#1MOVR1,AMOVA,R7CPLAADDCA,#0MOV@R0,ADECR0MOV@R0,R1INCR0RET8.試設計一個子程序,其功能為判斷R2R3R4R5中的壓縮BCD碼十進制數最高位是否為0,若最高位為0,且該十進制數不為0,則通過左移使最高位不為0。略9.試設計一個雙字節無符號整數乘法子程序,其功能將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.試設計一個子程序,其功能將無符號二進制整數R2R3R4R5除以R6R7,其商存放于30H,31H單元,余數存于R2R3。略11.試設計一個子程序,其功能為將R0指出的內部RAM中6個單字節正整數按從小到大的次序重新排列。答:ORG0200HMOV30H,#6SUM1EQU30HSUM2EQU31HLOOP1:MOVA,R0INCAMOVR1,AMOVSUM2,SUM1DJNZSUM1,LOOP2SJMPDONELOOP2:DJNZSUM2,LOOP3SJMPLOOP1LOOP3:MOVA,@R0CLRCSUBBA,@R1JCNEXTXCHA,@R1MOV@R0,ANEXT:INCR0INCR1SJMPLOOP2DONE:END12.試設計一個子程序,其功能為應用查表指令:MOVCA,@A+PC,求累加器A的平方值,結果送入A,入口時A<15。答:MEMO:INCAMOVCA,@A+PCRETTAB:DB0,1,4,9,16,25,36,49DB64,81,100,121,144,169,196,22513.試設計一個子程序,其功能將R0指出的內部RAM中雙字節壓縮BCD碼轉化為二進制數存放于R1指出的內部RAM中,并將結果再轉化為BCD碼存放于30H開始的單元中。答:先將壓縮BCD碼轉化為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產生500us的定時中斷,試編寫有關的初始化程序和對時鐘進行計數的T0中斷服務程序。時鐘計數單元為:30H,31H,32H,分別存放壓縮BCD碼的時分秒參數。答:晶振為6MHz,機器周期T為2μs,500us=250T,T0可以工作在方式2。有關的初始化程序和對時鐘進行計數的T0中斷服務程序如下: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系統中,晶振為12MHz,P1口上輸入8路脈沖,頻率為0.1-3Hz,現用T0產生1ms定時,由T0中斷服務程序讀P1口的狀態,若發生上跳則該路軟件計數單元加1,每到1分鐘將各路計數值拆分成2位十六進制數送顯示緩沖區70H-7FH,并清零各計數器,試編寫有關程序。答:設置8路脈沖計數值緩沖區60H-67H,機器周期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.在某應用系統中,有A-T20個單字符合法命令,這些命令的處理程序入口地址依次存放在標號為CADR開始的地址表中,若輸入的命令字符存放于A,試編寫一個散轉程序,其功能為:若(A)為非法字符,則轉CDER;若為合法字符,則轉相應的入口地址。答:A-T字符對應的ASC碼16進制數為41H-54H,散轉程序為:PUSHACCCLRCSUBBA,#55HJNCCDERPOPACCPUSHACCCLRCSUBBA,#41HJCCDERPOPACCMOVB,#3MULABMOVDPTR,#CADRJMP@A+DPTRCADR:LJMPPGALJMPPGB…CDER:非法字符處理第六章一個8051擴展系統,用線選法最多可以擴展幾片6264?畫出原理圖,并確定每片6264的地址范圍解:一個8051擴展系統,用線選法最多可以擴展3片6264。擴展電路中6264的地址線A0-A12與地址鎖存器373的輸出及P2.0-P2.4的對應線相連,6264的數據線D0-D7與P0口對應相連,6264的讀寫控制端和與8051的和對應相連,三個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單片機用地址譯碼法最多可擴展多少片6264?它們的地址范圍各是多少?試畫出其邏輯圖。解:最多可擴展8片6264,地址范圍如下:第一片:0000H-1FFFH第二片:2000H-3FFFH第三片:4000H-5FFFH第四片:6000H-7FFFH第五片:8000H-9FFFH第六片:0A000H-0BFFFH第七片:0C000H-0DFFFH第八片:0E000H-0FFFFH一個8032擴展系統,擴展了一片27256、一片62256、一片74LS377、一片74LS245、一片8255、一片0809、一片0832,試畫出其邏輯圖,并寫出各器件的地址范圍。解:8032擴展一片27256、一片62256的邏輯圖如圖所示,P2.7低電平時可選中62256,27256、62256的地址范圍均為0000H-7FFFH。采用3-8譯碼器使用全地址譯碼法連接其他芯片,采用P2.0、P2.1、P2.2作為3-8譯碼器的輸入信號,P2.7作為3-8譯碼器的使能信號,只有當P2.7=1,3-8譯碼器才有有效低電平輸出。設3-8譯碼器的Y0連74LS377的片選信號端,8032的連74LS377的CLK端,則74LS377的地址范圍為:8000H-8FFFH;設3-8譯碼器的Y1連74LS245的片選信號端,8032的連74LS245的DIR端,則74LS245的地址范圍為:9000H-9FFFH;設3-8譯碼器的Y2連8255的片選信號端,地址鎖存器373的輸出A0、A1分別接8255的A0、A1,8032的、連8255的、端,則8255的PA口地址范圍為:1010XXXXXXXXXX00;PB口地址范圍為:1010XXXXXXXXXX01;PC口地址范圍為:1010XXXXXXXXXX10;控制口地址范圍為:1010XXXXXXXXXX11。X為0和1之間的任意數。設3-8譯碼器的Y3與8032的、信號分別或非后連0809的端及START/ALE并連端,0809的EOC端經非門連接8032的,8032的ALE經2分頻后接0809的CLOCK端,地址鎖存器373的輸出A0、A1、A2分別接0809的A0、A1、A2,則0809的8個通道地址范圍為:1011XXXXXXXXX000、1011XXXXXXXXX001、1011XXXXXXXXX010、1011XXXXXXXXX011、1011XXXXXXXXX100、1011XXXXXXXXX101、1011XXXXXXXXX110、1011XXXXXXXXX111。設3-8譯碼器的Y4接0832的片選信號端/并連端,8032的接0832的/并連端,則0832的地址范圍為:1100XXXXXXXXXXXX。部分邏輯圖略。在一個89C51擴展系統中,P2口接I/O設備,P0口做擴展總線口使用,擴展一片8255、一片0832,試畫出其邏輯圖,并編寫一個初始化程序,使8255的PA、PC口為方式0輸出,PB口以方式0輸入。解:由于8255A內部已有數據總線驅動器,可以直接與MCS-51單片機總線相連接。下圖是8255A與MCS-51單片機的一種連接方法。由于P2口接I/O設備,應采用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的三角波形。解:設0832地址為7FFFH,外接基準電壓為0-5V,4V對應的數值為4*255/5=204ORG0000H

JMPSTARTORG0030H

START:CLRALOOP:MOVDPTR,#7FFFH;該循環產生上升波形MOVX@DPTR,AINCA

CALLDEL1;延時

CJNEA,#204,LOOP

LOOP1:MOVDPTR,#7FFFH;該循環產生下降波形

MOVX@DPTR,ADECACALLDEL1;延時

JNZLOOP1

SJMPLOOP

DEL1:MOVR6,#2;延時子程序

DEL2:MOVR7,#250DJNZR7,DEL2;內循環250遍

DJNZR6,DEL1;外循環2遍

RET

END晶振頻率為12MHz,利用程序存儲器中0E00H~0FFFH表格內的512B數據,通過D/A轉換,產生頻率約為1Hz的正弦周期波形,試編制有關程序。解:設D/A轉換器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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論