版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機原理與應用電子科技出版社 主編:蘇珊 高如新 譚興國第一章習題答案1 什么叫單片機?它有哪些主要特點?單片機是將中央處理器(CPU)、隨機存儲器(RAM)、只讀存儲器(ROM)、中斷系統(tǒng)、定時/計數(shù)器、I/O口等主要計算機部件集成在一片集成電路芯片上的單片微型計算機(Single Chip Microcomputer)的簡稱。具有體積小、功耗低、價格便宜、控制功能強等特點。2 請簡述單片機的技術發(fā)展歷史,單片機的主要技術發(fā)展方向是什么?單片機技術發(fā)展經(jīng)歷了單芯片微機形成階段、性能完善提高階段和微控制器化階段三個主要階段。目前單片機主要技術發(fā)展方向是:大容量高性能化、小容量低價格化、外圍電
2、路內裝化、多品種化以及 I/O 接口功能的增強、功耗降低等。3.單片機主要用在哪些方面?由于單片機體積小、功耗低、價格便宜,廣泛應用于儀器儀表、家用電器、醫(yī)用設備、航空航天專用設備的智能化管理及過程控制等領域;又由于單片機具有較強的實時數(shù)據(jù)處理能力和控制功能,可以使系統(tǒng)保持在最佳工作狀態(tài),提高系統(tǒng)的工作效率和產(chǎn)品質量,所以在工業(yè)控測控、航空航天、尖端武器等各種實時控制系統(tǒng)中,都作為控制器件使用。第二章習題參考答案1單片機系統(tǒng)復位后,PC值為( 0000H )。2MCS-51單片機中,一個機器周期=( 6 ) 狀態(tài)周期=( 12 )振蕩周期。當主頻為12MHz時,一個機器周期為( 1µ
3、s )3PSW中RS1 RS0=01時,寄存器R2的地址為 ( 10H) PSW中RS1 RS0=10時,寄存器R2的地址為 ( 12H)4MCS-51單片機的=0,程序存儲器訪問的是(片外 ROM )5MCS-51單片機上有( 4 )個獨立的存儲空間。6MCS-51系列單片機在片內集成了哪些主要邏輯功能部件? 答:有微處理器CPU、程序存儲器、數(shù)據(jù)存儲器、定時/計數(shù)器、中斷源、并行I/O端口等功能部件組成。7程序計數(shù)器(PC)作為不可尋址寄存器,它有哪些特點?數(shù)據(jù)地址指針DPTR有哪些特點?答:PC是一個16位的特殊功能寄存器,又稱程序指針,它具有自動加1的功能,始終指向下一條指令的首地址,
4、以保證程序按順序執(zhí)行;DPTR是一個16位的專用地址指針寄存器。作間址寄存器使用,用來存儲外接64KB的數(shù)據(jù)存儲器和I/O端口,DPTR也可以拆成兩個獨立8位的寄存器,即DPH(高8位字節(jié))和DPL(低8位字節(jié)),分別占據(jù)83H和82H兩個地址。8MCS-51單片機片內256B的數(shù)據(jù)存儲器可分為幾個區(qū)?分別作什么用? 答:00H1FH共32個單元通常作為工作寄存器區(qū),20H2FH可用位尋址區(qū),可直接進行位操作,30H7FH共80個單元為用戶RAM區(qū),作堆?;驍?shù)據(jù)緩沖器用,80HFFH為特殊功能寄存器區(qū)。9開機復位后,CPU使用的是哪組工作寄存器?它們的地址是什么?CPU如何確定和改變當前工作寄
5、存器組? 答:開機復位后,由于PSW復位值是00H,CPU使用的是0區(qū)的工作寄存器R0R7,它們的地址是0007H,可以通過改變PSW的RS1 RS0 兩個位的值確定和改變當前工作寄存器組。10堆棧有哪些功能?堆棧指針(SP)的作用是什么?在程序設計時,為什么還要對SP重新賦值答:堆棧是一個特殊的存儲區(qū),用來暫存數(shù)據(jù)和地址。堆棧指針SP是用來管理堆棧的它指示出堆棧頂部在片內RAM中的位置。系統(tǒng)復位后,SP初始化為07H,使得堆棧實際上從08H單元開始。由于08H1FH 單元分屬于工作寄存器13區(qū),20H2FH為位尋址區(qū),若程序中要用到這些區(qū),應把SP值改為30H或更大的值。11MCS-51的S
6、FR占用了什么空間?其尋址方式如何?答:MCS-51的SFR占用了片內數(shù)據(jù)存儲器的空間,地址范圍為80HFFH。其尋址方式為直接尋址。12程序狀態(tài)寄存器PSW的作用是什么?常用狀態(tài)位有哪些?它們的作用各是什么?答:PSW是一個8位的特殊功能寄存器。用于存放程序運行中的各種狀態(tài)信息。常用狀態(tài)位及其作用:(1) 進位標志位Cy。在進行加或減運算時,如果操作結果最高位有進位或借位,Cy由硬件置“1”,否則清“0”。(2) 輔助進位標志位Ac。在進行加或減運算時,如果低四位數(shù)向高位有進位或借位,硬件會自動將Ac置“l(fā)”,否則清“0”。(3) 工作寄存器區(qū)指針RSl RS0。用于選擇CPU當前工作寄存器
7、的工作區(qū)??捎捎脩粲密浖砀淖僐Sl RS0的組合,以切換當前選用的寄存器的工作區(qū)。(4) 溢出標志位OV。當進行算術運算時,如果產(chǎn)生溢出,則由硬件將OV位置“l(fā)”,否則清“0”。(5) 奇偶標志位P。該位始終跟蹤累加器A中含“1”個數(shù)的奇偶性。如果A中有奇數(shù)個“1”,則P置“l(fā)”,否則置“0”。13MCS-51單片機復位條件是什么?常用復位電路有哪些?答:復位條件是在單片機的RST引腳輸入持續(xù)至少兩個機器周期高電平。MCS-51單片機通常采用上電復位和上電+按鈕電平復位兩種方式。第三章習題參考答案1.選擇題:(1)可以實現(xiàn)片外數(shù)據(jù)存儲器訪問的指令是( A )。AMOVX B. MOV C.
8、NOP D. DIV(2)下列指令中,可以實現(xiàn)將累加器A的第0位置1(其它位不變)的指令是( B )。AMOV A,#01H B. SETBACC.0 C. ANL A,#0FFH D. SETB ACC(3)MOVX A DPTR 指令中,源操作數(shù)的尋址方式是(B )A寄存器尋址 B. 寄存器間接尋址 C.直接尋址 D. 立即尋址(4)LCALL指令操作碼地址是2000H,執(zhí)行完子程序返回指令后,PC=( D )。A2000H B. 2001H C.2002H D. 2003H(5)對程序存儲器的讀操作,只能使用( B )AMOVX B. MOVC C. PUSH D. MOV(6) 執(zhí)行下
9、面指令后,30H內容是( C ) MOVR1,#30H MOV40H,#0E0HMOVR1, 40HA40H B. 30H C. 0E0H D. FFH(7)下列指令格式正確的是( D )。ADEL:XCHA,30H B. MOV:INC A C. 2AB:MOV A,#20H D. ABC:MOV 23H,A(8)當執(zhí)行指令( A )后,累加器A的內容為00H。AANL A,#00H B. ORL A,#00H C. XRL A,#00H D.以上都不對2 比較下面各組指令,并在指令后添加注釋(1) MOV A ,20H ; 20H內容送累加器AMOV C ,20H ;位地址20H內容送位累
10、加器C(2) MOV A ,20H ;20H內容送累加器AMOV R1 ,#20H ;20H送累加器A MOV A , R1 ; 20H指向地址的內容累加器A(3) CJNE A ,R1,L1 ;比較A和R1指向地址的內容,若相等程序順序運行,不相等則轉L1處DJNZ R2 ,L1 ;R2內容減1,不等于0轉L1處,等于0則順序運行3判斷下列指令是否正確,并改正錯誤(1). SUBB 30H,#12H該指令錯誤,帶進位減法指令目的操作數(shù)必須是A,要將立即數(shù)12H和30H內容相加,可改為:MOV A , 30HSUBB A,#12H(2). MOV A ,2000H該指令錯誤,MOV為內部數(shù)據(jù)傳
11、送指令,范圍只是在內部數(shù)據(jù)存儲器和累加器傳送,地址不超過FFH。要將外部2000H送累加器可改為MOV DPTR ,2000HMOVX A, DPTR(3). ADD R0,0A3H該指令錯誤,要將A3H內容和R0內容相加,可改為:MOV A , R0ADD A,0A3H(4). CJNE 20H,#20H,L1該指令錯誤,CJNE第一操作數(shù)可以是A、寄存器Rn或Ri可改為:MOV R1,20HCJNE R1,#20H,L1(5). RLC A該指令正確4設R0的內容為32H,A的內容為48H,而片內RAM 32H單元的內容為80H,40H單元的內容為08H。請指出在執(zhí)行下列程序段后,上述各單
12、元的內容變化。 MOV A,R0 ;R0指向地址32H內容送A,即(A)=80H MOV R0,40H ;32H(40H),即(32H)=(40H)=08H MOV 40H,A ;40H(A),即(40H)=(A)=80H MOV R0,#35H ;R035H,(R0)=35H5 根據(jù)要求要求寫出相應的指令。1).將R0的內容送R1MOV A,R0MOV R1,A2)將30H內容送20H。MOV 20H,30H 3)將立即數(shù)30H送R0HMOV R0,#30H5)將R0的內容送以R1中內容為地址的存儲單元。MOV A,R0MOV R1,A6)將內部RAM30H內容送外部20H單元。MOV A,
13、30MOV R1,#20HMOVX R1,A7)將外部RAM3000H內容送內部30H單元。MOV DPTR,#3000HMOVX A, DPTRMOV 30H,A8)將ROM2000H內容送R1。MOV DPTR,#3000HMOVC A, A+DPTRMOV R1,A9)將ROM2000H內容送內部30H單元。MOV DPTR,#2000HMOVC A, A+DPTRMOV 20H,A10)將ROM2000H內容送外部20H單元。MOV DPTR,#2000HMOVC A, A+DPTRMOV R1,#20HMOVX R1,A6編程將片外數(shù)據(jù)存儲器地址為40H60H區(qū)域的數(shù)據(jù)塊,全部搬移到
14、片內RAM的同地址區(qū)域,并將原數(shù)據(jù)區(qū)全部填為FFH。MOV R0, #40H MOV R1, #33 LOOP:MOVX A, R0MOV R0, AMOV A,#0FFHMOVX R0, AINC R0DJNZ R1,LOOPRET7編程找出片外2000H200FH數(shù)據(jù)區(qū)中的最小值,結果存放于R2中。MOV DPTR,#2000H MOV R7, #0FH MOVX A,DPTR MOV B,A LOOP:INC DPTRMOVX A,DPTRCJNE A,B,LOOP1LOOP1:JNC LOOP2MOV B,A LOOP:DJNZ R7,LOOPMOV R7,B RET第四章習題參考答案
15、1.是在外部RAM中的xdata區(qū)定義了無符號字符型的字變量OUTX2,它的地址是(1002H)。2.(1)編程容易 ;(2)容易實現(xiàn)復雜的數(shù)值計算;(3)容易閱讀、調試、維護程序;(4)容易實現(xiàn)模塊化開發(fā);(5)程序可移植性好。3.bit,data,idata,pdata,code,xdata,sbit,sfr,sfr164.bit和sbit都是C51擴展的變量類型。 bit是位變量,編譯器在編譯過程中分配地址。除非指定,否則這個地址是隨機分配的。這個地址是整個可尋址空間,也就是內部RAM、外擴RAM和ROM。 sbit是對應可位尋址空間的一個位,包括可位尋址區(qū):20H2FH和特殊
16、功能寄存器區(qū)。一旦用了形如sbi xxx = REGE6的定義,這個sbit量就確定地址了。bit和sbit的最大區(qū)別在于,bit是定義一個變量;sbit經(jīng)常用在寄存器中的,方便對寄存器的某位進行操作。 5.(1)使用C51運行庫中的預定義宏;(2)通過指針訪問;(3)使用C51擴展關鍵字_at_。6.(1)中斷函數(shù)不能進行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導致編譯出錯。 (2)中斷函數(shù)沒有返回值,如果企圖定義一個返回值將得不到正確的結果,建議在定義中斷函數(shù)時將其定義為void類型,以明確說明沒有返回值。(3)在任何情況下都不能直接調用中斷函數(shù),否則會產(chǎn)生編譯錯誤。因為中斷函數(shù)的返回
17、是由8051單片機的RETI指令完成的,RETI指令影響8051單片機的硬件中斷系統(tǒng)。如果在沒有實際中斷情況下直接調用中斷函數(shù),RETI指令的操作結果會產(chǎn)生一個致命的錯誤。(4)如果在中斷函數(shù)中調用了其它函數(shù),則被調用函數(shù)所使用的寄存器必須與中斷函數(shù)相同。否則會產(chǎn)生不正確的結果。(5)C51編譯器對中斷函數(shù)編譯時會自動在程序開始和結束處加上相應的內容,具體如下:在程序開始處對ACC、B、DPH、DPL和PSW入棧,結束時出棧。中斷函數(shù)未加using m修飾符的,開始時還要將R0R1入棧,結束時出棧。如中斷函數(shù)加using m修飾符,則在開始將PSW入棧后還要修改PSW中的工作寄存器組選擇位。(
18、6)C51編譯器從絕對地址8n+3處產(chǎn)生一個中斷向量,其中n為中斷號,也即interrupt后面的數(shù)字。該向量包含一個到中斷函數(shù)入口地址的絕對跳轉。(7)中斷函數(shù)最好寫在文件的尾部,并且禁止使用extern存儲類型說明。防止其它程序調用。7.有small,compact和large三種存儲器模式。Small存儲器模式參數(shù)及局部變量放入可直接尋址的內部存儲器(最大128B,默認存儲器類型為data)compact存儲器模式參數(shù)及局部變量放入分頁外部數(shù)據(jù)存儲器(最大256B,默認存儲器類型為pdata)large存儲器模式參數(shù)及局部變量直接放入外部數(shù)據(jù)存儲器(最大64KB,默認存儲器類型為xdat
19、a)8. #include <reg51.h> main( ) int i; unsigned char xdata *p=0x2000; /* 指針指向2000H單元 */ for(i=0;i<256;i+) /*清零2000H-20FFH單元*/ *p=0; p+; 9. (1)unsigned char code dis_code10=0x3f,0x06,0x5b,0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f; (2)unsigned char data TL0_L _at_ 0x30; unsigned char data TH0_
20、H _at_ 0x31; (3)unsigned char idata data_buf20; (4)unsigned char xdata data_array100; (5)unsigned char bdata status; sbit flag_lamp1=status0; sbit flag_lamp2=status1; sbit flag_machine1=status2; sbit flag_machine2=status3; sbit flag_port1=status4; sbit flag_port2=status5; sbit flag_calcu1=status6; s
21、bit flag_calcu2=status7; 第五章習題參考答案1. MCS-51單片機有5個中斷源,2 個中斷優(yōu)先級。優(yōu)先級由軟件填寫特殊功能寄存器IP加以選擇。2.外部中斷請求標志位是IE0和IE1。3. 8051 單片機響應中斷后,產(chǎn)生長調用指令LCALL,執(zhí)行該指令的過程包括:首先把當前PC的內容壓入堆棧,對斷點保護,然后把長調用指令的16位地址送PC,使程序轉向執(zhí)行中斷入口地址區(qū)。4.8051單片機的IP寄存器功能是設置中斷優(yōu)先級5.用指令完成下列要求。INT1、T0開中斷,其余禁止中斷;MOV IE, #86H全部開中斷MOV IE, #FFHINT0、T0開中斷,其余保持不變
22、;SETB EASETB EX0SETB ET0INT1、串行口為高優(yōu)先級,其余為低優(yōu)先級;MOV IP, #85H5.子程序和中斷程序有何異同,為什么子程序返回指令RET和中斷返回指令RETI不能相互替代?答:中斷類似于子程序設計中的調用子程序,但它們有著本質的區(qū)別。調用子程序是程序員事先安排好的,而中斷是由一些特殊事件觸發(fā)的,是隨機的。RET功能是恢復堆棧中PC的值,從調用指令的下一條指令開始運行程序,不影響標志位。RETI除了具有RET指令功能外,還清除內部相應的中斷狀態(tài)觸發(fā)器,因此中斷服務程序必須以RETI為指令結束。CPU執(zhí)行RETI指令后至少再執(zhí)行一條指令,才能響應新的中斷請求,因
23、此不能互換。1. 外部中斷有幾種中斷觸發(fā)方式?對跳變觸發(fā)和電平觸發(fā)信號有什么要求?如何設置?答:外部中斷有低電平觸發(fā)和邊沿觸發(fā)兩種觸發(fā)方式。低電平觸發(fā)時,施加在相應引腳上的低電平在中斷返回前必須撤消,否則將再次申請中斷造成出錯。即施加在引腳上的低電平持續(xù)時間應大于一個機器周期,且小于中斷服務程序的執(zhí)行時間。在邊沿觸發(fā)方式中,為了保證CPU在兩個機器周期內能夠檢測到由高至低跳變的電平,輸入的高電平和低電平的持續(xù)時間至少要保持12個振蕩周期(即一個機器周期的時間)。通過TCON寄存器的IT1和IT0來設置。ITi設置為“0”時,相應的外部中斷為低電平觸發(fā)方式;設置為“1”時,相應的外部中斷為邊沿觸
24、發(fā)方式, 7.為何要在程序的首地址安排一條跳轉到主程序的指令?在響應中斷的過程中為什么要保護現(xiàn)場?應如何保護?答:因為程序的首地址與外中斷0的入口地址之間只相差3各單元,放不下完整的主程序,一般將主程序放到0030H以后的單元,故要安排一條跳轉到主程序的指令。主程序中通常用到PSW、工作寄存器和特殊功能寄存器等。如果在中斷服務程序中要用這些寄存器,會造成這些現(xiàn)場寄存器中數(shù)據(jù)的混亂,在中斷服務前應將它們的內容保護起來稱保護現(xiàn)場。通常利用堆棧操作來保護現(xiàn)場。8. 利用做一個計數(shù)器。當有脈沖時,A的內容加1。并且當A的內容大于或等于100時將P1.0置位。 ORG 0000H LJMP MIN0 O
25、RG 0003H LJMP INTB0 ORG 0030H MIN0: MOV SP,#30H ;主程序 SETB IT0 SETB EX0 SETB EA MOV A,#00 MIN1: NOP LJMP MIN1 ORG 0100H INTB0: PUSH PSW ;的中斷服務程序 ADD A,#01 CJNE A,#100,INTB1 LJMP INTB2 INTB1:JC INTB3 INTB2:SETB P1.0 INTB3:POP PSW RETI END第六章習題答案1當定時器T0工作在方式3時,要占用定時器T1的TF1和TR1兩個控制位。2在定時器工作在方式1下,計數(shù)器的計數(shù)器
26、的寬度為16 位,若fosc=12MHz,最大定時時間為1s ,若fosc=6MHz,則最大定時時間為2s 。3定時時間與定時器的工作方式、計數(shù)初值及晶振頻率有關。4MCS-51的定時器/計數(shù)器作計數(shù)器使用時,計數(shù)脈沖由外部信號通過引腳P3.4和P3.5提供。5MCS-51的定時器/計數(shù)器T0門控信號GATE設置為1時,只有INT0引腳為高電平且由軟件使TR0置1時,才能啟動定時器工作。6MCS-51系列單片機內部設有幾個定時器/計數(shù)器?它們是由哪些專用寄存器組成?有哪幾種工作方式?簡述各種工作方式的功能特點。MCS-51單片機內部設有兩個16位定時器/計數(shù)器T0和T1。分別有的8位計數(shù)器TH
27、0、TL0和TH1、 TL1組成,各有4種工作方式。方式0是一個13位的定時器/計數(shù)器。只用了16位寄存器中的高8位(THi)和低5位(TLi的D4D0位),TLi的高3位未用。方式1為16位定時器/計數(shù)器方式,由THi的8位和TLi的8位構成16位加1計數(shù)器, ,當16位計數(shù)滿溢出時,溢出標志位TFi置“1”。方式2為8位自動重裝計數(shù)器。僅TLi作為計數(shù)器,而THi的值在計數(shù)中不變。TLi溢出時,THi中的值自動裝入TLi中。方式3只適用定時器/計數(shù)器T0。T0在該方式下被拆成兩個獨立的8位計數(shù)器TH0和TL0,TL0可作8位的定時器或計數(shù)器用,而TH0借用T1的控制位和溢出標志位TR1和T
28、F1,只可用作簡單的定時器使用。該方式下T1可用作串行口波特率發(fā)生器。7MCS-51系列單片機定時器/計數(shù)器作定時器或計數(shù)器使用時,其計數(shù)脈沖分別由誰提供?作定時器使用時,其實質是在單片機內部對機器周期進行計數(shù),計數(shù)脈沖輸入信號由內部時鐘提供,每一個機器周期計數(shù)器自動加1。作計數(shù)器使用時,其實質是對外部事件進行計數(shù),計數(shù)脈沖來自相應的外部輸入引腳T1或T0,當外部輸入脈沖信號由1至0的跳變時,計數(shù)器自動加1。8采用程序查詢方式,由T1產(chǎn)生一個50Hz的方波,從P1.1輸出,fosc=12MHz。解:方波周期T=1/50=0.02s=20ms,用T1定時10ms,計數(shù)初值為:21610×
29、;10-3×12×10612=6553610000=55536=D8F0H源程序如下: ORG 0000H LJMP T1BUS ORG 0030H T1BUS: MOV TMOD,#10H ;T1方式1,定時模式 SETB TRl ;啟動T1 LOOP:MOV TH1,#0D8H ;送T1計數(shù)初值 MOV TL1,#0F0H LOOP1: JNB TF1,LOOP1 ;T1沒有溢出等待 CLR TF1 ;產(chǎn)生溢出清標志位 CPL P1.1 ;P1.1取反輸出 SJMP LOOP ;循環(huán)END第七章習題答案1.選擇題(1)MCS-5l系列單片機的串行口是( B )。 A.
30、單工 B.全雙工 C.半雙工 D.并行口(2)表示串行數(shù)據(jù)傳輸速率的指標是( D )。A. USART B.UART C.字符幀 D.波特率(3)串行口的控制寄存器是( C )。A. PCON B.SMOD C.SCON D.SBUF(4)當設置串行口工作于方式2時,采用( A )指令。A.MOV SCON,#80H B. MOV SCON,#10H C. MOV PCON,#80H D. MOV PCON,#10H(5)當串行口工作于方式0時,其波特率( C )。A.取決于定時器1的溢出率 B. 取決于PCON的SMOD C. 取決于時鐘頻率 D. 取決于PCON的SMOD和定時器1的溢出率
31、(6)當串行口工作于方式1時,其波特率( D )。A.取決于定時器1的溢出率 B. 取決于PCON的SMOD C. 取決于時鐘頻率 D. 取決于PCON的SMOD和定時器1的溢出率(7)串行口的發(fā)送數(shù)據(jù)和接收數(shù)據(jù)端為( A )。A.TXD和RXD B.TI和RI C.TB8和RB8 D.REN(8)串行口是單片機的( A )。 A. 內部資源 B.外部資源 C.輸入設備 D.輸出設備簡答題1串行口有幾種工作方式?有幾種幀格式?各工作方式的波特率如何確定?SM0 SM1工 作 方 式功 能波 特 率0 0方式08位同步移位寄存器/120 l方式l10位UART可變(由定時器控制)1 0方式211
32、位UART/64、/321 1方式311位UART可變(由定時器控制)2何謂波特率、溢出率?如何計算和設置MCS-51系列單片機串行通信的波特率?波特率是串行數(shù)據(jù)傳輸中,串行口每秒鐘發(fā)送(或接收)的二進制位數(shù)稱為波特率,單位是b/s(位/秒)。溢出率是指定時器T1作為波特率發(fā)生器使用時的溢出頻率,其大小為溢出周期之倒數(shù)在方式0時,每個機器周期發(fā)送或接收一位數(shù)據(jù),因此波特率固定為振蕩頻率的l/12,且不受SMOD位的控制。方式2的波特率要受PCON中SMOD位的控制,波特率=,當SMOD設置為“0”時,波特率等于/64,若SMOD設置為“1”時,則波特率等于/32。方式1或方式3時,其波特率由定
33、時器/計數(shù)器T1的溢出率與SMOD位共同控制。其波特率可表示為:波特率=T1的溢出率/(32/)3為什么T1用作串行口波特率發(fā)生器時,常選用操作方式2?定時器T1工作于方式2是8位的自動重裝方式,這樣就避免了由于軟件裝載引起的誤差,故通常將T1設置為方式2,作為波特率發(fā)生器。4串行口控制寄存器SCON中TB8、RB8起什么作用?在什么方式下使用?TB8和 RB8:方式2和方式3時發(fā)送和接受的第9位數(shù)據(jù)。在雙機通信中可以作為奇偶校驗位,在多機通信中,可作為地址和數(shù)據(jù)的區(qū)別 第八章習題答案1.地址譯碼方法包括線選法和譯碼法。其中譯碼法又分為部分地址譯碼法和全地址譯碼法。全地址譯碼法是將各擴展芯片上
34、的地址線均接到單片機系統(tǒng)對應的地址總線上,剩余的全部地址線全部連接到譯碼器上,各芯片的片選信號由譯碼電路產(chǎn)生,因此得到的每個選中單元的地址都是唯一的。而部分譯碼法是將部分剩余高位地址線通過譯碼的方式生成外設地址,所以地址可能不唯一。2.不會。這是因為訪問外部程序存儲器使用MOVC指令,而訪問外部數(shù)據(jù)存儲器和IO采用MOVX指令,兩者對應的時序和控制信號是不同的,總線不會沖突。3.電路如下所示。6264(1)地址范圍:0000H1FFFH;6264(2)地址范圍:2000H3FFFH;2764(1)地址范圍:0000H1FFFH;2764(2)地址范圍:2000H3FFFH;4.8255IO口有
35、三種工作方式基本輸入/輸出、選通輸入/輸出、雙向選通輸入輸出方式。其中通過其控制寄存器設定。8155A有四種IO工作方式,包含基本IO和選通IO等組合,也需通過其控制寄存器進行配置。5. 設8255控制寄存器地址為XXH,則A口工作與方式2,則B口只能工作與方式0。8255初始化程序:MOV A, #11000010BMOV DPTR,#XXHMOVX DPTR,A6. 單片機晶振頻率為12Mhz,將其24分頻,工作頻率為500K,要獲得10ms定時,需要對該信號計數(shù)5000次。對應十六進制數(shù)1388H,設只需要進行單次10ms計數(shù),則定時計數(shù)器M2M1=00,則定時器低位寄存器為88H,高位
36、為13H。設控制口地址為C000H,則定時計數(shù)器低位地址為C0004H,定時計數(shù)器高位地址為C0005H。則初始化程序為:MOV DPTR, #0C000HMOV A,#00000101B; 8155 IO工作方式3,A輸出,B輸入MOV DPTR,AMOV DPTR,#0C004H;裝入初值低8位MOV A,#88HMOV DPTR,AMOV A,#13H;裝入初值高8位INC DPTRMOV DPTR,AMOV A,#11000101B ;啟動定時器第九章參考答案1.參看9.1節(jié)第二部分(二)矩陣式鍵盤。2.分為軟件消抖和硬件消抖兩種方法。去抖方法參看9.1節(jié)第一部分。判斷鍵是否釋放方法:
37、計算鍵值以后,再以延時和掃描的方式等待并判定鍵釋放。3.參考電路圖如下:C51參考程序:#include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar HSM,LJC; /定義行掃描碼和列檢測數(shù)據(jù) uchar tmp,keyvalue; /定義接收鍵值和鍵值 uchar keyscan(); void delay(uint x); /* 函數(shù)名稱:main() 函數(shù)功能:主函數(shù),鍵值處理 */ void main() while(1) tmp=keyscan(); switch(tmp) c
38、ase 0x11: P0=0x3f; /0 break; case 0x21: P0=0x06; /1 break; case 0x41: P0=0x5b; /2 break; case 0x81: P0=0x4f; /3 break; case 0x12: P0=0x66; /4 break; case 0x22: P0=0x6d; /5 break; case 0x42: P0=0x7d; /6 break; case 0x82: P0=0x07; /7 break; case 0x14: P0=0x7f; /8 break; case 0x24: P0=0x6f; /9 break; c
39、ase 0x44: P0=0x77; /A break; case 0x84: P0=0x7c; /B break; case 0x18: P0=0x39; /C break; case 0x28: P0=0x5e; /D break; case 0x48: P0=0x79; /E break; case 0x88: P0=0x71; /F break; default: P0=0x00; delay(100); /* 函數(shù)名稱:void delay(uint x) 函數(shù)功能:延時 xms,振蕩器頻率為 f=12MHz */ void delay(uint x) uchar j,k; for(
40、;x>0;x-) for(j=4;j>0;j-) for(k=250;k>0;k-); /* 函數(shù)名稱:void keyscan() 函數(shù)功能:鍵盤掃描及按鍵處理 */ uchar keyscan() P1=0xf0; /行掃描全為低電平,列線全為高電平 LJC=P1&0xf0; /第一次讀列檢測狀態(tài) if(LJC!=0xf0) delay(10); /若有鍵盤被按下,則延時 10ms LJC=P1&0xf0; /第二次讀取列檢測狀態(tài):0xe0、0xd0、0xb0、0x70 if(LJC!=0xf0) /若有閉合鍵,則逐行掃描 HSM=0xfe; /掃描碼分別
41、為 0xfe、0xfd、0xfb、0xf7 while(HSM&0x10)!=0) /若掃描碼為0xef,則結束掃描 P1=HSM; /輸出行掃描碼 LJC=P1&0xf0; /讀列檢測數(shù)據(jù):0xe0、0xd0、0xb0、0x70 if(LJC!=0xf0) /如果有按鍵閉合 keyvalue=(HSM)+(LJC|0x0f); /計算鍵盤值 return(keyvalue); /返回鍵值 else HSM=(HSM<<1)|0x01; /行掃描左移1 位,準備掃描下一行 return(0x00); 匯編語言參考程序:ORG 00HLJMP MAINMAIN: LC
42、ALL KEYJUDGELCALL KEYSCANLCALL DISPLJMP MAINKEYJUDGE: MOV P3,#0F0HMOV A,P3XRL A,#0F0HJNZ DELAYLJMP MAINDELAY:MOV R4,#08HLOOP1: MOV R5,#0FAHLOOP2:DJNZ R5,LOOP2DJNZ R4,LOOP1MOV P3,#0F0HMOV A,P3XRL A,#0F0HJZ MAIN RETKEYSCAN:MOV R0,#00HMOV R1,#00HMOV R2,#0FEHMOV R3,#04HKEY:MOV P3,R2KEY0:JB P3.4,KEY1MOV
43、R1,#00HLJMP NUMKEY1:JB P3.5,KEY2MOV R1,#04HLJMP NUMKEY2:JB P3.6,KEY3MOV R1,#08HLJMP NUMKEY3:JB P3.7,NEXTMOV R1,#0CHLJMP NUMNEXT:INC R0MOV A,R2RL AMOV R2,ADJNZ R3,KEYLJMP NUMNUM:MOV A,R0ADD A,R1MOV DPTR,#TABMOVC A,A+DPTRMOV R6,ARETDISP:MOV P0,R6LCALL DELAY1RETDELAY1:MOV R4,#0FHLOOP10:MOV R5,#0FAHLOOP
44、20:DJNZ R5,LOOP20DJNZ R4,LOOP10RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HEND4. 靜態(tài)顯示:靜態(tài)顯示方式要求每位LED顯示器的公共端(COM)必須接地(共陰極),或接高電平(共陽極)。而每位LED顯示器都由一個具有鎖存功能的8位端口去控制。 動態(tài)顯示:把所有顯示器的同名字段互相連接在一起,并把它們連到字形口上。為了防止各個顯示器同時顯示出相同的字符,每個顯示器的公共端(COM)還要受另一組信號控制,即把它們接到字位口上。這樣對于一組LED數(shù)碼顯示器需要有
45、兩種信號控制:一組是字形口輸出的字形碼,用來控制顯示內容;另一組是字位口輸出的字位碼,用來控制將字符顯示在第幾位顯示器上。在這兩組信號的控制下使各個顯示器依次從左至右輪流點亮一遍,過一段時間再輪流點亮一遍,如此不斷重復。雖然在任意時刻只有一位顯示器被點亮,但由于顯示器具有余輝效應,而人眼又具有視覺惰性,所以看起來與全部顯示器持續(xù)點亮效果完全一樣。字形碼:為了將數(shù)字或字符在LED顯示器上輸出,把數(shù)字或字符在LED顯示器上顯示時所對應的發(fā)光二級管狀態(tài)按照一定順序進行編碼,稱為字形碼。LED顯示器的字形碼分為共陽LED編碼和共陰LED編碼。5. 電路圖參考圖9-10.C51參考程序:#include
46、<reg51.h>#define uchar unsigned charunsigned char code table=0x0c0,0x0f9,0x0a4,0x0b0,0x99, 0x92,0x82, 0x0f8, 0x80, 0x92 ;Uchar sec,mSec;Void main()Uchar showData;Sec=0;mSec=0;TMOD=0x10;/ T1模式1,定時TH1=0xd8;/ T1計數(shù)初值TL1=0x0f0;EA=1;/ CPU、T1開中斷ET1=1;TR1=1;/啟動T1While(1)If(sec%2=0)showData=2;Display(s
47、howData);showData=0;Display(showData);showData=1;Display(showData);showData=6;Display(showData);ElseshowData=2;Display(showData);showData=0;Display(showData);showData=4;Display(showData);showData=9;Display(showData);Void display(unsigned char indx)unsigned char temp=tableindx;SBUF=temp;While(!TI)TI=
48、0;void timer1() interrupt 3 TH1=0x0d8;/ T1計數(shù)初值TH1=0x0f0;mSec+;If(mSec=100)Sec+;mSec=0;匯編語言程序:ORG 00HLJMP MAINORG 001BHLJMP INT1ORG 0030HMAIN:MOV TMOD,#01H ;選 T1 方式 1,晶振12MHZ,定時50ms MOV TH1, #3CH ;賦初值高8位 MOV TL1, #0B0H ;賦初值低8位 SETB TR1 ;啟動 T1定時 SETB ET1 ;開T1中斷允許MOV R0,#00H SETB EA ;開總中斷允許DIS:MOV A,#2
49、ACALL DSPLYMOV A,#0ACALL DSPLYMOV A,#1ACALL DSPLYMOV A,#6ACALL DSPLYCJNE R0,#14H,DISDIS1:MOV R0,#0MOV A,#2ACALL DSPLYMOV A,#0ACALL DSPLYMOV A,#4ACALL DSPLYMOV A,#9ACALL DSPLYCJNE R0,#14H,DIS1MOV R0,#0AJMP DISDSPLY:MOV DPTR, #TABLE MOVC A, A+DPTR MOV SBUF, A JNB TI, $ CLR TI RETINT1:MOV TH1, #3CH ;賦初值高8位 MOV TL1, #0B0H ;賦初值低8位INC R0RETITABLE:DB 0C0H,0F9H,0A4H DB 0B0H,99H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育用品采購合同審核
- 企業(yè)年會導演合作協(xié)議
- 員工發(fā)展與福利計劃
- 廣告?zhèn)髅蕉麻L聘用協(xié)議樣本
- 財務報告保密協(xié)議管理辦法
- 頸椎病的診斷與治理
- 水利工程招投標合同審查要點
- 售后服務管理評審修訂制度
- 電子競技公司聘用合同范本
- 初級消防安全課件
- 2024秋國家開放大學《形勢與政策》大作業(yè)參考答案 二
- 2024秋國家開放大學《形勢與政策》專題測驗及大作業(yè)參考答案
- 2025屆高考語文復習:文言文翻譯 課件
- 2《伶官傳序》公開課一等獎創(chuàng)新教學設計 統(tǒng)編版高中語文選擇性必修中冊
- 2024比亞迪出海專題報告(空間、格局、進展、展望)-2024-09-企業(yè)研究
- 5 各種各樣的天氣(教學設計)教科版二年級科學上冊
- 【億歐智庫】2024中國AI商業(yè)落地投資價值研究報告:論決策式與生成式AI在垂類行業(yè)的應用價值
- 2024-2030年中國石英砂行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 2024解讀《弘揚教育家精神》全文
- 2024年微信公眾號代運營合同
- 銀行領導學習二十屆三中全會精神心得體會
評論
0/150
提交評論