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

下載本文檔

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

文檔簡(jiǎn)介

第一章習(xí)題

1.什么是單片機(jī)?單片機(jī)和通用微機(jī)相比有何特點(diǎn)?

答:?jiǎn)纹瑱C(jī)又稱為單片微計(jì)算機(jī),它的結(jié)構(gòu)特點(diǎn)是將微型計(jì)算機(jī)的基本功能部件(如中央處理器(CPU)、存儲(chǔ)器、輸入接口、輸出接口、定時(shí)/計(jì)數(shù)器及終端系統(tǒng)等)全部集成在一個(gè)半導(dǎo)體芯片上。

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

2.單片機(jī)的發(fā)展有哪幾個(gè)階段?8位單片機(jī)會(huì)不會(huì)過時(shí),為什么?

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

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

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

3.舉例說明單片機(jī)的主要應(yīng)用領(lǐng)域。

答:?jiǎn)纹瑱C(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域,大致可分如下幾個(gè)范疇:智能儀器

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

工業(yè)控制

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

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

網(wǎng)絡(luò)和通信

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

醫(yī)用設(shè)備領(lǐng)域

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

模塊化系統(tǒng)

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

汽車電子

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

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

4.將十進(jìn)制數(shù)37轉(zhuǎn)換為二進(jìn)制,BCD碼和十六進(jìn)制數(shù),并對(duì)轉(zhuǎn)換結(jié)果進(jìn)行對(duì)比分析。

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

碼為

0011

0111;

可見,同一個(gè)數(shù)用不同進(jìn)制表示,其結(jié)果也不同。

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

(1)+36

原碼

0010

0100B

反碼

0010

0100B

補(bǔ)碼

0010

0100B

(2)-36

原碼

1010

0100B

反碼

1101

1011B

補(bǔ)碼

1101

1100B

(3)+127

原碼

0111

1111B

反碼

0111

1111B補(bǔ)碼

0111

1111B

(4)-128

原碼

1000

0000B

反碼

0111

1111B

補(bǔ)碼

1000

0000B

(5)-121

原碼

1111

1001B

反碼

1000

0110B

補(bǔ)碼

1000

0111B

6.對(duì)于二進(jìn)制數(shù)1000

1001B,若理解為無符號(hào)數(shù),則該數(shù)對(duì)應(yīng)十進(jìn)制數(shù)為多少?若理解為有符號(hào)數(shù),則該數(shù)對(duì)應(yīng)十進(jìn)制為多少?若理解為BCD數(shù),則該數(shù)對(duì)應(yīng)十進(jìn)制數(shù)為多少?

答:1000

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

BCD數(shù):89;

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

(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的工作界面中包含哪幾個(gè)窗口?菜單欄中包含哪幾個(gè)選項(xiàng)?

答:Proteus

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

主菜單欄包含文件、查看、編輯、工具、設(shè)計(jì)、圖形、源文件、調(diào)試、庫(kù)、模板、系統(tǒng)、幫助選項(xiàng)。

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

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

(3)輸入單片機(jī)程序;

(4)進(jìn)行源代碼調(diào)試;

(5)仿真運(yùn)行。

10.何謂PCB?利用ARES模塊進(jìn)行PCB設(shè)計(jì)需要經(jīng)過哪幾個(gè)主要步驟?

答:PCB(Printed

Circuit

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

利用ARES模塊進(jìn)行PCB設(shè)計(jì)的主要步驟:

(1)啟動(dòng)ARES;

(2)元器件布局;

(3)元器件布線;

(4)鋪銅;

(5)三維效果圖;

(6)CADCAM輸出。第2章MCS-51單片機(jī)結(jié)構(gòu)及原理習(xí)題MSC-51單片機(jī)內(nèi)部由哪些功能部件組成,各有什么功能?答:以51單片機(jī)為例,其內(nèi)部功能部件有:控制器:是對(duì)取自程序存儲(chǔ)器中的指令進(jìn)行譯碼,在規(guī)定的時(shí)刻發(fā)出各種操作所需的控制信號(hào),完成指令所規(guī)定的功能;運(yùn)算器:根據(jù)控制器發(fā)來的信號(hào),執(zhí)行算術(shù)邏輯運(yùn)算操作;存儲(chǔ)器:包括程序存儲(chǔ)和數(shù)據(jù)存儲(chǔ)器;定時(shí)器計(jì)數(shù)器:2個(gè)16位定時(shí)器/計(jì)數(shù)器,可對(duì)機(jī)器周期計(jì)數(shù),也可對(duì)外部輸入脈沖計(jì)數(shù);中斷系統(tǒng):可響應(yīng)三個(gè)內(nèi)部中斷源和兩個(gè)外部中斷源的中斷請(qǐng)求;輸入輸出接口:4個(gè)8位并行口和一個(gè)全雙工串行口;2.MSC-51單片機(jī)外部引腳的名稱是什么?各有什么功能?答:(1)電源及晶振引腳VCC(40腳):+5V電源引腳VSS(20腳):接地引腳XTAL1(19腳);外接晶振引腳(內(nèi)置放大器輸入端)XTAL2(18腳):外接晶振引腳(內(nèi)置放大器輸出端)(2)控制引腳RST/VPD(9)為復(fù)位/備用電源引腳ALE/PROG(30)為地址鎖存使能輸出/編程脈沖輸入PSEN(29):輸出訪問片外程序存儲(chǔ)器讀選通信號(hào)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系列單片機(jī)的封裝有哪些類型?請(qǐng)說明每一種封裝引腳之間的距離。答:51系列單片機(jī)的封裝有:40引腳雙列直插封裝(DIP——dualin-linepackage),引腳之間的距離是100mil();44引腳方形扁平封裝(QFP——quadflatpackage)方式,引腳之間的距離是;44引腳帶引線的塑料芯片載體PLCC(PlasticLeadedChipCarrier)。4.什么是復(fù)位?單片機(jī)復(fù)位電路有哪幾種,工作原理分別是什么?答:復(fù)位——使單片機(jī)恢復(fù)原始默認(rèn)狀態(tài)的操作。單片機(jī)復(fù)位電路有:上電復(fù)位電路,由電阻和電容構(gòu)成,通過上電時(shí),電容相當(dāng)于短路而使復(fù)位引腳在晶振有效的情況下保持2個(gè)機(jī)器周期的高電平;按鈕開關(guān)復(fù)位電路,由兩個(gè)電阻的分壓構(gòu)成,通過手工按下按鈕,使復(fù)位引腳在晶振有效的情況下保持2個(gè)機(jī)器周期的高電平。5.通常的微機(jī)系統(tǒng)存儲(chǔ)器結(jié)構(gòu)有哪幾種?MCS-51單片機(jī)存儲(chǔ)器屬于哪一類?CS-51可尋址多大空間?答:通常的微機(jī)系統(tǒng)存儲(chǔ)器結(jié)構(gòu)有兩種結(jié)構(gòu),即哈佛結(jié)構(gòu)和馮諾依曼結(jié)構(gòu)(也叫普林斯頓結(jié)構(gòu)),MCS-51單片機(jī)存儲(chǔ)器屬于,MCS-51可尋址空間是兩個(gè)64KB,即64KB的程序存儲(chǔ)空間和64KB的數(shù)據(jù)存儲(chǔ)空間。6.片內(nèi)RAM中低128個(gè)單元?jiǎng)澐譃槟娜齻€(gè)主要部分?各部分的主要功能是什么?答:片內(nèi)RAM中低128個(gè)單元?jiǎng)澐譃槿齻€(gè)部分:①工作寄存器區(qū)(00H-1FH),四組,每組8個(gè),可作用工作寄存器切換使用;②可位尋址區(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:進(jìn)/借位標(biāo)志CY,加法有進(jìn)位時(shí)置1,減法有借位時(shí)置1;PSW.6:輔助進(jìn)位標(biāo)志AC,加法運(yùn)算低四位向高上四位有進(jìn)位時(shí)置1;PSW.5、PSW.1:用戶標(biāo)志位F0和用戶標(biāo)志位F1,保存用戶的位數(shù)據(jù);PSW.4、PSW.3:工作寄存器選擇控制位RS1和RS0,00至11分別選擇四組工作之一作為當(dāng)前工作寄存器PSW.2:溢出標(biāo)志位OV,有符號(hào)數(shù)加、減運(yùn)算結(jié)果有溢出或乘除上結(jié)果異常(乘法運(yùn)算結(jié)果大于255即乘積在BA中,或除法運(yùn)算除數(shù)為0)時(shí)置1PSW.0:奇偶標(biāo)志位P,累加器A中1的個(gè)數(shù)為奇數(shù)時(shí)置1。8.什么是時(shí)鐘周期?什么是機(jī)器周期?什么是指令周期?當(dāng)振蕩頻率為12MHz時(shí),一個(gè)機(jī)器周期為多少微秒?答:時(shí)鐘周期又叫振蕩周期或拍,用P表示,是MCS-51單片機(jī)中最小的時(shí)間單位,在一個(gè)時(shí)鐘周期內(nèi),CPU完成一個(gè)最基本的動(dòng)作。機(jī)器周期:由12個(gè)時(shí)鐘周期構(gòu)成,完成一個(gè)基本操作指令周期:是執(zhí)行一條指令所需的時(shí)間,根據(jù)指令的復(fù)雜性,可由1~4個(gè)機(jī)器周期構(gòu)成。當(dāng)振蕩頻率為12MHz時(shí),一個(gè)機(jī)器周期為1微秒。9.P0、P1、P2和P3口的結(jié)構(gòu)和功能分別是什么?答:P0口的每一位由1個(gè)鎖存器、2個(gè)三態(tài)緩沖器、1個(gè)輸出控制電路(非門X、與門、電子開關(guān)MUX、輸出驅(qū)動(dòng)電路構(gòu)成,其功能既可以作為通用I/O口實(shí)現(xiàn)輸入/輸出功能,也可作為單片機(jī)地址線的低8位和數(shù)據(jù)線實(shí)現(xiàn)外部擴(kuò)展功能。在用作輸入輸出口時(shí),需外接上拉電阻。P1口的每一位由1個(gè)鎖存器、1個(gè)場(chǎng)效應(yīng)管驅(qū)動(dòng)器V和2個(gè)三態(tài)門緩沖器構(gòu)成,其作用是用作輸入輸出口P2口的每一位由1個(gè)鎖存器、2個(gè)三態(tài)緩沖器、1個(gè)輸出控制單元、1個(gè)輸出驅(qū)動(dòng)單元構(gòu)成,其功能是用作輸入輸出口,或地址總線的高8位。P3口的每一位由1個(gè)鎖存器、2個(gè)三態(tài)緩沖器、1個(gè)第二功能控制單元、1個(gè)輸出驅(qū)動(dòng)單元構(gòu)成,其作用是用作輸入輸出口或第二功能。10.51單片機(jī)引腳ALE的作用是什么?當(dāng)51不外接存儲(chǔ)器時(shí),ALE上的輸出的脈沖頻率是多少?答:51單片機(jī)引腳ALE的作用是對(duì)外部存儲(chǔ)尋址時(shí)鎖存P0口輸出的低8位地址,當(dāng)51不外接存儲(chǔ)器時(shí),ALE上的輸出的脈沖頻率是fosc/6。第3章單片機(jī)的匯編語言與程序設(shè)計(jì)習(xí)題1.MCS-51單片機(jī)有哪幾種尋址方式?適用于什么地址空間?答:MCS-51單片機(jī)有7種尋址方式:直接尋址、寄存器尋址、寄存器間接尋址、立即尋址、變址尋址、位尋址、相對(duì)尋址。直接尋址方式:操作數(shù)的地址由指令直接給出,適用于片內(nèi)RAM的所有地址空間;如 MOV A,68H MOV A,PSW寄存器尋址方式:指令給出的是寄存器的編碼,操作數(shù)在編碼指定的寄存器中,適用于片內(nèi)00H至1FH的32個(gè)字節(jié),用R0,…,R7表示,通過PSW的RS1和RS0選擇組號(hào)確定對(duì)應(yīng)32個(gè)字節(jié)中的其中8個(gè),還有累加器A,以及乘除法指令中的A和B寄存器,位尋址方式中的布爾累加器C; MOV A,R1 MUL AB INC DPTR寄存器間接尋址方式:指令給出的是寄存器的編碼,操作數(shù)地址在編碼指定的寄存器中,適用于片內(nèi)RAM的全部空間,其中52系列中的80H至FFH只能用寄存器間接尋址;如 MOV A,@R0 MOV A,@R1 MOVX A,@DPTR立即尋址方式:操作數(shù)本身在指令中直接,給出適用于用8位立即數(shù)對(duì)片內(nèi)RAM所有地址單元賦值,也可用16位立即數(shù)對(duì)DPTR賦值;如 MOV A,#0E2H MOV DPTR,#2000H變址尋址方式:以DPTR或PC作為基地址寄存器,以累加器A作為變址寄存器,將基址寄存器與變址寄存器的內(nèi)容相加形成操作數(shù)的實(shí)際地址的一種尋址方式,變址尋址方式適用于程序存儲(chǔ)器ROM,僅有三條指令如下:MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR位尋址方式:指令中直接給出操作數(shù)所在單元的位地址,適用于片內(nèi)RAM中地址20H至2FH中的16個(gè)字節(jié)中的128個(gè)位地址空間和80H至FFH中地址中可以被8整除的所有SFR中的每個(gè)位地址空間;如 MOV C,7FH MOV F0,C MOV C,ACC.7相對(duì)尋址方式:為相對(duì)轉(zhuǎn)移指令而設(shè),指令中直接給出轉(zhuǎn)移的相對(duì)偏移量,其轉(zhuǎn)移目標(biāo)在當(dāng)前指令-128至+127字節(jié)范圍內(nèi)的地址空間。如 SJMP START HERE: SJMP HERE ;等效于: SJMP $2.MCS-51單片機(jī)的PSW程序狀態(tài)字中無ZERO(零)標(biāo)志位,怎樣判斷某內(nèi)部數(shù)據(jù)單元的內(nèi)容是否為零?答:MCS-51單片機(jī)的PSW程序狀態(tài)字中無ZERO(零)標(biāo)志位,判斷某內(nèi)部數(shù)據(jù)單元的內(nèi)容是否為零是能通過取數(shù)到A累加器,再判斷A中的每一位是否為零來確定其值是否為零。3.編程將內(nèi)部RAM的20H--30H單元內(nèi)容清零。解:設(shè)一個(gè)片內(nèi)RAM指針R0,先指向首地址20H,通過累加器A清零,然后采用間接尋址方式依次將A中的零值傳送到指針?biāo)傅钠瑑?nèi)RAM單元,每傳送一個(gè)字節(jié),地址指針加1,直到達(dá)到地址為30H或達(dá)到計(jì)數(shù)器規(guī)定的17個(gè)字節(jié)為止。程序1: MOV R0,#20H ;設(shè)地址指針初值 CLR A ;累加器清0CONT: MOV @R0,A ;置0指針?biāo)竼卧? INC R0 ;地址指針加1 CJNE R0,#31H,CONT ;指針未超過終點(diǎn)則繼續(xù) SJMP $ ;暫停程序2: MOV R0,#20H ;設(shè)地址指針初值 CLR A ;累加器清0 MOV R7,#17 ;計(jì)數(shù)器賦初值,從20H到30H共17個(gè)字節(jié)CONT: MOV @R0,A ;置0指針?biāo)竼卧? INC R0 ;地址指針加1 DJNZ R7,CONT ;計(jì)數(shù)器減1,非0,則繼續(xù) SJMP $ ;暫停4.編程查找內(nèi)部RAM的32H~41H單元中是否有0AAH這個(gè)數(shù)據(jù),若有這一數(shù)據(jù),則將50H單元置為0FFH,否則將50H單元清零。解:設(shè)一個(gè)片內(nèi)RAM指針R0,先指向首地址32H,比較@R0與#0AAH,若相等,則退出循環(huán),給50H單元賦0FFH,若不相等,則R0加1為繼續(xù)比較下一個(gè)字節(jié)做準(zhǔn)備,直到達(dá)到地址為41H或達(dá)到計(jì)數(shù)器規(guī)定的16個(gè)字節(jié)為止還沒找到,則給50H單元賦00H程序1: MOV R0,#32H ;設(shè)地址指針初值CONT: CJNE @R0,#0AAH,NEXT;比較查找值與指針?biāo)竼卧闹?,不相等轉(zhuǎn)移 MOV A,#0FFH ;相等,則準(zhǔn)備好要賦的標(biāo)志值0FFH SJMP DOWN ;轉(zhuǎn)存到保存結(jié)果處NEXT: INC R0 ;修改地址指針 CJNE R0,#42H,CONT ;若指針未越過終點(diǎn),則繼續(xù) MOV A,#00H ;查找失敗,則將00H存入結(jié)果標(biāo)志單元DOWN: MOV 50H,A ;將比較結(jié)果標(biāo)志存入50H單元 SJMP $ ;暫停 END程序2: MOV R7,#16 ;計(jì)數(shù)器賦初值,從20H到30H共16個(gè)字節(jié) MOV R0,#32H ;設(shè)地址指針初值CONT: CJNE @R0,#0AAH,NEXT ;比較查找值與指針?biāo)竼卧闹?,不相等轉(zhuǎn)移 MOV A,#0FFH ;相等,則準(zhǔn)備好要賦的標(biāo)志值0FFH SJMP DOWN ;轉(zhuǎn)存到保存結(jié)果處NEXT: INC R0 ;修改地址指針 DJNZ R7,CONT ;計(jì)數(shù)器減1,非0,則繼續(xù) MOV A,#00H ;查找失敗,則將00H存入結(jié)果標(biāo)志單元DOWN: MOV 50H,A ;將比較結(jié)果標(biāo)志存入50H單元 SJMP $ ;暫停 END5.查找20H~4FH單元中出現(xiàn)00H的次數(shù),并將查找結(jié)果存入50H單元。解:從20H到4FH共48個(gè)字節(jié) MOV R7,#48 ;字節(jié)計(jì)數(shù)器賦初值MOV R0,#20H ;設(shè)地址指針初值CONT: CJNE @R0,#00H,NEXT ;比較查找值與指針?biāo)竼卧闹?,不相等轉(zhuǎn)移 INC R6 ;相等,0的個(gè)數(shù)計(jì)數(shù)器加1NEXT: INC R0 ;修改地址指針 DJNZ R7,CONT ;計(jì)數(shù)器減1,非0,則繼續(xù) MOV 50H,R6 ;保存O的個(gè)數(shù)計(jì)數(shù)值到50H單元 SJMP $ ;暫停 END END6.已知A=83H,R0=17H,(17H)=34H,寫出下列程序段執(zhí)行之后的A中的內(nèi)容。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.已知單片機(jī)的晶振頻率為12MHz,分別設(shè)計(jì)延時(shí)為0.1s、1s的子程序。答:已知單片機(jī)的晶振頻率為12MHz,則機(jī)器周期為1us,延時(shí)子程序是通過執(zhí)行指令序列中機(jī)器周期數(shù)來達(dá)到,如果要0.1s,即100ms,也就是100000us,所以需要機(jī)器周期數(shù)達(dá)到100000。要延時(shí)達(dá)到1S,可通過對(duì)延時(shí)為0.1秒的子程序調(diào)用10次來實(shí)現(xiàn)。DELAY100MS: MOVR6,#200 ;1個(gè)機(jī)器周期D1: MOVR7,#250 ;1個(gè)機(jī)器周期D2: NOP ;1個(gè)機(jī)器周期 DJNZR7,D2 ;2個(gè)機(jī)器周期,3*251=753 DJNZR6,D1 ;2個(gè)機(jī)器周期,(1+753+2)*132=99792 RET ;2個(gè)機(jī)器周期,1+99792+2=99795,約100msDELAY1S: MOV R7,#10 ;計(jì)數(shù)10次 1LOOP: ACALL DELAY100MS ;延時(shí)100ms子程序 99795+2 DJNZ R7,LOOP ;未達(dá)到10次則繼續(xù) 10*(2+99795+2) RET ;返回2+10*(2+99795+2)=9979928.內(nèi)部RAM從20H單元開始處有一數(shù)據(jù)塊,以O(shè)DH為結(jié)束標(biāo)志,試統(tǒng)計(jì)該數(shù)據(jù)塊的長(zhǎng)度,將該數(shù)據(jù)塊送到外部數(shù)據(jù)存儲(chǔ)器7E01H開始的單元,并將長(zhǎng)度存入7E00H單元。解:從20H的指針用R0,從外部RAM7E01開始的指針用DPTR,計(jì)數(shù)器用R7 MOV R7,#0 ;字節(jié)計(jì)數(shù)器賦初值 MOV R0,#20H ;設(shè)片內(nèi)RAM地址指針初值 MOV DPTR,#7E01H ;設(shè)片外RAM地址指針初值CONT: MOV A,@R0 ;取片內(nèi)RAM中的一個(gè)字節(jié) MOVX @DPTR,A ;存入片外RAM指針?biāo)竼卧? INC R7 ;長(zhǎng)度計(jì)數(shù)器加1 INC R0 ;片內(nèi)RAM地址指針加1 INC DPTR ;片外RAM地址指針加1 CJNE A,#0DH,CONT ;未達(dá)到結(jié)束標(biāo)志 MOV A,R7 ;取塊計(jì)數(shù)長(zhǎng)度值 MOVX @DPTR,A ;保存 SJMP $ ;暫停 END9.內(nèi)部RAM從DATA開始的區(qū)域中存放著10個(gè)單字節(jié)十進(jìn)制數(shù),求其累加和,并將結(jié)果存入SUM和SUM+1單元。解:R7計(jì)數(shù),R6保存累加和高8位,R0用作地址指針 ORG 0000H LJMP MAIN ORG 100HSUM EQU 30HDATAA EQU 40HMAIN: MOV R7,#10 ;字節(jié)計(jì)數(shù)器賦初值 MOV R0,#DATAA ;設(shè)片內(nèi)RAM地址指針初值 CLR A ;累加器清0 MOV R6,A ;累加結(jié)果的高8位CONT: ADD A,@R0 ;加RAM中的一個(gè)字節(jié)到ACC DA A JNC NEXT ;若無進(jìn)位則不用管高8位 INC R6 ;有進(jìn)位,高8位加1NEXT: INC R0 ;片內(nèi)RAM地址指針加1 DJNZ R7,CONT ;未完繼續(xù) MOV SUM,A ;保存低8位 MOV SUM+1,R6 ;保存高8位 SJMP $ ;暫停 END10.內(nèi)部RAM從DATA1和DATA2單元開始處存放著兩個(gè)等長(zhǎng)的數(shù)據(jù)塊,數(shù)據(jù)塊的長(zhǎng)度在LEN單元中。請(qǐng)編程檢查這兩個(gè)數(shù)據(jù)塊是否相等,若相等,將0FFH寫入RESULT單元,否則將0寫入RESULT單元。解:從DATA1開始的指針用R0,從DATA2開始的指針用R1,計(jì)數(shù)器用R7LEN EQU 10DATA1 EQU 30HDATA2 EQU 40HRESULT EQU 50H MOV R7,#LEN ;字節(jié)計(jì)數(shù)器賦初值 MOV R0,#DATA1 ;設(shè)片內(nèi)RAM地址指針初值 MOV R1,#DATA2 ;設(shè)片外RAM地址指針初值CONT: MOV A,@R0 ;取片內(nèi)RAMR0所指的的一個(gè)字節(jié) MOV 7FH,@R1 ;將R1所指單元內(nèi)容取到片內(nèi)RAM地址7FH中 CJNE A,7FH,NOEQ ;比較,不相等則結(jié)束 INC R0 ;DATA1RAM地址指針加1 INC R1 ;DATA2RAM地址指針加1 DJNZ R7,CONT ;未完,繼續(xù) MOV A,#0FFH ;相等,準(zhǔn)備寫入FFH SJMP DOWN ;轉(zhuǎn)寫入結(jié)果處NOEQ: MOV A,#0 ;不相等,準(zhǔn)備寫入00HDOWN: MOV RESULT,A ;保存比較結(jié)果標(biāo)志 SJMP $ ;暫停 END11.編制程序,將內(nèi)部RAM中M1、M2、M3和M4單元中的無符號(hào)數(shù)xl、x2、x3和x4相加,并把和存入RO和R1(R0中為高8位)中。解:M1 EQU 30HM2 EQU 40HM3 EQU 45HM4 EQU 4FH MOV A,M1 ;取第一個(gè)數(shù) ADD A,M2 ;與第二個(gè)數(shù)相加 JNC NEXT1 ;如果無進(jìn)位,則轉(zhuǎn)移至第三個(gè)相加 MOV R0,#1 ;有進(jìn)位,高8位置1NEXT1: ADD A,M3 ;與第三個(gè)數(shù)相加 JNC NEXT2 ;沒有進(jìn)位,則轉(zhuǎn)至第四個(gè)數(shù)相加 INC R0 ;有進(jìn)位,高8位加1NEXT2: ADD A,M4 ;與第四個(gè)數(shù)相加 JNC NEXT3 ;沒有進(jìn)位,則轉(zhuǎn)至結(jié)束 INC R0 ;有進(jìn)位,高8位再加1NEXT3: MOV R1,A ;低8位保存到R1 SJMP $ ;暫停 END第4章單片機(jī)的C51語言習(xí)題1.C語言的優(yōu)點(diǎn)是什么?C程序的主要結(jié)構(gòu)特點(diǎn)是什么?答:C語言是一種高級(jí)語言,學(xué)習(xí)比低級(jí)容易,不需要具體組織、分配存儲(chǔ)器資源和處理端口數(shù)據(jù),可以直接驅(qū)動(dòng)單片機(jī)的所有資源。C程序以函數(shù)為單位,由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成,主函數(shù)是程序的入口,其他函數(shù)由主函數(shù)直接或間接調(diào)用。程序可以由一個(gè)文件或多個(gè)文件組成。文件類型包括頭文件和C語言源文件,也可以是匯編語言文件,C程序可與匯編語言混合編程。2.C51語言的變量定義包含哪些關(guān)鍵因素?為何這樣考慮?答:C語言的變量定義格式如下:[存儲(chǔ)種類]數(shù)據(jù)類型[存儲(chǔ)類型]變量名其中:存儲(chǔ)種類與標(biāo)準(zhǔn)C語言相同,包括:自動(dòng)型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register)。數(shù)據(jù)類型除了包含標(biāo)準(zhǔn)C語言類型的字符型(char),整型(int),長(zhǎng)整型(long),浮點(diǎn)型(float),雙精度型(double)外,還有二進(jìn)制位型(bit),特殊功能寄存器型(sfr),SFR可位尋址的位類型(sbit)。存儲(chǔ)類型包括:片內(nèi)RAM區(qū)(data)、片內(nèi)可位尋址區(qū)(bdata),片內(nèi)RAM間接尋址區(qū)(idata),片外RAM頁(yè)尋址區(qū)(pdata),片外RAM區(qū)(xdata)、ROM區(qū)(code)。只所以比標(biāo)準(zhǔn)C語言多了存儲(chǔ)類型,就是因?yàn)镸CS-51單片機(jī)的存儲(chǔ)結(jié)構(gòu)中有四個(gè)物理存儲(chǔ)空間(片內(nèi)RAM、片內(nèi)ROM,片外RAM,片外ROM),三個(gè)邏輯地址空間(片內(nèi)RAM,片外RAM,ROM),而且有多種尋址方式(直接尋址、間接尋址、頁(yè)面尋址、位尋址)所致,所以在定義變量時(shí),要根據(jù)其所在位置和尋址方式明確指定存儲(chǔ)類型。3.C51與匯編語言的特點(diǎn)各有哪些?怎樣實(shí)現(xiàn)兩者的優(yōu)勢(shì)互補(bǔ)?答:C51是結(jié)構(gòu)化語言,代碼緊湊;接近自然語言,程序可讀性強(qiáng),易于調(diào)試、維護(hù);庫(kù)函數(shù)豐富,編程工作量小,可使產(chǎn)品開發(fā)周期短;具有機(jī)器級(jí)控制能力,功能很強(qiáng),適合于嵌入式系統(tǒng)開發(fā);匯編指令無關(guān),易于掌握,上手快。 匯編語言優(yōu)點(diǎn)是編寫的程序代碼精煉、執(zhí)行速度快,在相同功能下,匯編語言程序可能比C語言程序效率高。缺點(diǎn)是對(duì)程序員要求高,必須對(duì)單片機(jī)的硬件結(jié)構(gòu)非常熟悉才能編程,不便于編寫比較復(fù)雜的程序。可根據(jù)需要對(duì)要求時(shí)間性很強(qiáng)的代碼用匯編語言編寫,其它部分用C語言編寫,兩者混合編程就可以實(shí)現(xiàn)優(yōu)勢(shì)互補(bǔ)。4.指出下面程序的語法錯(cuò)誤:#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 //缺分號(hào),應(yīng)該提在使用前說明delay(10) //延時(shí)子程序必須先定義,或先有函數(shù)原型說明voiddelay();{ //作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,//即不能在一個(gè)函數(shù)內(nèi)定義另一個(gè)函數(shù),而且“{”前不應(yīng)有分號(hào)//作為函數(shù)原型說明,應(yīng)該放在函數(shù)調(diào)用之前,且其后不應(yīng)該接函數(shù)體cgari; //字符型應(yīng)該是unsignedcharfor(i=O;i<=255;”++”);//”++”應(yīng)改成i++}//主函數(shù)沒有結(jié)束,缺”}”5.定義變量a,b,c,其中a為內(nèi)部RAM的可位尋址區(qū)的字符變量,b為外部數(shù)據(jù)存儲(chǔ)區(qū)浮點(diǎn)型變量,c為指向int型xdata區(qū)的指針。答: charbdataa; floatxdatab; intxdata*c;6.編程將8051的內(nèi)部數(shù)據(jù)存儲(chǔ)器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲(chǔ)器中(任意位置)。解:方法一:用嵌入式匯編語言實(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}方法二:?jiǎn)斡肅語言編程實(shí)現(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的片內(nèi)數(shù)據(jù)存儲(chǔ)器25H單元中存放有一個(gè)0~10的整數(shù),編程求其平方根(精確到5位有效數(shù)字),將平方根放到30H單元為首址的內(nèi)存中。解:方法一:用C語言與匯編語言混合編程實(shí)現(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ù)據(jù)子函數(shù),只有一個(gè)地址參數(shù)在R7中,返回值為指定地址單元中的內(nèi)容,用R7返回主函數(shù)。PUBLIC_GETDATADE SEGMENTCODERSEG DE_GETDATA: MOV A,R7 ;取地址參數(shù) MOV R0,A MOV A,@R0 MOV R7,A ;返回地址單元中的內(nèi)容EXIT: RET END方法二:?jiǎn)斡肅語言編程實(shí)現(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單元的內(nèi)容傳送到內(nèi)部RAM10H~15H單元。解:方法一:采用C語言與匯編語言混合編程//用C語言編寫的主函數(shù)MAIN.C#include<reg51.h>charmovdata(char,char);voidmain(){ chara=0x10,b=0x06;movdata(a,b);};用匯編語言編寫的移動(dòng)數(shù)據(jù)子函數(shù)MOVDATA,其中第一個(gè)參數(shù)在R7中為首地址,第二個(gè)參數(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方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)//MAIN.C#include<reg51.h>intmovdata(char);voidmain(){charn=6;char*ptr1=0x10;charxdata*ptr2;ptr2=0x20;while(n--){*ptr2++=*ptr1++;}}9.內(nèi)部RAM20H、21H和22H、23H單元分別存放著兩個(gè)無符號(hào)的16位數(shù),將其中的大數(shù)置于24H和25H單元。解:方法一:#include<reg51.h>voidmain(){ unsignedint*ptr; //設(shè)置一個(gè)內(nèi)部RAM指針unsignedintx,y,z; ptr=0x20; //指向0x20單元x=*ptr; //取第一個(gè)數(shù)ptr=0x22; //指向0x22單元y=*ptr; //取第二個(gè)數(shù)z=(x>y)?x:y; //將兩數(shù)中的較大者賦給zptr=0x24; //指向地址為0x24的目標(biāo)單元*ptr=z; //將大數(shù)存入目標(biāo)單元}方法二:#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章單片機(jī)的C51語言習(xí)題1.C語言的優(yōu)點(diǎn)是什么?C程序的主要結(jié)構(gòu)特點(diǎn)是什么?答:C語言是一種高級(jí)語言,學(xué)習(xí)比低級(jí)容易,不需要具體組織、分配存儲(chǔ)器資源和處理端口數(shù)據(jù),可以直接驅(qū)動(dòng)單片機(jī)的所有資源。C程序以函數(shù)為單位,由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成,主函數(shù)是程序的入口,其他函數(shù)由主函數(shù)直接或間接調(diào)用。程序可以由一個(gè)文件或多個(gè)文件組成。文件類型包括頭文件和C語言源文件,也可以是匯編語言文件,C程序可與匯編語言混合編程。2.C51語言的變量定義包含哪些關(guān)鍵因素?為何這樣考慮?答:C語言的變量定義格式如下:[存儲(chǔ)種類]數(shù)據(jù)類型[存儲(chǔ)類型]變量名其中:存儲(chǔ)種類與標(biāo)準(zhǔn)C語言相同,包括:自動(dòng)型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register)。數(shù)據(jù)類型除了包含標(biāo)準(zhǔn)C語言類型的字符型(char),整型(int),長(zhǎng)整型(long),浮點(diǎn)型(float),雙精度型(double)外,還有二進(jìn)制位型(bit),特殊功能寄存器型(sfr),SFR可位尋址的位類型(sbit)。存儲(chǔ)類型包括:片內(nèi)RAM區(qū)(data)、片內(nèi)可位尋址區(qū)(bdata),片內(nèi)RAM間接尋址區(qū)(idata),片外RAM頁(yè)尋址區(qū)(pdata),片外RAM區(qū)(xdata)、ROM區(qū)(code)。只所以比標(biāo)準(zhǔn)C語言多了存儲(chǔ)類型,就是因?yàn)镸CS-51單片機(jī)的存儲(chǔ)結(jié)構(gòu)中有四個(gè)物理存儲(chǔ)空間(片內(nèi)RAM、片內(nèi)ROM,片外RAM,片外ROM),三個(gè)邏輯地址空間(片內(nèi)RAM,片外RAM,ROM),而且有多種尋址方式(直接尋址、間接尋址、頁(yè)面尋址、位尋址)所致,所以在定義變量時(shí),要根據(jù)其所在位置和尋址方式明確指定存儲(chǔ)類型。3.C51與匯編語言的特點(diǎn)各有哪些?怎樣實(shí)現(xiàn)兩者的優(yōu)勢(shì)互補(bǔ)?答:C51是結(jié)構(gòu)化語言,代碼緊湊;接近自然語言,程序可讀性強(qiáng),易于調(diào)試、維護(hù);庫(kù)函數(shù)豐富,編程工作量小,可使產(chǎn)品開發(fā)周期短;具有機(jī)器級(jí)控制能力,功能很強(qiáng),適合于嵌入式系統(tǒng)開發(fā);匯編指令無關(guān),易于掌握,上手快。 匯編語言優(yōu)點(diǎn)是編寫的程序代碼精煉、執(zhí)行速度快,在相同功能下,匯編語言程序可能比C語言程序效率高。缺點(diǎn)是對(duì)程序員要求高,必須對(duì)單片機(jī)的硬件結(jié)構(gòu)非常熟悉才能編程,不便于編寫比較復(fù)雜的程序。可根據(jù)需要對(duì)要求時(shí)間性很強(qiáng)的代碼用匯編語言編寫,其它部分用C語言編寫,兩者混合編程就可以實(shí)現(xiàn)優(yōu)勢(shì)互補(bǔ)。4.指出下面程序的語法錯(cuò)誤:#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 //缺分號(hào),應(yīng)該提在使用前說明delay(10) //延時(shí)子程序必須先定義,或先有函數(shù)原型說明voiddelay();{ //作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,//即不能在一個(gè)函數(shù)內(nèi)定義另一個(gè)函數(shù),而且“{”前不應(yīng)有分號(hào)//作為函數(shù)原型說明,應(yīng)該放在函數(shù)調(diào)用之前,且其后不應(yīng)該接函數(shù)體cgari; //字符型應(yīng)該是unsignedcharfor(i=O;i<=255;”++”);//”++”應(yīng)改成i++}//主函數(shù)沒有結(jié)束,缺”}”5.定義變量a,b,c,其中a為內(nèi)部RAM的可位尋址區(qū)的字符變量,b為外部數(shù)據(jù)存儲(chǔ)區(qū)浮點(diǎn)型變量,c為指向int型xdata區(qū)的指針。答: charbdataa; floatxdatab; intxdata*c;6.編程將8051的內(nèi)部數(shù)據(jù)存儲(chǔ)器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲(chǔ)器中(任意位置)。解:方法一:用嵌入式匯編語言實(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}方法二:?jiǎn)斡肅語言編程實(shí)現(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的片內(nèi)數(shù)據(jù)存儲(chǔ)器25H單元中存放有一個(gè)0~10的整數(shù),編程求其平方根(精確到5位有效數(shù)字),將平方根放到30H單元為首址的內(nèi)存中。解:方法一:用C語言與匯編語言混合編程實(shí)現(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ù)據(jù)子函數(shù),只有一個(gè)地址參數(shù)在R7中,返回值為指定地址單元中的內(nèi)容,用R7返回主函數(shù)。PUBLIC_GETDATADE SEGMENTCODERSEG DE_GETDATA: MOV A,R7 ;取地址參數(shù) MOV R0,A MOV A,@R0 MOV R7,A ;返回地址單元中的內(nèi)容EXIT: RET END方法二:?jiǎn)斡肅語言編程實(shí)現(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單元的內(nèi)容傳送到內(nèi)部RAM10H~15H單元。解:方法一:采用C語言與匯編語言混合編程//用C語言編寫的主函數(shù)MAIN.C#include<reg51.h>charmovdata(char,char);voidmain(){ chara=0x10,b=0x06;movdata(a,b);};用匯編語言編寫的移動(dòng)數(shù)據(jù)子函數(shù)MOVDATA,其中第一個(gè)參數(shù)在R7中為首地址,第二個(gè)參數(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方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)//MAIN.C#include<reg51.h>intmovdata(char);voidmain(){charn=6;char*ptr1=0x10;charxdata*ptr2;ptr2=0x20;while(n--){*ptr2++=*ptr1++;}}9.內(nèi)部RAM20H、21H和22H、23H單元分別存放著兩個(gè)無符號(hào)的16位數(shù),將其中的大數(shù)置于24H和25H單元。解:方法一:#include<reg51.h>voidmain(){ unsignedint*ptr; //設(shè)置一個(gè)內(nèi)部RAM指針unsignedintx,y,z; ptr=0x20; //指向0x20單元x=*ptr; //取第一個(gè)數(shù)ptr=0x22; //指向0x22單元y=*ptr; //取第二個(gè)數(shù)z=(x>y)?x:y; //將兩數(shù)中的較大者賦給zptr=0x24; //指向地址為0x24的目標(biāo)單元*ptr=z; //將大數(shù)存入目標(biāo)單元}方法二:#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章單片機(jī)的中斷系統(tǒng)習(xí)題1.什么是中斷、中斷源、中斷優(yōu)先級(jí)和中斷嵌套?答:中斷是指單片機(jī)內(nèi)部有一個(gè)中斷管理系統(tǒng),它對(duì)內(nèi)部的定時(shí)器事件、串行通信的發(fā)送和接收及外部事件(如鍵盤按鍵動(dòng)作)等進(jìn)行自動(dòng)的檢測(cè)判斷。當(dāng)CPU正在處理某件事情(例如正在執(zhí)行主程序)的時(shí)候,外部或內(nèi)部發(fā)生的某一事件(如某個(gè)引腳上電平的變化,一個(gè)脈沖沿的發(fā)生或計(jì)數(shù)器的計(jì)數(shù)溢出等)請(qǐng)求CPU迅速處理,于是,中斷管理系統(tǒng)會(huì)置位相應(yīng)標(biāo)志通知CPU暫時(shí)中止當(dāng)前的工作,迅速轉(zhuǎn)去處理所發(fā)生的事件。處理完該事件后,再回到原來被中止的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。引發(fā)中斷的事件稱為中斷源。將中斷事件按輕重緩急分若干級(jí)別叫中斷優(yōu)先級(jí)。允許中斷優(yōu)先級(jí)高的中斷源中斷正在執(zhí)行的低優(yōu)先級(jí)的中斷服務(wù)程序叫中斷嵌套。2.什么叫中斷源?MCS-51有哪些中斷源?各有什么特點(diǎn)?它們的中斷向量地址分別是多少?答:中斷源即引發(fā)中斷的事件。MCS-51單片機(jī)有5個(gè)中斷源,它們是外部中斷0,定時(shí)器T0,外部中斷1,定時(shí)器T1,串行口。外部中斷源是由引腳的觸發(fā)信號(hào)引起的中斷,定時(shí)器中斷源是由于定時(shí)器計(jì)數(shù)器的溢出引發(fā)的中斷,串行口是由于串行通信的發(fā)送或接收引發(fā)的中斷。外部中斷0,定時(shí)器T0,外部中斷1,定時(shí)器T1,串行口五個(gè)中斷源的中斷向量地址依次為:0003H,000BH,0013H,001BH,0023H。3.MCS-51中斷的中斷響應(yīng)條件是什么?答:(1)中斷源有中斷請(qǐng)求;(2)此中斷源允許位為1,即中斷源可以向CPU發(fā)中斷請(qǐng)求;(3)CPU開總中斷,即EA=1;(4)無同級(jí)或者更高級(jí)中斷正在服務(wù)4.MCS-51的中斷響應(yīng)過程是怎樣的?答:(1)將相應(yīng)的中斷優(yōu)先級(jí)狀態(tài)觸發(fā)器置1,以阻斷后來的同級(jí)和低級(jí)中斷請(qǐng)求;(2)由硬件清除相應(yīng)的中斷請(qǐng)求標(biāo)志,串行口的發(fā)送和接收中斷除外;(3)執(zhí)行一條硬件LCALL指令,即把程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧保存,再將相應(yīng)的中斷服務(wù)程序的入口地址送入PC;5.編寫出外部中斷1為下跳沿觸發(fā)的中斷初始化程序。解:voidInt1_init(){ IT1=1; EA=1;EX1=1; //IE=0x84;//IE|=0x84;}6.有一外部中斷源,接入端,當(dāng)其中有中斷請(qǐng)求時(shí),要求CPU把一個(gè)從內(nèi)部RAM30H單元開始的50個(gè)字節(jié)的數(shù)據(jù)塊傳送到外部RAM從1000H開始的連續(xù)存儲(chǔ)區(qū)。請(qǐng)編寫對(duì)應(yīng)的程序。解: #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.設(shè)fosc=12MHz,利用定時(shí)器,TO(工作在方式2)在P1.1引腳上獲取輸出周期為O.4ms的方波信號(hào),定時(shí)器溢出時(shí)采用中斷方式處理,請(qǐng)編寫,T0的初始化程序及中斷服務(wù)程序。解:fosc=12MHz,則機(jī)器周期=1us;當(dāng)T0工作在方式2時(shí),其最大定時(shí)時(shí)間為256us,要輸出周期為0.4mS即400us的方波信號(hào),則其高、低電平應(yīng)各為200us,顯然當(dāng)定時(shí)器T0按方式2工作時(shí),只需計(jì)數(shù)達(dá)到200次即可,因此其時(shí)間常數(shù)初值為256-200=56。在T0的中斷服務(wù)程序中,只需將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.設(shè)fosc=6MHz,要求每隔50ms,從內(nèi)部RAM以30H開始的數(shù)據(jù)存儲(chǔ)區(qū)傳送一個(gè)字節(jié)數(shù)據(jù)到外部RAM以2000H開始的連續(xù)存儲(chǔ)區(qū),共傳送50個(gè)數(shù)據(jù)。要求:采用定時(shí)器T1以方式2實(shí)現(xiàn)定時(shí),數(shù)據(jù)傳送在中斷服務(wù)程序中完成。解:fosc=6MHz,機(jī)器周期=12/6*10-6S=2us,T1工作在方式2時(shí),最大定時(shí)時(shí)間為512us,要定時(shí)50ms,可以計(jì)數(shù)100次,每次定時(shí)500us來實(shí)現(xiàn),方式2定時(shí)500us需計(jì)數(shù)250次,故其時(shí)間常數(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單片機(jī)只有兩個(gè)外部中斷源,若要擴(kuò)展成8個(gè)外部中斷源,請(qǐng)畫出實(shí)現(xiàn)這種擴(kuò)展的硬件線路圖,并說明如何確定各中斷源的優(yōu)先級(jí)。解:用按鈕開關(guān)模擬中斷源的中斷請(qǐng)求,INT0單獨(dú)作為一個(gè)中斷源,INT1擴(kuò)展成7個(gè)中斷源,有中斷請(qǐng)求時(shí),借助于P2口識(shí)別是這七個(gè)中斷源是哪個(gè)請(qǐng)求中斷,為了驗(yàn)證正確性,如果是INT0中斷,則在P0口的數(shù)碼管上顯示0,是INT1中斷,則根據(jù)從上到下是哪個(gè)中斷源在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章單片機(jī)的定時(shí)器/計(jì)數(shù)器習(xí)題1.MCS-51系列的8051單片機(jī)內(nèi)有幾個(gè)定時(shí)/計(jì)數(shù)器?每個(gè)定時(shí)/計(jì)數(shù)器有幾種工作方式?如何選擇?答:MCS-51系列的8051單片機(jī)內(nèi)有2個(gè)定時(shí)/計(jì)數(shù)器,即T0和T1,每個(gè)都可以編程為定時(shí)器或計(jì)數(shù)器,T0有四種工作方式(方式0—13位、方式1—16位、方式2-可自動(dòng)裝入初值的8位、方式3-兩個(gè)8位),T1有三種工作方式(與T0相同的前三種),通過對(duì)TMOD的設(shè)置選擇,其高四位選擇T1,低四位選擇T0。2.如果采用的晶振頻率為3MHz,定時(shí)/計(jì)數(shù)器TO分別工作在方式0、1和2下,其最大的定時(shí)時(shí)間各為多少?答:如果采用的晶振頻率為3MHz,機(jī)器周期為12×1/(3*106)=4us,由于定時(shí)/計(jì)數(shù)器TO工作在方式0、1和2時(shí),其最大的計(jì)數(shù)次數(shù)為8192、65536和256所以,其最大定時(shí)時(shí)間分別是:方式0為8192×4us=32.768ms、方式1為65536×4us=262.144ms、方式2為256×4us=1024us。3.定時(shí)/計(jì)數(shù)器TO作為計(jì)數(shù)器使用時(shí),其計(jì)數(shù)頻率不能超過晶振頻率的多少?答:由于定時(shí)/計(jì)數(shù)器TO作為計(jì)數(shù)器使用時(shí),是對(duì)外部引腳輸入的脈沖進(jìn)行計(jì)數(shù),CPU在每個(gè)機(jī)器周期采樣一次引腳,當(dāng)前一次采樣為高電平,后一次采樣為低電平,則為一次有效計(jì)數(shù)脈沖,所以如果晶振頻率為fosc,則其采樣頻率fosc/12,兩次采樣才能決定一次計(jì)數(shù)有效,所以計(jì)數(shù)頻率不能超過fosc/24。4.簡(jiǎn)單說明定時(shí)/計(jì)數(shù)器在不同工作模式下的特點(diǎn)。答:方式0為13位的定時(shí)/計(jì)數(shù)器,由THx的8位和TLx的低5位構(gòu)成、方式1為16位的定時(shí)/計(jì)數(shù)器,由THx的8位和TLx的8位構(gòu)成,方式2為8位的定時(shí)/計(jì)數(shù)器,TLx為加1計(jì)數(shù)器,THx為計(jì)數(shù)初值寄存器。方式3只能用于T0,是將T0的低8位用作一個(gè)獨(dú)立的定時(shí)/計(jì)數(shù)器,而高8位的TH0用作一個(gè)獨(dú)立的定時(shí)器,并借用T1的TR1和TF1作為高8位定時(shí)器的啟停控制位和溢出標(biāo)志位。5.定時(shí)器工作在方式2時(shí)有何特點(diǎn)?適用于什么應(yīng)用場(chǎng)合?答:定時(shí)器工作在方式2時(shí)是一個(gè)可自動(dòng)裝入時(shí)間常數(shù)初值的8位定時(shí)/計(jì)數(shù)器,TLx為加1計(jì)數(shù)器,THx為計(jì)數(shù)初值寄存器。由于其恢復(fù)初值由硬件自動(dòng)完成,所以當(dāng)需要反復(fù)計(jì)數(shù)時(shí),用方式2可以方便地實(shí)現(xiàn)精確的定時(shí)。6.一個(gè)定時(shí)器的定時(shí)時(shí)間有限,如何采用兩個(gè)定時(shí)器的串行定時(shí)來實(shí)現(xiàn)較長(zhǎng)時(shí)間的定時(shí)?答:一個(gè)定時(shí)器的定時(shí)時(shí)間有限,可采用兩個(gè)定時(shí)器的串行定時(shí)來實(shí)現(xiàn)較長(zhǎng)時(shí)間的定時(shí),比如,當(dāng)fosc=12MHz時(shí),單個(gè)定時(shí)/計(jì)數(shù)器采用方式1的最大定時(shí)時(shí)間為65.536ms,此時(shí)若用另一個(gè)定時(shí)/計(jì)數(shù)器按方式1進(jìn)行溢出次數(shù)計(jì)數(shù),在定時(shí)器溢出中斷時(shí),給計(jì)數(shù)器發(fā)一個(gè)計(jì)數(shù)脈沖,且兩者均為方式一,則兩者串行可達(dá)到的定時(shí)時(shí)間為65536×65.536ms=4294967.296ms。7.設(shè)MCS-51單片機(jī)的晶振頻率為12MHz,請(qǐng)編程使P1.O端輸出頻率為20kHz的方波。解:fosc=12MHz,所以機(jī)器周期為1us。20kHz的方波周期為1/(20×1000)=50us,方波即高電平和低電平和時(shí)間相等,所以只需設(shè)一個(gè)定時(shí)器定時(shí)25us將P1.O求反一次即可。由于題目沒有規(guī)定,所以可以用查詢方式,也可以用中斷方式進(jìn)行編程實(shí)現(xiàn)。方法一:采用查詢方式實(shí)現(xiàn)#include<reg51.h>sbitP1_0=P1^0;//定義輸出引腳變量voidmain(){P1_0=0; //輸出初值為0TMOD=0x02; //T0方式2定時(shí)TH0=256-25; //計(jì)25次,計(jì)數(shù)初值為模256減25TL0=TH0; TR0=1; //啟動(dòng)T0while(1) //無限循環(huán)if(TF0){ //查詢T0溢出標(biāo)志 TF0=0; //溢出標(biāo)志復(fù)位 P1_0=!P1_0; //輸出求反 }}方法二:采用中斷方式實(shí)現(xiàn)#include<reg51.h>sbitP1_0=P1^0;//定義輸出引腳變量voidmain(){P1_0=0; //輸出初值為0TMOD=0x02; //T0方式2定時(shí)TH0=256-25; //計(jì)25次,計(jì)數(shù)初值為模256減25TL0=TH0;IE=0x82; //允許CPU響應(yīng)中斷,允許T0發(fā)中斷請(qǐng)求TR0=1; //啟動(dòng)T0for(;;){} //無限循環(huán)等待中斷}timer0()interrupt1using1{P1_0=!P1_0; //輸出求反}8.采用定時(shí)/計(jì)數(shù)器TO對(duì)外部脈沖進(jìn)行計(jì)數(shù),每計(jì)數(shù)10O個(gè)脈沖,TO切換為定時(shí)工作方式。定時(shí)1ms后,又轉(zhuǎn)為計(jì)數(shù)方式,如此循環(huán)不止。假定MCS-5l單片機(jī)的晶體振蕩器的頻率為6MHz,要求T0工作在方式1狀態(tài),請(qǐng)編寫出相應(yīng)程序。解:晶體振蕩器的頻率為6MHz,則機(jī)器周期為12×1/(6*106)=2us,要定時(shí)1ms,需計(jì)數(shù)次數(shù)為1000/2=500次#include<reg51.h>sbitP1_0=P1^0;voidmain(){while(1){TMOD=0x05;//T0計(jì)數(shù),方式一TH0=(65536-100)/256;//計(jì)數(shù)100次TL0=(65536-100)%256;TR0=1;while(!TF0);//等待計(jì)數(shù)100次的溢出TF0=0; //溢出標(biāo)志復(fù)位TMOD=0x01;//T0定時(shí),方式一TH0=(65536-500)/256;//計(jì)數(shù)100次TL0=(65536-500)%256;TR0=1; //啟動(dòng)T0while(!TF0); //等待定時(shí)時(shí)間到1ms的溢出TF0=0; //溢出標(biāo)志復(fù)位}}9.設(shè)單片機(jī)的fosc=12MHz,使P1.O和P1.1分別輸出周期為1ms和lOms的方波,請(qǐng)用定時(shí)器TO方式2編程實(shí)現(xiàn)。解:fosc=12MHz,所以機(jī)器周期為1us。要使P1.0輸出周期為1000us的方波,可以通過定時(shí)中斷方式實(shí)現(xiàn),定時(shí)時(shí)間為250us,定時(shí)計(jì)數(shù)2次來實(shí)現(xiàn),對(duì)P1.0求反即可。要使P1.1輸出周期為10ms的方波,也可以通過定時(shí)中斷方式實(shí)現(xiàn),定時(shí)時(shí)間為5ms,當(dāng)時(shí)間到時(shí),對(duì)P1.1求反即可。由于5ms/250us=20,所以也可以通過對(duì)250us的定時(shí)計(jì)數(shù)20次來實(shí)現(xiàn)。程序如下:#include<reg51.h>sbitP1_0=P1^0;//輸出周期為400us的方波的引腳sbitP1_1=P1^1;//輸出周期為10ms的方波的引腳unsignedcharnum1=0,num2=0;//中斷次數(shù)計(jì)數(shù)器,初值為0voidmain(){P1_0=0; //輸出初值為0P1_1=0; //輸出初值為0TMOD=0x02; //T0方式2定時(shí)TH0=256-250;//計(jì)200次,計(jì)數(shù)初值為模256減200TL0=TH0;IE=0x82; //允許CPU響應(yīng)中斷,允許T0發(fā)中斷請(qǐng)求TR0=1; //啟動(dòng)T0for(;;){} //無限循環(huán)等待中斷}voidtimer0()interrupt1using1{num1++;num2++; //中斷次數(shù)加1if(num1==2) //中斷次數(shù)達(dá)到2次{P1_0=!P1_0;//輸出P1_0求反num1=0;//中斷次數(shù)復(fù)位為0}if(num2==20){ //中斷次數(shù)達(dá)到20次num2=0; //中斷次數(shù)復(fù)位為0 P1_1=!P1_1; //輸出P1_1求反}}10.編寫程序,要求使用TO,采用方式2定時(shí),在P1.0輸出周期為400us占空比為10:1的矩形脈沖。解:設(shè)fosc=12MHz,則機(jī)器周期為1us。設(shè)P1.0初值為0。周期為400us,可定義方式2定時(shí),計(jì)數(shù)初值為256-40,一個(gè)周期中斷10次為400us,在中斷計(jì)數(shù)為1和2(或任意兩次計(jì)數(shù)之間)時(shí),對(duì)P1.0求反即可。#include<reg51.h>sbitP1_0=P1^0;//輸出周期引腳unsignedcharcnt=0;//中斷次數(shù)計(jì)數(shù)器,初值為0voidmain(){P1_0=0; //輸出初值為0TMOD=0x02; //T0方式2定時(shí)TH0=256-40; //計(jì)40次,計(jì)數(shù)初值為模256減40TL0=TH0;IE=0x82; //允許CPU響應(yīng)中斷,允許T0發(fā)中斷請(qǐng)求TR0=1; //啟動(dòng)T0for(;;){} //無限循環(huán)等待中斷}voidtimer0()interrupt1using1{cnt++;//中斷次數(shù)加1if(cnt==1||cnt==2)P1_0=!P1_0;//中斷次數(shù)為1或2時(shí)對(duì)輸出引腳求反if(cnt==10)cnt=0;//中斷次數(shù)達(dá)到10時(shí)復(fù)位為0}第七章7.1.什么事串行異步通信?在串行異步通信中,數(shù)據(jù)幀的傳輸格式是什么?含義如何?答:串行異步通信是指在串行通信中發(fā)送端和接收端可以由各自的時(shí)鐘來控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘源彼此獨(dú)立,互不同步。數(shù)據(jù)幀的傳輸格式:起始位,數(shù)據(jù)位,奇偶校驗(yàn)位和停止位含義:起始位用于實(shí)現(xiàn)發(fā)送和接收雙方設(shè)備之間的同步;數(shù)據(jù)位包含所要傳輸?shù)男畔?;奇偶校?yàn)位用于判斷接收數(shù)據(jù)的正確性;停止位表示一幀數(shù)據(jù)發(fā)送結(jié)束,開始下一幀數(shù)據(jù)的傳輸。7.3.89C51單片機(jī)串行通信接口控制寄存器有幾個(gè)?每個(gè)寄存器的含義是什么?答:有電源控制寄存器PCON和串行口控制寄存器SCONPCON中SMOD與串口通信有關(guān)。SMOD=0;串口方式1,2,3時(shí),波特率正常。SMOD=1;串口方式1,2,3時(shí),波特率加倍其余與串行通信無關(guān)SCON中SM0、SM1:串行口工作方式控制位SM2:多機(jī)通信控制位REN:串行口接收使能控制端;REN=1時(shí),允許接收,REN=0時(shí),禁止接收TB8:發(fā)送接收數(shù)據(jù)位8RB8:接收數(shù)據(jù)位8TI:發(fā)送中斷標(biāo)志位;TI=1表示幀發(fā)送結(jié)束,TI可由軟件置0RI:接收中斷標(biāo)志位;RI=1表示幀接收完成,RI可由軟件置07.4.在方式1和方式3的通信模式下,波特率通過那個(gè)定時(shí)器驅(qū)動(dòng)產(chǎn)生?采用何種定時(shí)方式?如果要求采用晶振為11.0592MHz,產(chǎn)生的傳送波特率為2400b/s,應(yīng)該怎樣對(duì)定時(shí)器初始化操作?答:由定時(shí)器1驅(qū)動(dòng)產(chǎn)生,采用定時(shí)器1的工作方式2,自動(dòng)從裝初值當(dāng)晶振為11.0592MHz,波特率為2400b/s,由波特率公式:波特率=可求得初值a為F4H初始化操作:TMOD=0x20;TL1=0xF4;TH1=0xF4;PCON=0x00;SCON=0x00;TR1=1;8.3在由單片機(jī)80C51和一片ADC0809組成的數(shù)據(jù)采集系統(tǒng)中,假設(shè)ADC0809的地址為0x7ff8~0x7fff,畫出接口電路圖,并編寫每隔1ms輪流采集一次8個(gè)通道數(shù)據(jù)的程序。采樣100次取平均值。答:電路圖書上實(shí)例有,做了如下改動(dòng)控制端ADDA,ADDB,ADDC分別接P2^0,P2^!,P2^2.刪去了譯碼器與邏輯器件器件,74LS373,74HC14,74HC02,中斷檢測(cè)端EOC接P3^2。參考程序如下,自己寫的沒經(jīng)過仿真,#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;//定義中斷請(qǐng)求端ucharcount=0;//定義采樣次數(shù)uchardatcode[100]={0};//定義數(shù)據(jù)存放數(shù)組intdat=0,dat1=0;//定義臨時(shí)數(shù)據(jù)與最終平均數(shù)據(jù)uchari,j,num;//定義變量voidmain(){TMOD=0x01;//定時(shí)器0工作方式1TL0=(65536-1000)/256;//1ms中斷一次TH0=(65536-1000)%256;EA=1;//開總中斷,定時(shí)器中斷,打開定時(shí)器0ET0=1;TR0=1;while(count<100)//100次數(shù)據(jù)求和函數(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;//啟動(dòng)0通道AD轉(zhuǎn)換while(busy==1){num=AD_0+1;//把0通道數(shù)據(jù)附給num,并指向AD_1通道查詢datcode[i+1]=num;j++;if(j==7)//八次查詢完畢退出循環(huán){busy=0;j=0; }}}第一章習(xí)題參考答案1-1:何謂單片機(jī)?與通用微機(jī)相比,兩者在結(jié)構(gòu)上有何異同?答:將構(gòu)成計(jì)算機(jī)的基本單元電路如微處理器(CPU)、存儲(chǔ)器、I/O接口電路和相應(yīng)實(shí)時(shí)控制器件等電路集成在一塊芯片上,稱其為單片微型計(jì)算機(jī),簡(jiǎn)稱單片機(jī)。單片機(jī)與通用微機(jī)相比在結(jié)構(gòu)上的異同:(1)兩者都有CPU,但通用微機(jī)的CPU主要面向數(shù)據(jù)處理,其發(fā)展主要圍繞數(shù)據(jù)處理功能、計(jì)算速度和精度的進(jìn)一步提高。例如,現(xiàn)今微機(jī)的CPU都支持浮點(diǎn)運(yùn)算,采用流水線作業(yè),并行處理、多級(jí)高速緩沖(Cache)技術(shù)等。CPU的主頻達(dá)到數(shù)百兆赫茲(MHz),字長(zhǎng)普遍達(dá)到32位。單片機(jī)主要面向控制,控制中的數(shù)據(jù)類型及數(shù)據(jù)處理相對(duì)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論