單片機原理及應用(林立張俊亮版)課后習題答案_第1頁
單片機原理及應用(林立張俊亮版)課后習題答案_第2頁
單片機原理及應用(林立張俊亮版)課后習題答案_第3頁
單片機原理及應用(林立張俊亮版)課后習題答案_第4頁
單片機原理及應用(林立張俊亮版)課后習題答案_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章習題

1.什么是單片機?單片機和通用微機相比有何特點?

答:單片機又稱為單片微計算機,它的結構特點是將微型計算機的基本功能部件(如中央處理器(CPU)、存儲器、輸入接口、輸出接口、定時/計數(shù)器及終端系統(tǒng)等)全部集成在一個半導體芯片上。

雖然單片機只是一個芯片,但無論從組成還是從邏輯功能上來看,都具有微機系統(tǒng)的定義。與通用的微型計算機相比,單片機體積小巧,可以嵌入到應用系統(tǒng)中作為指揮決策中心,是應用系統(tǒng)實現(xiàn)智能化。

2.單片機的發(fā)展有哪幾個階段?8位單片機會不會過時,為什么?

答:單片機誕生于1971年,經歷了SCM、MCU、SOC三大階段,早期的SCM單片機都是8位或4位的。其中最成功的是INTEL的8031,此后在8031上發(fā)展出了MCS51系列MCU系統(tǒng)?;谶@一系統(tǒng)的單片機系統(tǒng)直到現(xiàn)在還在廣泛使用。隨著工業(yè)控制領域要求的提高,開始出現(xiàn)了16位單片機,但因為性價比不理想并未得到很廣泛的應用。90年代后隨著消費電子產品大發(fā)展,單片機技術得到了巨大提高。隨著INTEL

i960系列特別是后來的ARM系列的廣泛應用,32位單片機迅速取代16位單片機的高端地位,并且進入主流市場。然而,由于各應用領域大量需要的仍是8位單片機,因此各大公司紛紛推出高性能、大容量、多功能的新型8位單片機。

目前,單片機正朝著高性能和多品種發(fā)展,但由于MCS-51系列8位單片機仍能滿足絕大多數(shù)應用領域的需要,可以肯定,以MCS-51系列為主的8位單片機,在當前及以后的相當一段時間內仍將占據單片機應用的主導地位。

3.舉例說明單片機的主要應用領域。

答:單片機廣泛應用于儀器儀表、家用電器、醫(yī)用設備、航空航天、專用設備的智能化管理及過程控制等領域,大致可分如下幾個范疇:智能儀器

單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應用于儀器儀表中,結合不同類型的傳感器,可實現(xiàn)諸如電壓、電流、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強大。例如精密的測量設備(電壓表、功率計,示波器,各種分析儀)。

工業(yè)控制

單片機具有體積小、控制功能強、功耗低、環(huán)境適應能力強、擴展靈活和使用方便等優(yōu)點,用單片機可以構成形式多樣的控制系統(tǒng)、數(shù)據采集系統(tǒng)、通信系統(tǒng)、信號檢測系統(tǒng)、無線感知系統(tǒng)、測控系統(tǒng)、機器人等應用控制系統(tǒng)。例如工廠流水線的智能化管理,電梯智能化控制、各種報警系統(tǒng),與計算機聯(lián)網構成二級控制系統(tǒng)等。

家用電器現(xiàn)在的家用電器廣泛采用了單片機控制,從電飯煲、洗衣機、電冰箱、空調機、彩電、其他音響視頻器材、再到電子秤量設備和白色家電等。

網絡和通信

現(xiàn)代的單片機普遍具備通信接口,可以很方便地與計算機進行數(shù)據通信,為在計算機網絡和通信設備間的應用提供了極好的物質條件,現(xiàn)在的通信設備基本上都實現(xiàn)了單片機智能控制,從手機,電話機、小型程控交換機、樓宇自動通信呼叫系統(tǒng)、列車無線通信、再到日常工作中隨處可見的移動電話,集群移動通信,無線電對講機等。

醫(yī)用設備領域

單片機在醫(yī)用設備中的用途亦相當廣泛,例如醫(yī)用呼吸機,各種分析儀,監(jiān)護儀,超聲診斷設備及病床呼叫系統(tǒng)等等。

模塊化系統(tǒng)

某些專用單片機設計用于實現(xiàn)特定功能,從而在各種電路中進行模塊化應用,而不要求使用人員了解其內部結構。如音樂集成單片機,看似簡單的功能,微縮在純電子芯片中(有別于磁帶機的原理),就需要復雜的類似于計算機的原理。如:音樂信號以數(shù)字的形式存于存儲器中(類似于ROM),由微控制器讀出,轉化為模擬音樂電信號(類似于聲卡)。在大型電路中,這種模塊化應用極大地縮小了體積,簡化了電路,降低了損壞、錯誤率,也方便于更換。

汽車電子

單片機在汽車電子中的應用非常廣泛,例如汽車中的發(fā)動機控制器,基于CAN總線的汽車發(fā)動機智能電子控制器、GPS導航系統(tǒng)、abs防抱死系統(tǒng)、制動系統(tǒng)、胎壓檢測等。

此外,單片機在工商、金融、科研、教育、電力、通信、物流和國防航空航天等領域都有著十分廣泛的用途。

4.將十進制數(shù)37轉換為二進制,BCD碼和十六進制數(shù),并對轉換結果進行對比分析。

答:37=(100101)B=(25)H;BCD

碼為

0011

0111;

可見,同一個數(shù)用不同進制表示,其結果也不同。

5.寫出下列十進制數(shù)在8位微機中的原碼,反碼和補碼形式。

(1)+36

原碼

0010

0100B

反碼

0010

0100B

補碼

0010

0100B

(2)-36

原碼

1010

0100B

反碼

1101

1011B

補碼

1101

1100B

(3)+127

原碼

0111

1111B

反碼

0111

1111B補碼

0111

1111B

(4)-128

原碼

1000

0000B

反碼

0111

1111B

補碼

1000

0000B

(5)-121

原碼

1111

1001B

反碼

1000

0110B

補碼

1000

0111B

6.對于二進制數(shù)1000

1001B,若理解為無符號數(shù),則該數(shù)對應十進制數(shù)為多少?若理解為有符號數(shù),則該數(shù)對應十進制為多少?若理解為BCD數(shù),則該數(shù)對應十進制數(shù)為多少?

答:1000

1001B無符號數(shù):137有符號數(shù):-9;

BCD數(shù):89;

7.對下列各組數(shù)進行“與”,“或”和“異或”運算。

(1)1010

1010

和0000

0000與

0000

0000或

1010

1010異或

1010

1010(2)0111

0111

和1000

1000與

0000

0000或

1111

1111異或

1111

1111(3)1110

1110

0111

0111與

0110

0110或

1111

1111異或

1001

1001(4)0011

1100

1111

0000與

0011

0000或

1111

1100異或

1100

11008.Proteus

ISIS的工作界面中包含哪幾個窗口?菜單欄中包含哪幾個選項?

答:Proteus

ISIS的工作界面主要包括標題欄、菜單欄、工具欄、狀態(tài)欄、方位控制按鈕、仿真進程控制按鈕、對象選擇窗口,原理圖編輯窗口和預覽窗口等。

主菜單欄包含文件、查看、編輯、工具、設計、圖形、源文件、調試、庫、模板、系統(tǒng)、幫助選項。

9.利用ISIS模塊開發(fā)單片機系統(tǒng)需要經過哪幾個主要步驟?

答:(1)啟動ISIS;(2)繪制電路原理圖;

(3)輸入單片機程序;

(4)進行源代碼調試;

(5)仿真運行。

10.何謂PCB?利用ARES模塊進行PCB設計需要經過哪幾個主要步驟?

答:PCB(Printed

Circuit

Board),中文名稱為印制電路板,又稱印刷電路板、印刷線路板,是重要的電子部件,是電子元器件的支撐體,是電子元器件電氣連接的提供者。由于它是采用電子印刷術制作的,故被稱為“印刷”電路板。

利用ARES模塊進行PCB設計的主要步驟:

(1)啟動ARES;

(2)元器件布局;

(3)元器件布線;

(4)鋪銅;

(5)三維效果圖;

(6)CADCAM輸出。第2章MCS-51單片機結構及原理習題MSC-51單片機內部由哪些功能部件組成,各有什么功能?答:以51單片機為例,其內部功能部件有:控制器:是對取自程序存儲器中的指令進行譯碼,在規(guī)定的時刻發(fā)出各種操作所需的控制信號,完成指令所規(guī)定的功能;運算器:根據控制器發(fā)來的信號,執(zhí)行算術邏輯運算操作;存儲器:包括程序存儲和數(shù)據存儲器;定時器計數(shù)器:2個16位定時器/計數(shù)器,可對機器周期計數(shù),也可對外部輸入脈沖計數(shù);中斷系統(tǒng):可響應三個內部中斷源和兩個外部中斷源的中斷請求;輸入輸出接口:4個8位并行口和一個全雙工串行口;2.MSC-51單片機外部引腳的名稱是什么?各有什么功能?答:(1)電源及晶振引腳VCC(40腳):+5V電源引腳VSS(20腳):接地引腳XTAL1(19腳);外接晶振引腳(內置放大器輸入端)XTAL2(18腳):外接晶振引腳(內置放大器輸出端)(2)控制引腳RST/VPD(9)為復位/備用電源引腳ALE/PROG(30)為地址鎖存使能輸出/編程脈沖輸入PSEN(29):輸出訪問片外程序存儲器讀選通信號EA/VPP(31):外部ROM允許訪問/編程電源輸入(3)并行I/O口引腳P0.0~P0.7(39~32腳)——P0口; P1.0~P1.7(1~8腳)——P1口;P2.0~P2.7(21~28腳)——P2口;P3.0~P3.7(10~17腳)——P3口。3.51系列單片機的封裝有哪些類型?請說明每一種封裝引腳之間的距離。答:51系列單片機的封裝有:40引腳雙列直插封裝(DIP——dualin-linepackage),引腳之間的距離是100mil();44引腳方形扁平封裝(QFP——quadflatpackage)方式,引腳之間的距離是;44引腳帶引線的塑料芯片載體PLCC(PlasticLeadedChipCarrier)。4.什么是復位?單片機復位電路有哪幾種,工作原理分別是什么?答:復位——使單片機恢復原始默認狀態(tài)的操作。單片機復位電路有:上電復位電路,由電阻和電容構成,通過上電時,電容相當于短路而使復位引腳在晶振有效的情況下保持2個機器周期的高電平;按鈕開關復位電路,由兩個電阻的分壓構成,通過手工按下按鈕,使復位引腳在晶振有效的情況下保持2個機器周期的高電平。5.通常的微機系統(tǒng)存儲器結構有哪幾種?MCS-51單片機存儲器屬于哪一類?CS-51可尋址多大空間?答:通常的微機系統(tǒng)存儲器結構有兩種結構,即哈佛結構和馮諾依曼結構(也叫普林斯頓結構),MCS-51單片機存儲器屬于,MCS-51可尋址空間是兩個64KB,即64KB的程序存儲空間和64KB的數(shù)據存儲空間。6.片內RAM中低128個單元劃分為哪三個主要部分?各部分的主要功能是什么?答:片內RAM中低128個單元劃分為三個部分:①工作寄存器區(qū)(00H-1FH),四組,每組8個,可作用工作寄存器切換使用;②可位尋址區(qū)(20H-2FH),16B,位地址為00H-7FH,用作為按位尋址的空間;③用戶RAM區(qū)(30H-7FH),80B,用作普通RAM單元或堆棧。7.程序狀態(tài)字寄存器PSW各位的定義是什么?答:程序狀態(tài)字寄存器PSW各位的定義如下:CYCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0PSW.7:進/借位標志CY,加法有進位時置1,減法有借位時置1;PSW.6:輔助進位標志AC,加法運算低四位向高上四位有進位時置1;PSW.5、PSW.1:用戶標志位F0和用戶標志位F1,保存用戶的位數(shù)據;PSW.4、PSW.3:工作寄存器選擇控制位RS1和RS0,00至11分別選擇四組工作之一作為當前工作寄存器PSW.2:溢出標志位OV,有符號數(shù)加、減運算結果有溢出或乘除上結果異常(乘法運算結果大于255即乘積在BA中,或除法運算除數(shù)為0)時置1PSW.0:奇偶標志位P,累加器A中1的個數(shù)為奇數(shù)時置1。8.什么是時鐘周期?什么是機器周期?什么是指令周期?當振蕩頻率為12MHz時,一個機器周期為多少微秒?答:時鐘周期又叫振蕩周期或拍,用P表示,是MCS-51單片機中最小的時間單位,在一個時鐘周期內,CPU完成一個最基本的動作。機器周期:由12個時鐘周期構成,完成一個基本操作指令周期:是執(zhí)行一條指令所需的時間,根據指令的復雜性,可由1~4個機器周期構成。當振蕩頻率為12MHz時,一個機器周期為1微秒。9.P0、P1、P2和P3口的結構和功能分別是什么?答:P0口的每一位由1個鎖存器、2個三態(tài)緩沖器、1個輸出控制電路(非門X、與門、電子開關MUX、輸出驅動電路構成,其功能既可以作為通用I/O口實現(xiàn)輸入/輸出功能,也可作為單片機地址線的低8位和數(shù)據線實現(xiàn)外部擴展功能。在用作輸入輸出口時,需外接上拉電阻。P1口的每一位由1個鎖存器、1個場效應管驅動器V和2個三態(tài)門緩沖器構成,其作用是用作輸入輸出口P2口的每一位由1個鎖存器、2個三態(tài)緩沖器、1個輸出控制單元、1個輸出驅動單元構成,其功能是用作輸入輸出口,或地址總線的高8位。P3口的每一位由1個鎖存器、2個三態(tài)緩沖器、1個第二功能控制單元、1個輸出驅動單元構成,其作用是用作輸入輸出口或第二功能。10.51單片機引腳ALE的作用是什么?當51不外接存儲器時,ALE上的輸出的脈沖頻率是多少?答:51單片機引腳ALE的作用是對外部存儲尋址時鎖存P0口輸出的低8位地址,當51不外接存儲器時,ALE上的輸出的脈沖頻率是fosc/6。第3章單片機的匯編語言與程序設計習題1.MCS-51單片機有哪幾種尋址方式?適用于什么地址空間?答:MCS-51單片機有7種尋址方式:直接尋址、寄存器尋址、寄存器間接尋址、立即尋址、變址尋址、位尋址、相對尋址。直接尋址方式:操作數(shù)的地址由指令直接給出,適用于片內RAM的所有地址空間;如 MOV A,68H MOV A,PSW寄存器尋址方式:指令給出的是寄存器的編碼,操作數(shù)在編碼指定的寄存器中,適用于片內00H至1FH的32個字節(jié),用R0,…,R7表示,通過PSW的RS1和RS0選擇組號確定對應32個字節(jié)中的其中8個,還有累加器A,以及乘除法指令中的A和B寄存器,位尋址方式中的布爾累加器C; MOV A,R1 MUL AB INC DPTR寄存器間接尋址方式:指令給出的是寄存器的編碼,操作數(shù)地址在編碼指定的寄存器中,適用于片內RAM的全部空間,其中52系列中的80H至FFH只能用寄存器間接尋址;如 MOV A,@R0 MOV A,@R1 MOVX A,@DPTR立即尋址方式:操作數(shù)本身在指令中直接,給出適用于用8位立即數(shù)對片內RAM所有地址單元賦值,也可用16位立即數(shù)對DPTR賦值;如 MOV A,#0E2H MOV DPTR,#2000H變址尋址方式:以DPTR或PC作為基地址寄存器,以累加器A作為變址寄存器,將基址寄存器與變址寄存器的內容相加形成操作數(shù)的實際地址的一種尋址方式,變址尋址方式適用于程序存儲器ROM,僅有三條指令如下:MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR位尋址方式:指令中直接給出操作數(shù)所在單元的位地址,適用于片內RAM中地址20H至2FH中的16個字節(jié)中的128個位地址空間和80H至FFH中地址中可以被8整除的所有SFR中的每個位地址空間;如 MOV C,7FH MOV F0,C MOV C,ACC.7相對尋址方式:為相對轉移指令而設,指令中直接給出轉移的相對偏移量,其轉移目標在當前指令-128至+127字節(jié)范圍內的地址空間。如 SJMP START HERE: SJMP HERE ;等效于: SJMP $2.MCS-51單片機的PSW程序狀態(tài)字中無ZERO(零)標志位,怎樣判斷某內部數(shù)據單元的內容是否為零?答:MCS-51單片機的PSW程序狀態(tài)字中無ZERO(零)標志位,判斷某內部數(shù)據單元的內容是否為零是能通過取數(shù)到A累加器,再判斷A中的每一位是否為零來確定其值是否為零。3.編程將內部RAM的20H--30H單元內容清零。解:設一個片內RAM指針R0,先指向首地址20H,通過累加器A清零,然后采用間接尋址方式依次將A中的零值傳送到指針所指的片內RAM單元,每傳送一個字節(jié),地址指針加1,直到達到地址為30H或達到計數(shù)器規(guī)定的17個字節(jié)為止。程序1: MOV R0,#20H ;設地址指針初值 CLR A ;累加器清0CONT: MOV @R0,A ;置0指針所指單元 INC R0 ;地址指針加1 CJNE R0,#31H,CONT ;指針未超過終點則繼續(xù) SJMP $ ;暫停程序2: MOV R0,#20H ;設地址指針初值 CLR A ;累加器清0 MOV R7,#17 ;計數(shù)器賦初值,從20H到30H共17個字節(jié)CONT: MOV @R0,A ;置0指針所指單元 INC R0 ;地址指針加1 DJNZ R7,CONT ;計數(shù)器減1,非0,則繼續(xù) SJMP $ ;暫停4.編程查找內部RAM的32H~41H單元中是否有0AAH這個數(shù)據,若有這一數(shù)據,則將50H單元置為0FFH,否則將50H單元清零。解:設一個片內RAM指針R0,先指向首地址32H,比較@R0與#0AAH,若相等,則退出循環(huán),給50H單元賦0FFH,若不相等,則R0加1為繼續(xù)比較下一個字節(jié)做準備,直到達到地址為41H或達到計數(shù)器規(guī)定的16個字節(jié)為止還沒找到,則給50H單元賦00H程序1: MOV R0,#32H ;設地址指針初值CONT: CJNE @R0,#0AAH,NEXT;比較查找值與指針所指單元的值,不相等轉移 MOV A,#0FFH ;相等,則準備好要賦的標志值0FFH SJMP DOWN ;轉存到保存結果處NEXT: INC R0 ;修改地址指針 CJNE R0,#42H,CONT ;若指針未越過終點,則繼續(xù) MOV A,#00H ;查找失敗,則將00H存入結果標志單元DOWN: MOV 50H,A ;將比較結果標志存入50H單元 SJMP $ ;暫停 END程序2: MOV R7,#16 ;計數(shù)器賦初值,從20H到30H共16個字節(jié) MOV R0,#32H ;設地址指針初值CONT: CJNE @R0,#0AAH,NEXT ;比較查找值與指針所指單元的值,不相等轉移 MOV A,#0FFH ;相等,則準備好要賦的標志值0FFH SJMP DOWN ;轉存到保存結果處NEXT: INC R0 ;修改地址指針 DJNZ R7,CONT ;計數(shù)器減1,非0,則繼續(xù) MOV A,#00H ;查找失敗,則將00H存入結果標志單元DOWN: MOV 50H,A ;將比較結果標志存入50H單元 SJMP $ ;暫停 END5.查找20H~4FH單元中出現(xiàn)00H的次數(shù),并將查找結果存入50H單元。解:從20H到4FH共48個字節(jié) MOV R7,#48 ;字節(jié)計數(shù)器賦初值MOV R0,#20H ;設地址指針初值CONT: CJNE @R0,#00H,NEXT ;比較查找值與指針所指單元的值,不相等轉移 INC R6 ;相等,0的個數(shù)計數(shù)器加1NEXT: INC R0 ;修改地址指針 DJNZ R7,CONT ;計數(shù)器減1,非0,則繼續(xù) MOV 50H,R6 ;保存O的個數(shù)計數(shù)值到50H單元 SJMP $ ;暫停 END END6.已知A=83H,R0=17H,(17H)=34H,寫出下列程序段執(zhí)行之后的A中的內容。ANL A,#17HORL 17H,AXRL A,@R0CPL A END答: ANL A,#17H ;A=03H ORL 17H,A ;(17H)=00110100∨00000011=00110111 XRL A,@R0 ;A=00000011∨00110111=00110100 CPL A ;A=110010117.已知單片機的晶振頻率為12MHz,分別設計延時為0.1s、1s的子程序。答:已知單片機的晶振頻率為12MHz,則機器周期為1us,延時子程序是通過執(zhí)行指令序列中機器周期數(shù)來達到,如果要0.1s,即100ms,也就是100000us,所以需要機器周期數(shù)達到100000。要延時達到1S,可通過對延時為0.1秒的子程序調用10次來實現(xiàn)。DELAY100MS: MOVR6,#200 ;1個機器周期D1: MOVR7,#250 ;1個機器周期D2: NOP ;1個機器周期 DJNZR7,D2 ;2個機器周期,3*251=753 DJNZR6,D1 ;2個機器周期,(1+753+2)*132=99792 RET ;2個機器周期,1+99792+2=99795,約100msDELAY1S: MOV R7,#10 ;計數(shù)10次 1LOOP: ACALL DELAY100MS ;延時100ms子程序 99795+2 DJNZ R7,LOOP ;未達到10次則繼續(xù) 10*(2+99795+2) RET ;返回2+10*(2+99795+2)=9979928.內部RAM從20H單元開始處有一數(shù)據塊,以ODH為結束標志,試統(tǒng)計該數(shù)據塊的長度,將該數(shù)據塊送到外部數(shù)據存儲器7E01H開始的單元,并將長度存入7E00H單元。解:從20H的指針用R0,從外部RAM7E01開始的指針用DPTR,計數(shù)器用R7 MOV R7,#0 ;字節(jié)計數(shù)器賦初值 MOV R0,#20H ;設片內RAM地址指針初值 MOV DPTR,#7E01H ;設片外RAM地址指針初值CONT: MOV A,@R0 ;取片內RAM中的一個字節(jié) MOVX @DPTR,A ;存入片外RAM指針所指單元 INC R7 ;長度計數(shù)器加1 INC R0 ;片內RAM地址指針加1 INC DPTR ;片外RAM地址指針加1 CJNE A,#0DH,CONT ;未達到結束標志 MOV A,R7 ;取塊計數(shù)長度值 MOVX @DPTR,A ;保存 SJMP $ ;暫停 END9.內部RAM從DATA開始的區(qū)域中存放著10個單字節(jié)十進制數(shù),求其累加和,并將結果存入SUM和SUM+1單元。解:R7計數(shù),R6保存累加和高8位,R0用作地址指針 ORG 0000H LJMP MAIN ORG 100HSUM EQU 30HDATAA EQU 40HMAIN: MOV R7,#10 ;字節(jié)計數(shù)器賦初值 MOV R0,#DATAA ;設片內RAM地址指針初值 CLR A ;累加器清0 MOV R6,A ;累加結果的高8位CONT: ADD A,@R0 ;加RAM中的一個字節(jié)到ACC DA A JNC NEXT ;若無進位則不用管高8位 INC R6 ;有進位,高8位加1NEXT: INC R0 ;片內RAM地址指針加1 DJNZ R7,CONT ;未完繼續(xù) MOV SUM,A ;保存低8位 MOV SUM+1,R6 ;保存高8位 SJMP $ ;暫停 END10.內部RAM從DATA1和DATA2單元開始處存放著兩個等長的數(shù)據塊,數(shù)據塊的長度在LEN單元中。請編程檢查這兩個數(shù)據塊是否相等,若相等,將0FFH寫入RESULT單元,否則將0寫入RESULT單元。解:從DATA1開始的指針用R0,從DATA2開始的指針用R1,計數(shù)器用R7LEN EQU 10DATA1 EQU 30HDATA2 EQU 40HRESULT EQU 50H MOV R7,#LEN ;字節(jié)計數(shù)器賦初值 MOV R0,#DATA1 ;設片內RAM地址指針初值 MOV R1,#DATA2 ;設片外RAM地址指針初值CONT: MOV A,@R0 ;取片內RAMR0所指的的一個字節(jié) MOV 7FH,@R1 ;將R1所指單元內容取到片內RAM地址7FH中 CJNE A,7FH,NOEQ ;比較,不相等則結束 INC R0 ;DATA1RAM地址指針加1 INC R1 ;DATA2RAM地址指針加1 DJNZ R7,CONT ;未完,繼續(xù) MOV A,#0FFH ;相等,準備寫入FFH SJMP DOWN ;轉寫入結果處NOEQ: MOV A,#0 ;不相等,準備寫入00HDOWN: MOV RESULT,A ;保存比較結果標志 SJMP $ ;暫停 END11.編制程序,將內部RAM中M1、M2、M3和M4單元中的無符號數(shù)xl、x2、x3和x4相加,并把和存入RO和R1(R0中為高8位)中。解:M1 EQU 30HM2 EQU 40HM3 EQU 45HM4 EQU 4FH MOV A,M1 ;取第一個數(shù) ADD A,M2 ;與第二個數(shù)相加 JNC NEXT1 ;如果無進位,則轉移至第三個相加 MOV R0,#1 ;有進位,高8位置1NEXT1: ADD A,M3 ;與第三個數(shù)相加 JNC NEXT2 ;沒有進位,則轉至第四個數(shù)相加 INC R0 ;有進位,高8位加1NEXT2: ADD A,M4 ;與第四個數(shù)相加 JNC NEXT3 ;沒有進位,則轉至結束 INC R0 ;有進位,高8位再加1NEXT3: MOV R1,A ;低8位保存到R1 SJMP $ ;暫停 END第4章單片機的C51語言習題1.C語言的優(yōu)點是什么?C程序的主要結構特點是什么?答:C語言是一種高級語言,學習比低級容易,不需要具體組織、分配存儲器資源和處理端口數(shù)據,可以直接驅動單片機的所有資源。C程序以函數(shù)為單位,由一個主函數(shù)和若干個其他函數(shù)構成,主函數(shù)是程序的入口,其他函數(shù)由主函數(shù)直接或間接調用。程序可以由一個文件或多個文件組成。文件類型包括頭文件和C語言源文件,也可以是匯編語言文件,C程序可與匯編語言混合編程。2.C51語言的變量定義包含哪些關鍵因素?為何這樣考慮?答:C語言的變量定義格式如下:[存儲種類]數(shù)據類型[存儲類型]變量名其中:存儲種類與標準C語言相同,包括:自動型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register)。數(shù)據類型除了包含標準C語言類型的字符型(char),整型(int),長整型(long),浮點型(float),雙精度型(double)外,還有二進制位型(bit),特殊功能寄存器型(sfr),SFR可位尋址的位類型(sbit)。存儲類型包括:片內RAM區(qū)(data)、片內可位尋址區(qū)(bdata),片內RAM間接尋址區(qū)(idata),片外RAM頁尋址區(qū)(pdata),片外RAM區(qū)(xdata)、ROM區(qū)(code)。只所以比標準C語言多了存儲類型,就是因為MCS-51單片機的存儲結構中有四個物理存儲空間(片內RAM、片內ROM,片外RAM,片外ROM),三個邏輯地址空間(片內RAM,片外RAM,ROM),而且有多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋址)所致,所以在定義變量時,要根據其所在位置和尋址方式明確指定存儲類型。3.C51與匯編語言的特點各有哪些?怎樣實現(xiàn)兩者的優(yōu)勢互補?答:C51是結構化語言,代碼緊湊;接近自然語言,程序可讀性強,易于調試、維護;庫函數(shù)豐富,編程工作量小,可使產品開發(fā)周期短;具有機器級控制能力,功能很強,適合于嵌入式系統(tǒng)開發(fā);匯編指令無關,易于掌握,上手快。 匯編語言優(yōu)點是編寫的程序代碼精煉、執(zhí)行速度快,在相同功能下,匯編語言程序可能比C語言程序效率高。缺點是對程序員要求高,必須對單片機的硬件結構非常熟悉才能編程,不便于編寫比較復雜的程序??筛鶕枰獙σ髸r間性很強的代碼用匯編語言編寫,其它部分用C語言編寫,兩者混合編程就可以實現(xiàn)優(yōu)勢互補。4.指出下面程序的語法錯誤:#include<reg51.h>main(){a=C;inta=7,Cdelay(10)voiddelay();{cgari;for(i=O;i<=255;”++”);}答:#include<reg51.h>main(){a=C; //a和C必須先定義才可使用inta=7,C //缺分號,應該提在使用前說明delay(10) //延時子程序必須先定義,或先有函數(shù)原型說明voiddelay();{ //作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,//即不能在一個函數(shù)內定義另一個函數(shù),而且“{”前不應有分號//作為函數(shù)原型說明,應該放在函數(shù)調用之前,且其后不應該接函數(shù)體cgari; //字符型應該是unsignedcharfor(i=O;i<=255;”++”);//”++”應改成i++}//主函數(shù)沒有結束,缺”}”5.定義變量a,b,c,其中a為內部RAM的可位尋址區(qū)的字符變量,b為外部數(shù)據存儲區(qū)浮點型變量,c為指向int型xdata區(qū)的指針。答: charbdataa; floatxdatab; intxdata*c;6.編程將8051的內部數(shù)據存儲器20H單元和35H單元的數(shù)據相乘,結果存到外部數(shù)據存儲器中(任意位置)。解:方法一:用嵌入式匯編語言實現(xiàn)#include<reg51.h>voidmain(){ #pragma asm MOV A,20H MOV B,35H MUL AB MOV DPTR,#1234H MOVX @DPTR,A INC DPTR MOV A,B MOVX @DPTR,A #pragma endasm}方法二:單用C語言編程實現(xiàn)#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){unsignedintxdatax;unsignedchar*ptr,a,b;ptr=0x25;a=*ptr;ptr=0x30;b=*ptr;x=a*b;}7.8051的片內數(shù)據存儲器25H單元中存放有一個0~10的整數(shù),編程求其平方根(精確到5位有效數(shù)字),將平方根放到30H單元為首址的內存中。解:方法一:用C語言與匯編語言混合編程實現(xiàn)//用C語言編寫的主函數(shù)MAIN.C#include<reg51.h>#include<math.h>chargetdata(char);voidmain(){chara=0x25,c;floatf;c=getdata(a);f=sqrt(c);};用匯編語言編寫的取數(shù)據子函數(shù),只有一個地址參數(shù)在R7中,返回值為指定地址單元中的內容,用R7返回主函數(shù)。PUBLIC_GETDATADE SEGMENTCODERSEG DE_GETDATA: MOV A,R7 ;取地址參數(shù) MOV R0,A MOV A,@R0 MOV R7,A ;返回地址單元中的內容EXIT: RET END方法二:單用C語言編程實現(xiàn)//MAIN.C#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){charn;char*ptr;float*ptr2;floatf;ptr=0x25;n=*ptr;f=sqrt(n);ptr2=0x30;*ptr2=f;}8.將外部RAM10H~15H單元的內容傳送到內部RAM10H~15H單元。解:方法一:采用C語言與匯編語言混合編程//用C語言編寫的主函數(shù)MAIN.C#include<reg51.h>charmovdata(char,char);voidmain(){ chara=0x10,b=0x06;movdata(a,b);};用匯編語言編寫的移動數(shù)據子函數(shù)MOVDATA,其中第一個參數(shù)在R7中為首地址,第二個參數(shù)在R5中為字節(jié)數(shù)PUBLIC_MOVDATADE SEGMENTCODERSEG DE_MOVDATA: MOV A,R7 ;取參數(shù) MOV R0,ALOOP: MOVX A,@R0 MOV @R0,A DJNZ R5,LOOPEXIT: RET END方法二:單用C語言編程實現(xiàn)//MAIN.C#include<reg51.h>intmovdata(char);voidmain(){charn=6;char*ptr1=0x10;charxdata*ptr2;ptr2=0x20;while(n--){*ptr2++=*ptr1++;}}9.內部RAM20H、21H和22H、23H單元分別存放著兩個無符號的16位數(shù),將其中的大數(shù)置于24H和25H單元。解:方法一:#include<reg51.h>voidmain(){ unsignedint*ptr; //設置一個內部RAM指針unsignedintx,y,z; ptr=0x20; //指向0x20單元x=*ptr; //取第一個數(shù)ptr=0x22; //指向0x22單元y=*ptr; //取第二個數(shù)z=(x>y)?x:y; //將兩數(shù)中的較大者賦給zptr=0x24; //指向地址為0x24的目標單元*ptr=z; //將大數(shù)存入目標單元}方法二:#include<reg51.h>#include<absacc.h>voidmain(){ unsignedintx,y,z; x=DBYTE[0X20]*256+DBYTE[0X21];y=DBYTE[0X22]*256+DBYTE[0X23];z=(x>y)?x:y; //將兩數(shù)中的較大者賦給zDBYTE[0X24]=z/256; DBYTE[0X25]=z%256;}方法三:#include<reg51.h>unsignedintx_at_0x20;unsignedinty_at_0x22;unsignedintz_at_0x24;voidmain(){ z=(x>y)?x:y;}第4章單片機的C51語言習題1.C語言的優(yōu)點是什么?C程序的主要結構特點是什么?答:C語言是一種高級語言,學習比低級容易,不需要具體組織、分配存儲器資源和處理端口數(shù)據,可以直接驅動單片機的所有資源。C程序以函數(shù)為單位,由一個主函數(shù)和若干個其他函數(shù)構成,主函數(shù)是程序的入口,其他函數(shù)由主函數(shù)直接或間接調用。程序可以由一個文件或多個文件組成。文件類型包括頭文件和C語言源文件,也可以是匯編語言文件,C程序可與匯編語言混合編程。2.C51語言的變量定義包含哪些關鍵因素?為何這樣考慮?答:C語言的變量定義格式如下:[存儲種類]數(shù)據類型[存儲類型]變量名其中:存儲種類與標準C語言相同,包括:自動型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register)。數(shù)據類型除了包含標準C語言類型的字符型(char),整型(int),長整型(long),浮點型(float),雙精度型(double)外,還有二進制位型(bit),特殊功能寄存器型(sfr),SFR可位尋址的位類型(sbit)。存儲類型包括:片內RAM區(qū)(data)、片內可位尋址區(qū)(bdata),片內RAM間接尋址區(qū)(idata),片外RAM頁尋址區(qū)(pdata),片外RAM區(qū)(xdata)、ROM區(qū)(code)。只所以比標準C語言多了存儲類型,就是因為MCS-51單片機的存儲結構中有四個物理存儲空間(片內RAM、片內ROM,片外RAM,片外ROM),三個邏輯地址空間(片內RAM,片外RAM,ROM),而且有多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋址)所致,所以在定義變量時,要根據其所在位置和尋址方式明確指定存儲類型。3.C51與匯編語言的特點各有哪些?怎樣實現(xiàn)兩者的優(yōu)勢互補?答:C51是結構化語言,代碼緊湊;接近自然語言,程序可讀性強,易于調試、維護;庫函數(shù)豐富,編程工作量小,可使產品開發(fā)周期短;具有機器級控制能力,功能很強,適合于嵌入式系統(tǒng)開發(fā);匯編指令無關,易于掌握,上手快。 匯編語言優(yōu)點是編寫的程序代碼精煉、執(zhí)行速度快,在相同功能下,匯編語言程序可能比C語言程序效率高。缺點是對程序員要求高,必須對單片機的硬件結構非常熟悉才能編程,不便于編寫比較復雜的程序??筛鶕枰獙σ髸r間性很強的代碼用匯編語言編寫,其它部分用C語言編寫,兩者混合編程就可以實現(xiàn)優(yōu)勢互補。4.指出下面程序的語法錯誤:#include<reg51.h>main(){a=C;inta=7,Cdelay(10)voiddelay();{cgari;for(i=O;i<=255;”++”);}答:#include<reg51.h>main(){a=C; //a和C必須先定義才可使用inta=7,C //缺分號,應該提在使用前說明delay(10) //延時子程序必須先定義,或先有函數(shù)原型說明voiddelay();{ //作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,//即不能在一個函數(shù)內定義另一個函數(shù),而且“{”前不應有分號//作為函數(shù)原型說明,應該放在函數(shù)調用之前,且其后不應該接函數(shù)體cgari; //字符型應該是unsignedcharfor(i=O;i<=255;”++”);//”++”應改成i++}//主函數(shù)沒有結束,缺”}”5.定義變量a,b,c,其中a為內部RAM的可位尋址區(qū)的字符變量,b為外部數(shù)據存儲區(qū)浮點型變量,c為指向int型xdata區(qū)的指針。答: charbdataa; floatxdatab; intxdata*c;6.編程將8051的內部數(shù)據存儲器20H單元和35H單元的數(shù)據相乘,結果存到外部數(shù)據存儲器中(任意位置)。解:方法一:用嵌入式匯編語言實現(xiàn)#include<reg51.h>voidmain(){ #pragma asm MOV A,20H MOV B,35H MUL AB MOV DPTR,#1234H MOVX @DPTR,A INC DPTR MOV A,B MOVX @DPTR,A #pragma endasm}方法二:單用C語言編程實現(xiàn)#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){unsignedintxdatax;unsignedchar*ptr,a,b;ptr=0x25;a=*ptr;ptr=0x30;b=*ptr;x=a*b;}7.8051的片內數(shù)據存儲器25H單元中存放有一個0~10的整數(shù),編程求其平方根(精確到5位有效數(shù)字),將平方根放到30H單元為首址的內存中。解:方法一:用C語言與匯編語言混合編程實現(xiàn)//用C語言編寫的主函數(shù)MAIN.C#include<reg51.h>#include<math.h>chargetdata(char);voidmain(){chara=0x25,c;floatf;c=getdata(a);f=sqrt(c);};用匯編語言編寫的取數(shù)據子函數(shù),只有一個地址參數(shù)在R7中,返回值為指定地址單元中的內容,用R7返回主函數(shù)。PUBLIC_GETDATADE SEGMENTCODERSEG DE_GETDATA: MOV A,R7 ;取地址參數(shù) MOV R0,A MOV A,@R0 MOV R7,A ;返回地址單元中的內容EXIT: RET END方法二:單用C語言編程實現(xiàn)//MAIN.C#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){charn;char*ptr;float*ptr2;floatf;ptr=0x25;n=*ptr;f=sqrt(n);ptr2=0x30;*ptr2=f;}8.將外部RAM10H~15H單元的內容傳送到內部RAM10H~15H單元。解:方法一:采用C語言與匯編語言混合編程//用C語言編寫的主函數(shù)MAIN.C#include<reg51.h>charmovdata(char,char);voidmain(){ chara=0x10,b=0x06;movdata(a,b);};用匯編語言編寫的移動數(shù)據子函數(shù)MOVDATA,其中第一個參數(shù)在R7中為首地址,第二個參數(shù)在R5中為字節(jié)數(shù)PUBLIC_MOVDATADE SEGMENTCODERSEG DE_MOVDATA: MOV A,R7 ;取參數(shù) MOV R0,ALOOP: MOVX A,@R0 MOV @R0,A DJNZ R5,LOOPEXIT: RET END方法二:單用C語言編程實現(xiàn)//MAIN.C#include<reg51.h>intmovdata(char);voidmain(){charn=6;char*ptr1=0x10;charxdata*ptr2;ptr2=0x20;while(n--){*ptr2++=*ptr1++;}}9.內部RAM20H、21H和22H、23H單元分別存放著兩個無符號的16位數(shù),將其中的大數(shù)置于24H和25H單元。解:方法一:#include<reg51.h>voidmain(){ unsignedint*ptr; //設置一個內部RAM指針unsignedintx,y,z; ptr=0x20; //指向0x20單元x=*ptr; //取第一個數(shù)ptr=0x22; //指向0x22單元y=*ptr; //取第二個數(shù)z=(x>y)?x:y; //將兩數(shù)中的較大者賦給zptr=0x24; //指向地址為0x24的目標單元*ptr=z; //將大數(shù)存入目標單元}方法二:#include<reg51.h>#include<absacc.h>voidmain(){ unsignedintx,y,z; x=DBYTE[0X20]*256+DBYTE[0X21];y=DBYTE[0X22]*256+DBYTE[0X23];z=(x>y)?x:y; //將兩數(shù)中的較大者賦給zDBYTE[0X24]=z/256; DBYTE[0X25]=z%256;}方法三:#include<reg51.h>unsignedintx_at_0x20;unsignedinty_at_0x22;unsignedintz_at_0x24;voidmain(){ z=(x>y)?x:y;}第5章單片機的中斷系統(tǒng)習題1.什么是中斷、中斷源、中斷優(yōu)先級和中斷嵌套?答:中斷是指單片機內部有一個中斷管理系統(tǒng),它對內部的定時器事件、串行通信的發(fā)送和接收及外部事件(如鍵盤按鍵動作)等進行自動的檢測判斷。當CPU正在處理某件事情(例如正在執(zhí)行主程序)的時候,外部或內部發(fā)生的某一事件(如某個引腳上電平的變化,一個脈沖沿的發(fā)生或計數(shù)器的計數(shù)溢出等)請求CPU迅速處理,于是,中斷管理系統(tǒng)會置位相應標志通知CPU暫時中止當前的工作,迅速轉去處理所發(fā)生的事件。處理完該事件后,再回到原來被中止的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。引發(fā)中斷的事件稱為中斷源。將中斷事件按輕重緩急分若干級別叫中斷優(yōu)先級。允許中斷優(yōu)先級高的中斷源中斷正在執(zhí)行的低優(yōu)先級的中斷服務程序叫中斷嵌套。2.什么叫中斷源?MCS-51有哪些中斷源?各有什么特點?它們的中斷向量地址分別是多少?答:中斷源即引發(fā)中斷的事件。MCS-51單片機有5個中斷源,它們是外部中斷0,定時器T0,外部中斷1,定時器T1,串行口。外部中斷源是由引腳的觸發(fā)信號引起的中斷,定時器中斷源是由于定時器計數(shù)器的溢出引發(fā)的中斷,串行口是由于串行通信的發(fā)送或接收引發(fā)的中斷。外部中斷0,定時器T0,外部中斷1,定時器T1,串行口五個中斷源的中斷向量地址依次為:0003H,000BH,0013H,001BH,0023H。3.MCS-51中斷的中斷響應條件是什么?答:(1)中斷源有中斷請求;(2)此中斷源允許位為1,即中斷源可以向CPU發(fā)中斷請求;(3)CPU開總中斷,即EA=1;(4)無同級或者更高級中斷正在服務4.MCS-51的中斷響應過程是怎樣的?答:(1)將相應的中斷優(yōu)先級狀態(tài)觸發(fā)器置1,以阻斷后來的同級和低級中斷請求;(2)由硬件清除相應的中斷請求標志,串行口的發(fā)送和接收中斷除外;(3)執(zhí)行一條硬件LCALL指令,即把程序計數(shù)器PC的內容壓入堆棧保存,再將相應的中斷服務程序的入口地址送入PC;5.編寫出外部中斷1為下跳沿觸發(fā)的中斷初始化程序。解:voidInt1_init(){ IT1=1; EA=1;EX1=1; //IE=0x84;//IE|=0x84;}6.有一外部中斷源,接入端,當其中有中斷請求時,要求CPU把一個從內部RAM30H單元開始的50個字節(jié)的數(shù)據塊傳送到外部RAM從1000H開始的連續(xù)存儲區(qū)。請編寫對應的程序。解: #include<reg51.h> voidmain(){ IT0=1

;EA=1; EX0=1; while(1)

; } voidintx0()interrupt0using1{ char*ptr1=0x30; charxdata*ptr2=0x1000; for(i=0;i<50;i++)*ptr2++=*ptr1++; }7.設fosc=12MHz,利用定時器,TO(工作在方式2)在P1.1引腳上獲取輸出周期為O.4ms的方波信號,定時器溢出時采用中斷方式處理,請編寫,T0的初始化程序及中斷服務程序。解:fosc=12MHz,則機器周期=1us;當T0工作在方式2時,其最大定時時間為256us,要輸出周期為0.4mS即400us的方波信號,則其高、低電平應各為200us,顯然當定時器T0按方式2工作時,只需計數(shù)達到200次即可,因此其時間常數(shù)初值為256-200=56。在T0的中斷服務程序中,只需將P1.1引腳求反即可。#include<reg51.h>sbitP1_1=P1^1;voidtimer0()interrupt1using1{P1_1=!P1_1;}voidmain(){P1_1=0;TMOD=0x02;TH0=56;TL0=56;IE=0x82;TR0=1;for(;;){}}8.設fosc=6MHz,要求每隔50ms,從內部RAM以30H開始的數(shù)據存儲區(qū)傳送一個字節(jié)數(shù)據到外部RAM以2000H開始的連續(xù)存儲區(qū),共傳送50個數(shù)據。要求:采用定時器T1以方式2實現(xiàn)定時,數(shù)據傳送在中斷服務程序中完成。解:fosc=6MHz,機器周期=12/6*10-6S=2us,T1工作在方式2時,最大定時時間為512us,要定時50ms,可以計數(shù)100次,每次定時500us來實現(xiàn),方式2定時500us需計數(shù)250次,故其時間常數(shù)為256-250=6。#include<reg51.h>charintcnt=0;charmovcnt=0;char*ptr1=0x30;charxdata*ptr2=0x2000;voidtimer1()interrupt3using1{ intcnt++; if(intcnt==100){if(mocnt<50){*ptr2++=*ptr1++;movcnt++; } elseEX1=0; intcnt=0; }}voidmain(){TMOD=0x20;TH1=6;TL1=6;IE=0x84;TR1=1;for(;;){}}9.805l單片機只有兩個外部中斷源,若要擴展成8個外部中斷源,請畫出實現(xiàn)這種擴展的硬件線路圖,并說明如何確定各中斷源的優(yōu)先級。解:用按鈕開關模擬中斷源的中斷請求,INT0單獨作為一個中斷源,INT1擴展成7個中斷源,有中斷請求時,借助于P2口識別是這七個中斷源是哪個請求中斷,為了驗證正確性,如果是INT0中斷,則在P0口的數(shù)碼管上顯示0,是INT1中斷,則根據從上到下是哪個中斷源在P0口的數(shù)碼管上顯示1—7。具體電路和程序如下:#include<reg51.h>charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};voidINT0_srv(void)interrupt0using1//外部中斷0處理程序{P0=led_mod[0];}voidINT1_srv(void)interrupt2using2//外部中斷1處理程序{charintnum;intnum=P2;switch(intnum){case0xfe:P0=led_mod[1];break; case0xfd:P0=led_mod[2];break; case0xfb:P0=led_mod[3];break; case0xf7:P0=led_mod[4];break; case0xef:P0=led_mod[5];break; case0xdf:P0=led_mod[6];break; case0xbf:P0=led_mod[7];}}voidmain(){EA=1; EX0=1;EX1=1;P0=0;while(1);}第6章單片機的定時器/計數(shù)器習題1.MCS-51系列的8051單片機內有幾個定時/計數(shù)器?每個定時/計數(shù)器有幾種工作方式?如何選擇?答:MCS-51系列的8051單片機內有2個定時/計數(shù)器,即T0和T1,每個都可以編程為定時器或計數(shù)器,T0有四種工作方式(方式0—13位、方式1—16位、方式2-可自動裝入初值的8位、方式3-兩個8位),T1有三種工作方式(與T0相同的前三種),通過對TMOD的設置選擇,其高四位選擇T1,低四位選擇T0。2.如果采用的晶振頻率為3MHz,定時/計數(shù)器TO分別工作在方式0、1和2下,其最大的定時時間各為多少?答:如果采用的晶振頻率為3MHz,機器周期為12×1/(3*106)=4us,由于定時/計數(shù)器TO工作在方式0、1和2時,其最大的計數(shù)次數(shù)為8192、65536和256所以,其最大定時時間分別是:方式0為8192×4us=32.768ms、方式1為65536×4us=262.144ms、方式2為256×4us=1024us。3.定時/計數(shù)器TO作為計數(shù)器使用時,其計數(shù)頻率不能超過晶振頻率的多少?答:由于定時/計數(shù)器TO作為計數(shù)器使用時,是對外部引腳輸入的脈沖進行計數(shù),CPU在每個機器周期采樣一次引腳,當前一次采樣為高電平,后一次采樣為低電平,則為一次有效計數(shù)脈沖,所以如果晶振頻率為fosc,則其采樣頻率fosc/12,兩次采樣才能決定一次計數(shù)有效,所以計數(shù)頻率不能超過fosc/24。4.簡單說明定時/計數(shù)器在不同工作模式下的特點。答:方式0為13位的定時/計數(shù)器,由THx的8位和TLx的低5位構成、方式1為16位的定時/計數(shù)器,由THx的8位和TLx的8位構成,方式2為8位的定時/計數(shù)器,TLx為加1計數(shù)器,THx為計數(shù)初值寄存器。方式3只能用于T0,是將T0的低8位用作一個獨立的定時/計數(shù)器,而高8位的TH0用作一個獨立的定時器,并借用T1的TR1和TF1作為高8位定時器的啟??刂莆缓鸵绯鰳酥疚?。5.定時器工作在方式2時有何特點?適用于什么應用場合?答:定時器工作在方式2時是一個可自動裝入時間常數(shù)初值的8位定時/計數(shù)器,TLx為加1計數(shù)器,THx為計數(shù)初值寄存器。由于其恢復初值由硬件自動完成,所以當需要反復計數(shù)時,用方式2可以方便地實現(xiàn)精確的定時。6.一個定時器的定時時間有限,如何采用兩個定時器的串行定時來實現(xiàn)較長時間的定時?答:一個定時器的定時時間有限,可采用兩個定時器的串行定時來實現(xiàn)較長時間的定時,比如,當fosc=12MHz時,單個定時/計數(shù)器采用方式1的最大定時時間為65.536ms,此時若用另一個定時/計數(shù)器按方式1進行溢出次數(shù)計數(shù),在定時器溢出中斷時,給計數(shù)器發(fā)一個計數(shù)脈沖,且兩者均為方式一,則兩者串行可達到的定時時間為65536×65.536ms=4294967.296ms。7.設MCS-51單片機的晶振頻率為12MHz,請編程使P1.O端輸出頻率為20kHz的方波。解:fosc=12MHz,所以機器周期為1us。20kHz的方波周期為1/(20×1000)=50us,方波即高電平和低電平和時間相等,所以只需設一個定時器定時25us將P1.O求反一次即可。由于題目沒有規(guī)定,所以可以用查詢方式,也可以用中斷方式進行編程實現(xiàn)。方法一:采用查詢方式實現(xiàn)#include<reg51.h>sbitP1_0=P1^0;//定義輸出引腳變量voidmain(){P1_0=0; //輸出初值為0TMOD=0x02; //T0方式2定時TH0=256-25; //計25次,計數(shù)初值為模256減25TL0=TH0; TR0=1; //啟動T0while(1) //無限循環(huán)if(TF0){ //查詢T0溢出標志 TF0=0; //溢出標志復位 P1_0=!P1_0; //輸出求反 }}方法二:采用中斷方式實現(xiàn)#include<reg51.h>sbitP1_0=P1^0;//定義輸出引腳變量voidmain(){P1_0=0; //輸出初值為0TMOD=0x02; //T0方式2定時TH0=256-25; //計25次,計數(shù)初值為模256減25TL0=TH0;IE=0x82; //允許CPU響應中斷,允許T0發(fā)中斷請求TR0=1; //啟動T0for(;;){} //無限循環(huán)等待中斷}timer0()interrupt1using1{P1_0=!P1_0; //輸出求反}8.采用定時/計數(shù)器TO對外部脈沖進行計數(shù),每計數(shù)10O個脈沖,TO切換為定時工作方式。定時1ms后,又轉為計數(shù)方式,如此循環(huán)不止。假定MCS-5l單片機的晶體振蕩器的頻率為6MHz,要求T0工作在方式1狀態(tài),請編寫出相應程序。解:晶體振蕩器的頻率為6MHz,則機器周期為12×1/(6*106)=2us,要定時1ms,需計數(shù)次數(shù)為1000/2=500次#include<reg51.h>sbitP1_0=P1^0;voidmain(){while(1){TMOD=0x05;//T0計數(shù),方式一TH0=(65536-100)/256;//計數(shù)100次TL0=(65536-100)%256;TR0=1;while(!TF0);//等待計數(shù)100次的溢出TF0=0; //溢出標志復位TMOD=0x01;//T0定時,方式一TH0=(65536-500)/256;//計數(shù)100次TL0=(65536-500)%256;TR0=1; //啟動T0while(!TF0); //等待定時時間到1ms的溢出TF0=0; //溢出標志復位}}9.設單片機的fosc=12MHz,使P1.O和P1.1分別輸出周期為1ms和lOms的方波,請用定時器TO方式2編程實現(xiàn)。解:fosc=12MHz,所以機器周期為1us。要使P1.0輸出周期為1000us的方波,可以通過定時中斷方式實現(xiàn),定時時間為250us,定時計數(shù)2次來實現(xiàn),對P1.0求反即可。要使P1.1輸出周期為10ms的方波,也可以通過定時中斷方式實現(xiàn),定時時間為5ms,當時間到時,對P1.1求反即可。由于5ms/250us=20,所以也可以通過對250us的定時計數(shù)20次來實現(xiàn)。程序如下:#include<reg51.h>sbitP1_0=P1^0;//輸出周期為400us的方波的引腳sbitP1_1=P1^1;//輸出周期為10ms的方波的引腳unsignedcharnum1=0,num2=0;//中斷次數(shù)計數(shù)器,初值為0voidmain(){P1_0=0; //輸出初值為0P1_1=0; //輸出初值為0TMOD=0x02; //T0方式2定時TH0=256-250;//計200次,計數(shù)初值為模256減200TL0=TH0;IE=0x82; //允許CPU響應中斷,允許T0發(fā)中斷請求TR0=1; //啟動T0for(;;){} //無限循環(huán)等待中斷}voidtimer0()interrupt1using1{num1++;num2++; //中斷次數(shù)加1if(num1==2) //中斷次數(shù)達到2次{P1_0=!P1_0;//輸出P1_0求反num1=0;//中斷次數(shù)復位為0}if(num2==20){ //中斷次數(shù)達到20次num2=0; //中斷次數(shù)復位為0 P1_1=!P1_1; //輸出P1_1求反}}10.編寫程序,要求使用TO,采用方式2定時,在P1.0輸出周期為400us占空比為10:1的矩形脈沖。解:設fosc=12MHz,則機器周期為1us。設P1.0初值為0。周期為400us,可定義方式2定時,計數(shù)初值為256-40,一個周期中斷10次為400us,在中斷計數(shù)為1和2(或任意兩次計數(shù)之間)時,對P1.0求反即可。#include<reg51.h>sbitP1_0=P1^0;//輸出周期引腳unsignedcharcnt=0;//中斷次數(shù)計數(shù)器,初值為0voidmain(){P1_0=0; //輸出初值為0TMOD=0x02; //T0方式2定時TH0=256-40; //計40次,計數(shù)初值為模256減40TL0=TH0;IE=0x82; //允許CPU響應中斷,允許T0發(fā)中斷請求TR0=1; //啟動T0for(;;){} //無限循環(huán)等待中斷}voidtimer0()interrupt1using1{cnt++;//中斷次數(shù)加1if(cnt==1||cnt==2)P1_0=!P1_0;//中斷次數(shù)為1或2時對輸出引腳求反if(cnt==10)cnt=0;//中斷次數(shù)達到10時復位為0}第七章7.1.什么事串行異步通信?在串行異步通信中,數(shù)據幀的傳輸格式是什么?含義如何?答:串行異步通信是指在串行通信中發(fā)送端和接收端可以由各自的時鐘來控制數(shù)據的發(fā)送和接收,這兩個時鐘源彼此獨立,互不同步。數(shù)據幀的傳輸格式:起始位,數(shù)據位,奇偶校驗位和停止位含義:起始位用于實現(xiàn)發(fā)送和接收雙方設備之間的同步;數(shù)據位包含所要傳輸?shù)男畔?;奇偶校驗位用于判斷接收?shù)據的正確性;停止位表示一幀數(shù)據發(fā)送結束,開始下一幀數(shù)據的傳輸。7.3.89C51單片機串行通信接口控制寄存器有幾個?每個寄存器的含義是什么?答:有電源控制寄存器PCON和串行口控制寄存器SCONPCON中SMOD與串口通信有關。SMOD=0;串口方式1,2,3時,波特率正常。SMOD=1;串口方式1,2,3時,波特率加倍其余與串行通信無關SCON中SM0、SM1:串行口工作方式控制位SM2:多機通信控制位REN:串行口接收使能控制端;REN=1時,允許接收,REN=0時,禁止接收TB8:發(fā)送接收數(shù)據位8RB8:接收數(shù)據位8TI:發(fā)送中斷標志位;TI=1表示幀發(fā)送結束,TI可由軟件置0RI:接收中斷標志位;RI=1表示幀接收完成,RI可由軟件置07.4.在方式1和方式3的通信模式下,波特率通過那個定時器驅動產生?采用何種定時方式?如果要求采用晶振為11.0592MHz,產生的傳送波特率為2400b/s,應該怎樣對定時器初始化操作?答:由定時器1驅動產生,采用定時器1的工作方式2,自動從裝初值當晶振為11.0592MHz,波特率為2400b/s,由波特率公式:波特率=可求得初值a為F4H初始化操作:TMOD=0x20;TL1=0xF4;TH1=0xF4;PCON=0x00;SCON=0x00;TR1=1;8.3在由單片機80C51和一片ADC0809組成的數(shù)據采集系統(tǒng)中,假設ADC0809的地址為0x7ff8~0x7fff,畫出接口電路圖,并編寫每隔1ms輪流采集一次8個通道數(shù)據的程序。采樣100次取平均值。答:電路圖書上實例有,做了如下改動控制端ADDA,ADDB,ADDC分別接P2^0,P2^!,P2^2.刪去了譯碼器與邏輯器件器件,74LS373,74HC14,74HC02,中斷檢測端EOC接P3^2。參考程序如下,自己寫的沒經過仿真,#include<reg52.h>#include<absacc.h>#defineucharunsignedchar//宏定義#defineuintunsignedint#defineAD_0XBYTE[0xff8]//定義通道訪問地址#defineAD_1XBYTE[0xff9]#defineAD_2XBYTE[0xffa]#defineAD_3XBYTE[0xffb]#defineAD_4XBYTE[0xffc]#defineAD_5XBYTE[0xffd]#defineAD_6XBYTE[0xffe]#defineAD_7XBYTE[0xfff]sbitbusy=P3^2;//定義中斷請求端ucharcount=0;//定義采樣次數(shù)uchardatcode[100]={0};//定義數(shù)據存放數(shù)組intdat=0,dat1=0;//定義臨時數(shù)據與最終平均數(shù)據uchari,j,num;//定義變量voidmain(){TMOD=0x01;//定時器0工作方式1TL0=(65536-1000)/256;//1ms中斷一次TH0=(65536-1000)%256;EA=1;//開總中斷,定時器中斷,打開定時器0ET0=1;TR0=1;while(count<100)//100次數(shù)據求和函數(shù){ dat1=dat1+datcode[i]; count++; }dat=dat1/100;if(count>=100)count=0;}voidtimer0()interrupt1//中斷函數(shù){TMOD=0x01;TL0=(65536-1000)/256;TH0=(65536-1000)%256;AD_0=0;//啟動0通道AD轉換while(busy==1){num=AD_0+1;//把0通道數(shù)據附給num,并指向AD_1通道查詢datcode[i+1]=num;j++;if(j==7)//八次查詢完畢退出循環(huán){busy=0;j=0; }}}第一章習題參考答案1-1:何謂單片機?與通用微機相比,兩者在結構上有何異同?答:將構成計算機的基本單元電路如微處理器(CPU)、存儲器、I/O接口電路和相應實時控制器件等電路集成在一塊芯片上,稱其為單片微型計算機,簡稱單片機。單片機與通用微機相比在結構上的異同:(1)兩者都有CPU,但通用微機的CPU主要面向數(shù)據處理,其發(fā)展主要圍繞數(shù)據處理功能、計算速度和精度的進一步提高。例如,現(xiàn)今微機的CPU都支持浮點運算,采用流水線作業(yè),并行處理、多級高速緩沖(Cache)技術等。CPU的主頻達到數(shù)百兆赫茲(MHz),字長普遍達到32位。單片機主要面向控制,控制中的數(shù)據類型及數(shù)據處理相對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論