單片機(jī)原理與應(yīng)用(C語言版)習(xí)題答案_第1頁
單片機(jī)原理與應(yīng)用(C語言版)習(xí)題答案_第2頁
單片機(jī)原理與應(yīng)用(C語言版)習(xí)題答案_第3頁
單片機(jī)原理與應(yīng)用(C語言版)習(xí)題答案_第4頁
單片機(jī)原理與應(yīng)用(C語言版)習(xí)題答案_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第1章 習(xí)題1-1 什么是單片機(jī)?單片機(jī)是把微型計算機(jī)中的微處理器、存儲器、I/O接口、定時器/計數(shù)器、串行接口、中斷系統(tǒng)等電路集成在一塊芯片上形成的單片計算機(jī)。因此被稱為單片微型計算機(jī),簡稱為單片機(jī)。1-2 單片機(jī)的主要特點(diǎn)是什么?單片機(jī)主要特點(diǎn)有:在存儲器結(jié)構(gòu)上,單片機(jī)的存儲器采用哈佛(Harvard)結(jié)構(gòu);在芯片引腳上,大局部采用分時復(fù)用技術(shù);在內(nèi)部資源訪問上,通過采用特殊功能存放器(SFR);在指令系統(tǒng)上,采用面向控制的指令系統(tǒng);單片機(jī)內(nèi)部一般都集成有一個全雙工的串行接口;單片機(jī)有很強(qiáng)的外部擴(kuò)展能力。1-3 指明單片機(jī)的主要應(yīng)用領(lǐng)域。單片機(jī)具有體積小、功耗低、面向控制、可靠性高、價格

2、低廉、可以方便地實(shí)現(xiàn)多機(jī)和分布式控制等優(yōu)點(diǎn),使其廣泛的應(yīng)用于各種控制系統(tǒng)和分布式系統(tǒng)中,主要應(yīng)用于以下這幾個領(lǐng)域:工業(yè)測控、智能設(shè)備、家用電器、商用產(chǎn)品以及網(wǎng)絡(luò)與通信智能接口。1-4 C51單片機(jī)的分類。C51單片機(jī)的分類,就是特指MCS-51系列。那么MCS-51系列的單片機(jī)根本上沒什么區(qū)別,至少內(nèi)核都是一模一樣的。不同的就是功能模塊稍有不同。比方說:有些具有AD/DA模塊,有些沒有;有些有EEPROMSTC89C52,有些沒有AT89S52; 有些ROM有8KAT89S52,有些只有2K; 有些RAM有256B,而有些只有128BIT; 有些40個管腳AT89C51、89C52、89S52

3、,有些20個管腳AT89C2051、89C4051; 有些有內(nèi)部晶振,有些沒有; 但這些都是稍微一點(diǎn)點(diǎn)的區(qū)別,根本都還是算一樣的。1-5 80C51與8051的區(qū)別和聯(lián)系。MCS-51單片機(jī)是指美國INTEL公司生產(chǎn)的一系列單片機(jī)的總稱,包括有8031,8051,8751,8032,8052,8752等,其中8051是最典型的產(chǎn)品,該系列其它單片機(jī)都是在8051的根底上開展來的,人們習(xí)慣于用8051來稱呼MCS-51系列單片機(jī)。INTEL公司將MCS-51的核心技術(shù)授權(quán)給了其它公司,所以有很多公司以8051為核心對單片機(jī)進(jìn)行開發(fā)。其中89C51就是以805為內(nèi)核開發(fā)生產(chǎn)的。聯(lián)系: 80C51單

4、片機(jī)是在8051的根底上開展起來的,8051單片機(jī)與80C51單片機(jī)從外形看是完全一樣的,其指令系統(tǒng)、引腳信號、總線等完全一致完全兼容,也就是說在8051下開發(fā)的軟件完全可以在80C51上應(yīng)用,反之相同。區(qū)別:8051與80C51單片機(jī)的主要差異在于芯片的制造工藝上。8051系列單片機(jī)采用的是HMOS工藝,高速度、高密度;80C51系列單片機(jī)采用的是CHMOS工藝,高速度、高密度、低功耗; 也就是說80C51單片機(jī)是一種低功耗單片機(jī)。 第2章 習(xí)題2-1 C51單片機(jī)內(nèi)部包含哪些主要功能部件,各功能部件主要完成什么功能。 C51單片機(jī)片內(nèi)集成了中央處理器CPU、程序存儲器ROM、數(shù)據(jù)存儲器RA

5、M、兩個16位的定時器/計數(shù)器T0和T1、4個8位的并行I/0口P0、P1、P2和P3、串行口等組成。2-2 C51單片機(jī)的核心器件是什么?它由哪些局部組成?各局部的主要功能是什么? 微處理器CPU包含有運(yùn)算器和控制器。運(yùn)算器由算術(shù)邏輯單元 ALU、累加器ACC、B存放器、兩個暫存存放器、程序狀態(tài)存放器組成,完成算術(shù)運(yùn)算加,減,乘,除,乘除運(yùn)算與存放器B有關(guān)、邏輯運(yùn)算及移位運(yùn)算等??刂破饔芍噶畲娣牌鱅R、指令譯碼器ID、定時及控制邏輯電路、程序計數(shù)器PC組成,是單片機(jī)的運(yùn)行控制中心。 片內(nèi)存儲器ROM 和RAM; 四個I/O 端口電路; 定時器/計數(shù)器: 2個16位的定時器/計數(shù)器 中斷控制系

6、統(tǒng):5個中斷源兩個外部中斷、兩個定時/計數(shù)器、1個串行口中斷 串行口:1個全功能異步串行口 時鐘電路:為系統(tǒng)工作提供時鐘。 總線:通過內(nèi)部總線把系統(tǒng)的各個局部連成一個有機(jī)的整體。2-3 C51單片機(jī)有哪些信號需要芯片引腳以第二功能的方式提供。P3口引腳的第二功能。P3口的第二功能見P10頁的表2.1所示。2-4 C51單片機(jī)的存儲器有什么特點(diǎn)?如何劃分存儲空間。數(shù)據(jù)存儲器和程序存儲器分開編址,并有各自的尋址方式和尋址單元。對存儲器的劃分在物理上分為4個空間:片內(nèi)數(shù)據(jù)存儲器、片內(nèi)程序存儲器、片外數(shù)據(jù)存儲器、片外程序存儲器,在邏輯上劃分為3個空間:偏內(nèi)外程序存儲器、片外數(shù)據(jù)存儲器、片內(nèi)數(shù)據(jù)存儲器。

7、 題2-4 89C51單片機(jī)的存儲器結(jié)構(gòu)圖2-5片內(nèi)RAM低128單元劃分為哪三局部?各局部主要功能是什么? 數(shù)據(jù)存儲器是由RAM構(gòu)成的,用來存放隨機(jī)數(shù)據(jù)。數(shù)據(jù)存儲器分為內(nèi)部數(shù)據(jù)存儲器和外部數(shù)據(jù)存儲器兩局部。對于89C51型單片機(jī),內(nèi)部數(shù)據(jù)存儲器共有256個存儲單元,通常把這256個存儲單元再劃分為低128單元(00H7FH)和高128單元(80HFFH),數(shù)據(jù)存儲器的低128單元按用途可劃分為3個區(qū)域,通用存放器(00H1FH)、位尋址區(qū)(20H2FH)和用戶RAM區(qū)。2-6堆棧有什么功能?堆棧指示器(SP)的作用是什么?在程序設(shè)計中,為什么需要對堆棧進(jìn)行重新賦值。 在單片機(jī)程序設(shè)計中,堆棧

8、主要是為子程序的調(diào)用和中斷操作設(shè)立的。其具體功能主要有保護(hù)斷點(diǎn)和保護(hù)現(xiàn)場。 堆棧指針的作用就是指向棧頂元素的,通過它還可以對棧頂元素進(jìn)行出棧操作當(dāng)堆棧中的元素進(jìn)行出?;蛉霔2僮鲿r,都會使棧頂元素發(fā)生變化,堆棧指針sp就需要重新賦值,讓其指向新的棧頂元素。 如果嵌套太多,不重新賦值會引起死機(jī)的。2-7 單片機(jī)時鐘電路有何用途? 2-8什么是指令周期、機(jī)器周期和時鐘周期?如何計算指令周期的準(zhǔn)確時間? 時鐘周期也稱為振蕩周期,定義為時鐘脈沖的倒數(shù)可以這樣來理解,時鐘周期就是單片機(jī)外接晶振的倒數(shù),例如12M的晶振,它的時間周期就是1/12 us,是計算機(jī)中最根本的、最小的時間單位。在一個時鐘周期內(nèi),C

9、PU僅完成一個最根本的動作。8051單片機(jī)的時鐘范圍是1.2MHz-12MHz。 機(jī)器周期:在計算機(jī)中,常把一條指令的執(zhí)行過程劃分為假設(shè)干個階段,每一階段完成一項(xiàng)工作。例如,取指令、存儲器讀、存儲器寫等,這每一項(xiàng)工作稱為一個根本操作。完成一個根本操作所需要的時間稱為機(jī)器周期。80C51系列單片機(jī)的一個機(jī)器周期同6個S周期狀態(tài)周期組成。8051單片機(jī)的機(jī)器周期由6個狀態(tài)周期組成,也就是說一個機(jī)器周期=6個狀態(tài)周期=12個時鐘周期。 指令周期:是執(zhí)行一條指令所需要的時間,一般由假設(shè)干個機(jī)器周期組成。指令不同,所需的機(jī)器周期數(shù)也不同。對于一些簡單的的單字節(jié)指令,在取指令周期中,指令取出到指令存放器后

10、,立即譯碼執(zhí)行,不再需要其它的機(jī)器周期。對于一些比擬復(fù)雜的指令,例如轉(zhuǎn)移指令、乘法指令,那么需要兩個或者兩個以上的機(jī)器周期。 通常含一個機(jī)器周期的指令稱為單周期指令,包含兩個機(jī)器周期的指令稱為雙周期指令。2-9單片機(jī)復(fù)位有幾種方法?復(fù)位后各存放器的狀態(tài)如何? 復(fù)位方式有上電復(fù)位、手動復(fù)位、硬件電路復(fù)位等。復(fù)位后各存放器的狀態(tài)與單片機(jī)的類型有關(guān),具體參考器件手冊。2-10 89C51單片機(jī)運(yùn)行出錯或程序“跑飛時,如何擺脫困境? 軟件方面:設(shè)置看門狗;檢查程序,是否有死循環(huán) 硬件方面:在單片機(jī)電源輸入位置加0.1u電容,最好在電源與地之間加一個100u的電解電容,防止因?yàn)殡娫吹牟▌踊蚋蓴_信號,引起

11、出錯。2-11基于89C51單片機(jī)設(shè)計一個最小單片機(jī)系統(tǒng)。題2-11基于AT89C51的單片機(jī)最小系統(tǒng)2-12 引腳功能是什么程序存儲器分為片內(nèi)存儲和片外存儲兩局部,可通過引腳的電平確定。 當(dāng)引腳為高電平時,程序從片內(nèi)存儲器開始執(zhí)行,即訪問片內(nèi)存儲器,當(dāng)PC值超過片內(nèi)存儲器的范圍時,自動跳轉(zhuǎn)到片外程序存儲器空間執(zhí)行; 當(dāng)引腳為低電平時,系統(tǒng)全部執(zhí)行片外程序存儲器程序。 使用說明:對于不含片內(nèi)ROM的單片機(jī),應(yīng)將引腳固定為低電平。對于含有片內(nèi)ROM的單片機(jī),在正常運(yùn)行時,應(yīng)將引腳置為高電平。當(dāng)處于調(diào)試狀態(tài)時,可將引腳置為低電平。 第3章 習(xí)題3-1 C51單片機(jī)有哪幾種尋址方式?適用于什么地址空

12、間?C51單片機(jī)尋址方式主要有七種,即:立即尋址、直接尋址、存放器尋址、存放器間接尋址、位尋址、基址存放器加變址存放器間接尋址和相對尋址。立即尋址適應(yīng)于8位立即數(shù)對片內(nèi)RAM地址單元的賦值,也可用于16位的立即數(shù)對DPTR賦值;直接尋址方式適應(yīng)于片內(nèi)RAM的所有地址空間;存放器尋址適應(yīng)于片內(nèi)00H1FH的32個字節(jié),用R0,R1,R7表示;存放器間接尋址只能使用存放器R0或Rl作為地址指針,來尋址內(nèi)部RAM(00HFFH)中的數(shù)據(jù),存放器間接尋址也適用于訪問外部RAM;位操作指令能對內(nèi)部RAM中的位尋址區(qū)20H2FH和某些有位地址的特殊功能存放器進(jìn)行位操作,實(shí)現(xiàn)位狀態(tài)傳送、狀態(tài)控制、邏輯運(yùn)算操

13、作;基址存放器加變址存放器間接尋址用于訪問程序存儲器中的數(shù)據(jù)表格;相對尋址用于相對轉(zhuǎn)移指令中,轉(zhuǎn)移目標(biāo)地址在當(dāng)前地址的-128127字節(jié)范圍內(nèi)的地址空間。3-2 C51單片機(jī)的PSW程序狀態(tài)字中無ZERO(零)標(biāo)志位,怎樣判斷某內(nèi)部數(shù)據(jù)單元的內(nèi)容是否為零?C51單片機(jī)的PSW程序狀態(tài)字中無ZERO(零)標(biāo)志位, 判斷某內(nèi)部數(shù)據(jù)單元的內(nèi)容是否為零,只能通過傳遞數(shù)據(jù)到累加器A,再判斷A中的每一位是否為零,來確定其值是否為零。3-3 編程查找內(nèi)部RAM的32H41H單元中是否有0AAH這個數(shù)據(jù),假設(shè)有這一數(shù)據(jù),那么將50H單元置為0FFH,否那么將50H單元清零。設(shè)片內(nèi)RAM指針R0,指向首地址32

14、H,比擬R0與#0AAH,假設(shè)相等,那么退出循環(huán),給50H單元賦值0FFH,假設(shè)不相等,那么R0加1,為繼續(xù)比擬下一個字節(jié)做準(zhǔn)備,直到地址為41H或到計數(shù)器設(shè)定的計數(shù)值,且給50H單元賦值00H。程序1: MOV R0, #32H ;設(shè)地址指針的初值CONT: CJNE R0,#0AAH , NEXT ;比擬查找值與指針?biāo)竼卧闹担欠裣嗟?MOV A, #0FFH ;相等,賦值0FFH SJMP DOWN ;跳轉(zhuǎn)到,保存結(jié)果NEXT: INC R0 ;修改地址指針 CJNE R0, #42H, CONT ;指針沒有超過范圍,那么繼續(xù) MOV A, #00H ;查找失敗,將00H存入結(jié)果DO

15、WN: MOV 50H, A ;將比擬結(jié)果存入50H單元 SJMP $ ;暫停 END程序2: MOV R7, #16 ;計數(shù)器賦初值,從20H30H共16個字節(jié) MOV R0, #32HCONT: CJNE R0,#0AAH , NEXT MOV A, #0FFH SJMP DOWNNEXT: INC R0 DJNZ R7, CONT ;計數(shù)器減1,非零,那么繼續(xù)查找 MOV A, #00HDOWN: MOV 50H, A ;將比擬結(jié)果存入50H單元 SJMP $ END3-4 內(nèi)部RAM從DATA開始的區(qū)域中存放著10個單字節(jié)十進(jìn)制數(shù),求其累加和,并將結(jié)果存入SUM和SUM+1單元。程序如

16、下:注;R7 計數(shù),R6保存累加和的高8位,R0作為地址指針。ORG 0000HLJMP MAINORG 1000HSUM EQU 30HDATAA EQU 40HMAIN:MOV R7,#10 ;設(shè)置計數(shù)器的初值MOV R0,#DATAA ;設(shè)片內(nèi)RAM地址指針的初值CLR AMOV R6,A ; R6 存放高8位數(shù)據(jù)COUNT:ADD A, R0 ;加RAM中的第一個字節(jié)到ACCDA AJNC NEXTINC R6 ;有進(jìn)位,高8位加1NEXT:INC R0DJNZ R7, COUNTMOV SUM, A ;保存低8位MOV SUM+1, R6 ;保存高8位SJMP $END3-5 MOV

17、X的指令的功能是什么?試編程實(shí)現(xiàn),將外部60H6FH單元的內(nèi)容搬移到3A0H3AFH單元。MOVX可以實(shí)現(xiàn)累加器A與外部數(shù)據(jù)存儲器RAM單元或I/0口間的數(shù)據(jù)傳送。程序如下: ORG 0000H MOV R0, #60H MOV R7, #16 MOV DPTR, 3A0HLOOP:MOVX A, R0 MOVX DPTR, A MOVX R0, #0FFH INC R0 INC DPTR DJNZ R7, LOOP SJMP $ END3-6 MOVC指令的功能是什么?試編程實(shí)現(xiàn),將程序存儲器以TABLE為表首地址定義的16個字節(jié),依次搬移至內(nèi)部RAM中30H3FH單元。MOVC指令的功能可

18、用來查找存放在程序存儲器中的常用數(shù)據(jù)表格。程序如下: ORG 0000H MOV DPTR, #TABLE MOV R7, #16 MOV R2, 30H MOV A, #0 MOV R0, ALOOP: MOVC A, A+DPTR MOV R2, A MOV A, R0 INC A INC R2 DJNZ R7, LOOP SJMP $ ENDTABLE:DB, 3-7 什么是位操作指令,有什么特點(diǎn)?試編程實(shí)現(xiàn):(1) 將從P1.0引腳連續(xù)輸入的8個狀態(tài),按順序依次存入內(nèi)部RAM中31H單元,其中第一個輸入狀態(tài)存儲在最高位,第8個輸入狀態(tài)存儲在最低位;(2) 將內(nèi)部RAM中31H單元的內(nèi)容

19、取反后,依次通過P1.0引腳輸出,其中最低位D0先輸出,最高位D7后輸出。位操作指令的操作對象是內(nèi)部RAM的位尋址區(qū),即字節(jié)地址為20H2FH單元中連續(xù)的128位位地址為00H7FH,以及特殊功能存放器中可進(jìn)行位尋址的位。位操作指令包括布爾變量的傳送、邏輯運(yùn)算、控制轉(zhuǎn)移等指令,它共有17條指令,助記符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB和JBC,共11種。(1) 程序如下: ORG 0000H MOV R7, #8 MOV R2, 31H ;讀入的位地址 LOOP: MOV C, P1.0 MOV R2,C INC R2 DJNZ R7 LOOP SJ

20、MP $ END(2) 程序如下: ORG 0000H MOV R7, #8 MOV R2, 31H ;讀入的位地址 MOV A, R2 CPL ALOOP: RRC A MOV P1.0,C DJNZ R7 LOOP SJMP $ END3-8 設(shè)在存放器R3的低4位中存有數(shù)碼0F中的一個數(shù),試將其轉(zhuǎn)換成ASCII碼,并存入片外RAM的2000H單元。程序如下:MOV A, R3 ;取4位二進(jìn)制數(shù)ANL A, #0FH ;屏蔽高4位PUSH A ;保存A內(nèi)容到堆棧CLR C ;清CSUBB A, #0AH ;(A)-10POP A ;恢復(fù)A內(nèi)容JC LOOP ;假設(shè)C =1,那么數(shù)10轉(zhuǎn)到L

21、OOPADD A, #07H ;假設(shè)C =0,那么加37HLOOP: ADD A, #30H ;轉(zhuǎn)換成ASCII碼MOV DPTR, #2000HMOVX DPTR, A3-9 設(shè)5AH單元中有一變量X,請編寫計算下述函數(shù)式的程序,結(jié)果存入5BH單元。如果X15,Y=41。程序如下:X EQU 5AHY EQU 5BHORG 0000HMOV A, XSUBB A, #10JC LOOP1MOV A, XSUBB A, #15JC LOOP2MOV A, #41MOV Y, AENDLOOP1:MOV A, XSUBB A, #01MOV Y, AENDLOOP2:MOV A, XADD A,

22、 #8MOV Y, AEND3-10 試編程把以2000H為首地址的連續(xù)50個單元的內(nèi)容按升序排列,存放到以3000H為首地址的存儲區(qū)中。程序如下:MOV DPTR, #2000HMOV R0 , #30H ;讀到片內(nèi)的30H開始的單元MOV R7 , #50L1: ;將2000H開始的單元數(shù)據(jù)存儲到30H的內(nèi)部單元MOVX A,DPTRMOV R0,AINC R0INC DPTRDJNZ R7 L1START: ;排序CLR 00HCLR CMOV R7, #49MOV R0 , #30HMOV A, R0L3:INC R0MOV R2, ASUBB A, R0MOV A, R2JC NEX

23、TSETB 00HXCH A, R0DEC R0MOV R0 , AINC R0NEXT:MOV A, R0DJNZ R7, L3JB 00 STARTMOV DPTR, #3000H ;送到片外3000H開始的單元MOV R0, #20HMOV R7, #50L2:MOV A, R0MOVX DPTR, AINC DPTRINC R0DJNZ R7 L2RET3-11 設(shè)有100個無符號數(shù),連續(xù)存放在以2000H為首地址的存儲區(qū)中,試編程統(tǒng)計奇數(shù)和偶數(shù)的個數(shù)。程序如下: ODD EQU 41H ; 奇數(shù)的統(tǒng)計EVEN EQU 40H ; 偶數(shù)的統(tǒng)計Count EQU 100 ; 個數(shù)ORG

24、0000H LJMP MAIN ORG 0040HData_Filter: PUSH PSW ;函數(shù)調(diào)用時的現(xiàn)場保護(hù) PUSH ACC MOV ODD, #0 MOV EVEN, #0 MOV R2, #0MOV DPTR, #0x2000 Loop: MOVX A, DPTRANL A, #01HCJNE A, #0, ODD1;偶數(shù)INC EVENJMP NEXT ODD1: INC ODDJMP NEXT NEXT: INC DPTR INC R2 CJNE R2, #Count, Loop POP ACC ; 恢復(fù)現(xiàn)場 POP PSWRET MAIN:ACALL Data_Filter

25、 SJMP $ ;僅用于測試觀察 END 第4章 習(xí)題4-1簡述C51單片機(jī)直接支持的數(shù)據(jù)類型,并加以說明。答:字符型(char):char有有符號字符型signed char和無符號字符型 unsigned char之分,他們的長度都為一個字節(jié)。對于signed char,其字節(jié)的最高位是符號位,“0表示正數(shù),“1表示負(fù)數(shù),以補(bǔ)碼表示,表示的數(shù)值范圍是-128127;對于unsigned char,表示的數(shù)值范圍是0256,可以用來存放無符號的數(shù)值,也可存放西文字符。整型(int):int有有符號字整型signed int和無符號整型 unsigned int之分,他們的長度均為雙字節(jié)。對于

26、signed int,它存放雙字節(jié)有符號的數(shù)值,以補(bǔ)碼表示,表示的數(shù)值范圍是-32769832767;對于unsigned int,它存放雙字節(jié)無符號的數(shù)值,表示的數(shù)值范圍是065535。長整型(long):long有有符號字整型signed long和無符號整型 unsigned long之分,他們的長度均為4個字節(jié)。對于signed long,它存放4字節(jié)有符號的數(shù)值,以補(bǔ)碼表示,表示的數(shù)值范圍是-21474836482147483647;對于unsigned long,它存放雙字節(jié)無符號的數(shù)值,表示的數(shù)值范圍是04294967295。浮點(diǎn)型(float):float型數(shù)據(jù)長度為4個字節(jié),

27、格式符合IEEE-754標(biāo)準(zhǔn)的單精度浮點(diǎn)型數(shù)據(jù),包含指數(shù)和尾數(shù)兩局部,最高位為符號位,“0表示正數(shù),“1表示負(fù)數(shù),其余8位為階碼,最后23位為尾數(shù)的有效數(shù)位,由于尾數(shù)的整數(shù)局部隱含為“1,所以尾數(shù)的精度為24位。表示的數(shù)值范圍是1.175494E-383.402823E+38(加38)。雙精度型(double):double型占8 個字節(jié),其數(shù)值范圍為1.7E-3081.7E+308。4-2簡述C51語言對C51單片機(jī)特殊功能存放器的定義方法。答:特殊功能存放器型是C51擴(kuò)展的數(shù)據(jù)類型,用于訪問MCS-51單片機(jī)中的特殊功能存放器數(shù)據(jù)。它分為sfr和sfr16兩種類型。sfr為字節(jié)型特殊功能存

28、放器類型,占一個字節(jié)單元,利用它可訪問單片機(jī)內(nèi)部的所有特殊功能存放器;sfr16為雙字節(jié)型特殊功能存放器類型,占兩個字節(jié)單元,利用它可訪問單片機(jī)內(nèi)部占用兩個字節(jié)的特殊功能存放器,如定時器T0和T1。C51中特殊功能存放器的訪問必須先用sfr和sfr16進(jìn)行聲明。例如:sfr P1= 0x90,即:約定P1為P1端口在片內(nèi)的存放器,在后面的語句編程中可通過對P1賦值,實(shí)現(xiàn)對P1端口的賦值。如用P1=255對P1端口的所有引腳置“1。4-3簡述C51中特有的數(shù)據(jù)類型有哪些。答:bit型,其值可以是“1或“0,bit定義的位變量在C51編譯器編譯時,在不同的時候位地址可以變化。 sbit型,其值可以

29、是“1或“0,sbit定義的位變量必須與MCS-51單片機(jī)的一個可以尋址位單元或可尋址的字節(jié)單元的某一位聯(lián)系在一起,在C51編譯器編譯時,其對應(yīng)的位地址不能變化。 sfr型, 特殊功能存放器聲明8位 ,范圍就是特殊功能存放器的范圍。sfr16型, 特殊功能存放器聲明16位 ,范圍就是特殊功能存放器的范圍。4-4簡述C51中對51單片機(jī)位的定義方法。答:位類型bit是C51擴(kuò)展的數(shù)據(jù)類型,用于訪問MCS-51單片機(jī)中可尋址的位單元。它分為bit和sbit兩種類型,他們在內(nèi)存中都只占一個二進(jìn)制位,其值可以是“1或“0。其中用bit定義的位變量在C51編譯器編譯時,在不同的時候位地址是可以變化的,而

30、sbit定義的位變量必須與MCS-51單片機(jī)的一個可以尋址位單元或可尋址的字節(jié)單元的某一位聯(lián)系在一起,在C51編譯器編譯時,其對應(yīng)的位地址是不能變化的。例如:sfr P1=0x90; /因P1端口的存放器可位尋址,所以能定義sbit P1_1 = P11; /P1_1為 P1.1引腳同樣可用 P1.1的地址去寫,如sbit P1_1= 0x91; 這樣在以后的程序語句中就能用 P1_1來對P1.1引腳進(jìn)行讀寫操作。4-5 C51語言的data、bdata、idata有什么區(qū)別?答:data:直接尋址片內(nèi)數(shù)據(jù)區(qū)的低128字節(jié)。bdata:片內(nèi)數(shù)據(jù)區(qū)的位尋址區(qū)0x200x2f,16字節(jié),也可字節(jié)訪

31、問。idata:間接尋址片內(nèi)數(shù)據(jù)區(qū)的256字節(jié)。4-6在C51中,中斷函數(shù)與一般函數(shù)有什么區(qū)別?答:中斷函數(shù)無參無返回,一般函數(shù)參數(shù)和返回都是可有可無。中斷函數(shù)由系統(tǒng)自動調(diào)用,一般函數(shù)必須手動調(diào)用。4-7按照給定存儲器類型和數(shù)據(jù)類型,寫出以下變量的說明形式。 在data區(qū)定義字符變量val1。 在idata區(qū)定義整型變量val2。 在xdata區(qū)定義無符號字符數(shù)組val3。 定義可尋址的位變量flag。 定義特殊功能存放器變量SCON。 定義16位特殊功能存放器變量T0。答:char data val1;int idata val2;unsigned char xdata val3;bit b

32、data flag;sfr SCON = 0x98;sfr16 T0 = 0x8A;4-8寫出以下關(guān)系表達(dá)式或邏輯表達(dá)式的結(jié)果,設(shè)a=3,b=4,c=5。 a+bb)&!c答: 014-9試編寫程序,將內(nèi)部數(shù)據(jù)存儲器32H、33H單元內(nèi)容傳送到外部數(shù)據(jù)存儲器1002H、1003H單元中。答:#include XBYTE0x1002 = DBYTE0x32; /將片內(nèi)RAM地址0x32的內(nèi)容賦給外部RAM地 /址為0x1002的存儲單元XBYTE0x1003 = DBYTE0x33; /將片內(nèi)RAM地址0x33的內(nèi)容賦給外部RAM地址為 0x1003的存儲單元4-10 試編寫程序,采用3種循環(huán)結(jié)

33、構(gòu)實(shí)現(xiàn)數(shù)據(jù)120的平方和。答:int i,sum;sum=0;for(i=1;i=20;i+) sum=sum+i*i; 4-11試編寫程序,將P1口的高5位置1,低3位不變。答:P1=P1|0xf14-12 設(shè)8次采樣值依次存放在20H27H的連續(xù)單元中,用算術(shù)平均值濾波法求采樣平均值,結(jié)果保存在30H單元中,試編寫程序?qū)崿F(xiàn)。答:#include #include #define uchar unsigned charvoid main() uchar i;uchar data *p;/定義指針變量int sum;p=0x20;/指針變量指向地址為20H的內(nèi)部RAMsum=0;for(i=0

34、;i8;i+) sum=sum+*p; p=p+1; /指針地址加1,實(shí)現(xiàn)內(nèi)部RAM地址加1sum=sum/8;p=0x30;*p=sum;while(1);4-13 輸入5名學(xué)生的根本信息,包括學(xué)號、姓名、成績。要求查找出成績最好的學(xué)生,并輸出成績最好學(xué)生的學(xué)號、姓名和成績,試編程實(shí)現(xiàn)。答:#include #define uchar unsigned charvoid main() uchar i; uchar a15=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;/定義學(xué)生信息數(shù)組 uchar max_score, number,name; number=a0;

35、 name=a1; max_score=a2;for(i=1;imax_score) number=a3*i; name=a3*i+1; max_score=a3*i+2; while(1); 第5章 習(xí)題5-1 簡述中斷的相關(guān)概念。答:所謂中斷是指計算機(jī)在執(zhí)行某一程序的過程中,由于計算機(jī)系統(tǒng)內(nèi)、外的某種原因而必須終止原程序的執(zhí)行,轉(zhuǎn)去完成相應(yīng)的處理程序,待處理結(jié)束之后再返回繼續(xù)執(zhí)行被終止原程序的過程。 中斷源指向CPU提出中斷申請的設(shè)備,包括中斷請求信號的產(chǎn)生及該信號怎樣被CPU有效地識別,要求中斷請求信號產(chǎn)生一次,只能被CPU接收處理一次,即不能一次中斷申請被CPU屢次響應(yīng)。 中斷嵌套是C

36、PU正在執(zhí)行低優(yōu)先級中斷的效勞程序時,可被高優(yōu)先級中斷請求所中斷,去執(zhí)行高優(yōu)先級中斷效勞程序,待高優(yōu)先級中斷處理完畢后,再返回低優(yōu)先級中斷的效勞程序。 中斷優(yōu)先級指在實(shí)際應(yīng)用系統(tǒng)中往往有多個中斷源,且中斷申請是隨機(jī)的,有時還可能會有多個中斷源同時提出中斷申請,但CPU一次只能響應(yīng)一個中斷源發(fā)出的中斷請求,CPU響應(yīng)哪個中斷請求,就需要用軟件或硬件安排一個優(yōu)先順序,即中斷優(yōu)先級排隊。 5-2 CPU響應(yīng)中斷的條件有哪些?哪些情況下不會響應(yīng)新的中斷?答:1CPU響應(yīng)中斷的條件:首先單片機(jī)響應(yīng)中斷的條件是中斷源有請求且CPU開中斷即EA=1。(1) 無同級或高級中斷正在處理。(2) 現(xiàn)行指令執(zhí)行到最

37、后1個機(jī)器周期且已結(jié)束。(3) 假設(shè)現(xiàn)行指令為RETI或訪問特殊功能存放器IE、IP的指令時,執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完畢。 在滿足以上條件的根底上,假設(shè)以下任何一種情況存在,那么CPU不會響應(yīng)新的中斷: 1CPU正在執(zhí)行一個同級或高優(yōu)先級的中斷效勞程序; 2正在執(zhí)行的指令尚未執(zhí)行完; 3正在執(zhí)行中斷返回指令RETI或?qū)S么娣牌鱅E、IP進(jìn)行讀/寫指令。CPU執(zhí)行完上述指令之后,要再執(zhí)行下一條指令時,才能響應(yīng)新的中斷請求。5-3 要求80C51五個中斷源按以下優(yōu)先順序排列,判是否有可能實(shí)現(xiàn)?假設(shè)能,應(yīng)如何設(shè)置中斷源的中斷優(yōu)先級別?假設(shè)不能,試述理由。T0、T1、INT0、I

38、NT1、串行口串行口、INT0、T0、INT1、T1INT0、T1、INT1、T0、串行口串行口、T0、INT0、INT1、T1INT0、INT1、T0、串行口、T1解:T0、T1、INT0、INT1、串行口:能。T0、T1為高優(yōu)先級,其余為低優(yōu)先級。串行口、INT0、T0、INT1、T1:能。串行口為高優(yōu)先級,其余為低優(yōu)先級。INT0、T1、INT1、T0、串行口:不能。80C51只有兩個中斷優(yōu)先級。當(dāng)設(shè)置INT0、T1為高優(yōu)先級時,INT1、T0、串行口 處于同一低優(yōu)先級,而T0的優(yōu)先權(quán)排在INT1之前,INT1無法優(yōu)先T0。串行口、T0、INT0、INT1、T1:不能。80C51只有兩個

39、中斷優(yōu)先級。當(dāng)設(shè)置串行口為高優(yōu)先級后,T0、INT0、INT1、T1 處于同一低優(yōu)先級,而INT0的優(yōu)先權(quán)排在T0前面,T0無法優(yōu)先INT0。INT0、INT1、T0、串行口、T1:不能。80C51只有兩個中斷優(yōu)先級。當(dāng)設(shè)置INT0、INT1為高優(yōu)先級后,T0、串行口、T1 處于同一低優(yōu)先級,而T1的優(yōu)先權(quán)排在串行口前面,串行口無法優(yōu)先T1。5-4 當(dāng)執(zhí)行某一中斷源的中斷效勞程序時,如果有新的中斷請求出現(xiàn),試問在什么情況下可響應(yīng)新的中斷請求?在什么情況下不能響應(yīng)新的中斷請求?答:一個正在執(zhí)行的低優(yōu)先級中斷程序能被高優(yōu)先級的中斷源所中斷,但不能被另一個低優(yōu)先級的中斷源所中斷。假設(shè)CPU正在執(zhí)行高

40、優(yōu)先級的中斷,那么不能被任何中斷源所中斷。 5-5 51系列單片機(jī)中用于中斷允許和中斷優(yōu)先級控制的存放器分別是什么?寫出中斷允許控制存放器的各控制位的符號及含義。答:MCS-51系列單片機(jī)用于中斷允許和中斷優(yōu)先級控制的存放器分別是IE和IP;IEA8HEA中斷允許控制位;ES串行口中斷允許控制位;ET1定時器/計數(shù)器T1的溢出中斷允許位;EX1外部中斷1中斷允許位;ET0定時器/計數(shù)器T0溢出中斷允許位; EX0外部中斷0中斷允許位;當(dāng)相應(yīng)的位為“1時允許中斷,為“0時禁示中斷。5-6 編寫一段對中斷系統(tǒng)初始化的程序,要求允許、T1、串行口中斷,且使串行口中斷為高優(yōu)先級。 答: IE=0x9B

41、; IP=0x02;5-7 外部中斷觸發(fā)方式有幾種?他們各自特點(diǎn)是什么?答:外部中斷源有電平觸發(fā)和邊沿觸發(fā)兩種觸發(fā)方式。 中斷電平觸發(fā)方式時,中斷請求標(biāo)志IT0=0,CPU在每個機(jī)器周期的S5P2期間采樣,一旦在P3.2引腳上檢測到低電平,那么有中斷申請,使IE0置位置1,向CPU申請中斷。在電平觸發(fā)方式中,在中斷響應(yīng)后中斷標(biāo)志位IE0的清0由硬件自動完成,但由于CPU對P3.2 引腳沒有控制作用,使中斷請求信號的低電平可能繼續(xù)存在,在以后的機(jī)器周期采樣時又會把已清0的IE0標(biāo)志位重新置1,所以,在中斷響應(yīng)后必須采用其它方法撤消該引腳上的低電平,來撤除外部中斷請求信號,否那么有可能再次中斷造成

42、出錯。 采用邊沿觸發(fā)方式時,IT0=1,CPU在每個機(jī)器的S5P2期間采樣,當(dāng)檢測到前一周期為高電平,后一周期為低電平時,使標(biāo)志IE0置1,向CPU申請中斷,此標(biāo)志位一直保持到CPU響應(yīng)中斷后,才由硬件自動去除。在邊沿觸發(fā)方式中,為保證CPU在兩個機(jī)器周期內(nèi)檢測到由高到低的負(fù)跳變,高電平與低電平的持續(xù)時間不得少于一個機(jī)器周期的時間。5-8 單片機(jī)中中斷請求標(biāo)志位,哪些是由硬件自動復(fù)位的?哪些必須通過軟件復(fù)位?答:由單片機(jī)內(nèi)部硬件自動復(fù)位的:對于定時器/計數(shù)器T0、T1的溢出中斷和采用跳變觸發(fā)方式的外部中斷請求,在CPU響應(yīng)中斷后,由內(nèi)部硬件自動復(fù)位中斷標(biāo)志TF0和TF1、IE0和IE1,而自動

43、撤除中斷請求。 需用軟件去除相應(yīng)標(biāo)志的: 對于串行接收/發(fā)送中斷請求和80C52中的定時器/計數(shù)器T2的溢出和捕獲中斷請求,在CPU響應(yīng)中斷后,內(nèi)部無硬件自動復(fù)位中斷標(biāo)志RI、TI、TF2和EXF2,必須在中斷效勞程序中去除這些中斷標(biāo)志,才能撤除中斷。 既無硬件也無軟件措施的:對于采用電平觸發(fā)方式的外部中斷請求,CPU對、引腳上的中斷請求信號既無控制能力,也無應(yīng)答信號。為保證在CPU響應(yīng)中斷后、執(zhí)行返回指令前,撤除中斷請求,必須考慮另外的措施。5-9 按以下要求設(shè)置定時器/計數(shù)器的模式控制字1T0計數(shù)器、方式1,運(yùn)行與INT0有關(guān);T1定時器、方式2,運(yùn)行與INT1無關(guān);2T0定時器、方式0,

44、運(yùn)行與INT0有關(guān),T1計數(shù)器、方式2運(yùn)行于INT1有關(guān);3T0計數(shù)器、方式2,運(yùn)行與INT0無關(guān);T1計數(shù)器、方式1,運(yùn)行與INT1有關(guān);4T0定時器、方式3,運(yùn)行與INT0無關(guān);T1定時器、方式2,運(yùn)行與INT1無關(guān);解:(1) TMOD = 0x2D; (2) TMOD = 0x0E8; (3) TMOD = 0x0D6; (4) TMOD = 0x23;5-10 C51單片機(jī)內(nèi)部有幾個定時器/計數(shù)器,有幾種工作方式?最多可連接幾個下降沿觸發(fā)的外部中斷信號?答:C51單片機(jī)內(nèi)設(shè)有2個可編程的定時/計數(shù)器,定時器0有4種工作方式,定時器1有3種工作方式。最多可以連接4個下降沿觸發(fā)的外部中斷

45、信號。5-11 根據(jù)定時器/計數(shù)器0方式1邏輯結(jié)構(gòu)圖,分析門控位GATE取不同值時,啟動定時器的工作過程。答:當(dāng)GATE=0:軟件啟動定時器,即用指令使TCON中的TR0置1即可啟動定時器0。 GATE=1:軟件和硬件共同啟動定時器,即用指令使TCON中的TR0置1時,只有外部中斷INT0引腳輸入高電平時才能啟動定時器0。5-12 TMOD值,試分析T0、T1工作狀態(tài) 1TMOD=93H; (2)TMOD=68H; (3)TMOD=CBH; 4TMOD=52H解:TMOD=93H=10010011B,T1定時器,方式1,運(yùn)行與INT1有關(guān);T0定時器,方式3,運(yùn)行與INT0無關(guān)。 TMOD=6

46、8H=01101000B,T1計數(shù)器,方式2,運(yùn)行與INT1無關(guān);T0定時器,方式0,運(yùn)行與INT0有關(guān)。 TMOD=CBH=11001011B;T1計數(shù)器,方式0,運(yùn)行與INT1有關(guān);T0定時器,方式3,運(yùn)行與INT0有關(guān)。 TMOD=52H=01010010B;T1定時器,方式1,運(yùn)行與INT1無關(guān);T0定時器,方式2,運(yùn)行與INT0無關(guān)。5-13 如何判斷T0、T1定時器/計數(shù)器溢出?答:判斷T0、T1定時/計數(shù)溢出的方法有兩種: 查詢方式。不斷查詢T0、T1溢出標(biāo)志TF0、TF1:TF0或TF1=0時,未溢出;TF0或TF1=1時,溢出。 中斷方式。T0、T1定時/計數(shù)溢出時,在CPU

47、、T0、T1中斷開放前提下能自動產(chǎn)生中斷。5-14 設(shè)時鐘頻率為6MHz,采用定時計數(shù)器T1及其中斷控制方式,通過P1.7輸出周期為20ms的方波。編寫程序。答:#include void main( TMOD=0x00; TL1=0x18; TH1=0x63; TR1=1; EA =1; ET1=1; While(1); void serve() interrupt1 TL1=0x18; TH1=0x63; P1_7=!P1_7; 5-15 請采用定時器/計數(shù)器實(shí)現(xiàn)1s定時,控制晶振頻率為12MHz。解:選定時器T0,工作方式確實(shí)定:時鐘為12MHz時,方式0最長可定時:8.192ms;方式

48、1最長可定時65.536ms;方式2最長可定時256us可見,選方式1,每隔50ms中斷一次,中斷20次為1s。計數(shù)初值:216-X110-6=0.05 X=15536=3CB0H TH0 = 3CH, TL0 = 0B0H#include unsignedcharcount=20;/中斷次數(shù)計數(shù)器,初值為0void main( TMOD=0x01; TL0=0x0B0; TH0=0x3C; TR1=1; EA =1; ET0=1; While(1); void serve() interrupt1 TL0=0x0B0; TH0=0x3C;count-; /中斷次數(shù)減1if(count=0)T

49、R0=0;/中斷次數(shù)到達(dá)10時復(fù)位為0 5-16 設(shè)89C51單片機(jī)晶振為6MHz要求T0定時200s,分別計算采用定時方式0、方式1和方式2時的定時初值。解:方式0:1111 1100 1 1100B; TH0=0x0FC; TL0=0x1C; 方式1:B; TH0=0x0FF; TL0=0x9C; 方式2:10011100B; TL0=0x9C;5-17 設(shè)晶振頻率為11.0592MHz,串口工作于方式3,數(shù)據(jù)傳輸速率為9600b/s,試完成其初始化程序。解: 設(shè)SMOD = 1; 根據(jù)波特率計算公式計算出定時器初值為0FAH; 當(dāng)波特率不翻倍即SMOD=0時,計算得初值為0FDH。初始化程序如下:Void ser_initialize(void)SCON = 0x0D0; %寫控制字,且TI=RI=0 PCON = 0x80; %波特率加倍 TMOD = 0x20; %T1作波特率發(fā)生器,工作在方式2TH1 = 0x0FA; %波特率為9600b/pTL1 = 0X0FA; TR1 = 1; %啟動T1 EA = 1; %開中斷ES = 1; %開串行口中斷5-18 如果采用的晶振頻率為3MHz,定時/計數(shù)器T0分別工作在方式0、1和2下,其最的定時時間各為多

溫馨提示

  • 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

提交評論