單片機(jī)原理和應(yīng)用第三版林立張俊亮課后答案解析知識(shí)講解_第1頁
單片機(jī)原理和應(yīng)用第三版林立張俊亮課后答案解析知識(shí)講解_第2頁
單片機(jī)原理和應(yīng)用第三版林立張俊亮課后答案解析知識(shí)講解_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余26頁可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、第一章習(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 位的。其中最成功

2、的是INTEL的8031,此后在8031上發(fā)展岀了 MCS5係列MCI系統(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)

3、域的需要,可以肯定,以 MCS-5係列為主的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)大。

4、例如精密的測(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è)備間

5、的應(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,由

6、微控制器讀出,轉(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)制表

7、示,其結(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 0111B6. 對(duì)于二進(jìn)制數(shù)1000 1001B,若理解為無符號(hào)數(shù)

8、,則該數(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 00

9、11 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、。10. 何謂PCB?利用ARES模塊進(jìn)行PCB設(shè)計(jì)需要經(jīng)過哪幾個(gè)主要步驟?答:PCB(Printed Circuit Board ),中文名稱為印制電路板,又稱印刷電路板、印刷線路板, 是重要的電子部件,是電子元器件的支撐體,是電子元器件電氣連接的提供者。由于它是采用電子印 刷術(shù)制作的,故被稱為“印刷”電路板。禾U用ARES模塊進(jìn)行PCB設(shè)計(jì)的主要步驟:(1)啟動(dòng)ARES ( 2)元器件布局;(3)元器件布線;(4)鋪銅;(5)三維效果圖;(6) CADCA輸岀。第2章MCS-51單片機(jī)結(jié)構(gòu)及原理 習(xí)題1. MSC- 51單片機(jī)內(nèi)部由哪些功能部件組成,各有什么功能?答:以51單片機(jī)為例,其內(nèi)

11、部功能部件有:控制器:是對(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)置放大器輸入端)XTA

12、L2(18腳):外接晶振引腳(內(nèi)置放大器輸岀端)(2)控制引腳RST/VPD(9)為復(fù)位/備用電源引腳為地址鎖存使能輸出/編程脈沖輸入:輸出訪問片外程序存儲(chǔ)器讀選通信號(hào):外部ROM允許訪問/編程電源輸入(3)并行I/O 口引腳P0.0 P0.7 ( 3932 腳)P0 口;P1.0 P1.7 (1 8 腳)P1 口;P2.0 P2.7 ( 21 28 腳)P2 口;P3.0P3.7 (1017 腳)P3 口。3. 51系列單片機(jī)的封裝有哪些類型?請(qǐng)說明每一種封裝引腳之間的距離。答:51系列單片機(jī)的封裝有:CYACF0RS1RS00VFlP40引腳雙列直插圭寸裝(DIPdual in-line

13、package ),引腳之間的距離是 100mil();44引腳方形扁平封裝(QFPquad flat package )方式,引腳之間的距離是;44引腳帶引線的塑料芯片載體 PLCC(Plastic Leaded Chip Carrier) 。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ī)器周期的高電平。

14、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)RAMH氐128個(gè)單元?jiǎng)澐譃槿齻€(gè)部分:工作寄存器區(qū)(00H-1FH,四組,每組8個(gè),可作用工作寄存器切換使用;可位尋址區(qū)(20H-2FH),16B,位地址為00H-7FH,用作為按位尋址的空間;用戶RAMx(

15、30H-7FH), 80B,用作普通RAM單元或堆棧。7 程序狀態(tài)字寄存器 PSW各位的定義是什么?答:程序狀態(tài)字寄存器 PSW各位的定義如下:PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 PSW.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和RSQ 00至11分別選擇四組工作之一作為當(dāng)前工 作寄存器PSW.2 :溢岀標(biāo)志位OV有符號(hào)數(shù)加、

16、減運(yùn)算結(jié)果有溢岀或乘除上結(jié)果異常 (乘法運(yùn)算結(jié)果大于 255即乘積在BA中,或除法運(yùn)算除數(shù)為0)時(shí)置1 PSW.0奇偶標(biāo)志位P,累加器A中1的個(gè)數(shù)為奇數(shù) 時(shí)置1。8 什么是時(shí)鐘周期?什么是機(jī)器周期?什么是指令周期?當(dāng)振蕩頻率為12MHZ寸,一個(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ù)雜性,可由14個(gè)機(jī)器周期構(gòu)成。當(dāng)振蕩頻率為12MHz時(shí),一個(gè)機(jī)器周期為1微秒。9. PO、P1、P2和P3 口的

17、結(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)成,

18、其作用是用作輸入輸岀口或第二功能。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的所有地址空間;如MOVA, 68HMOV A PSW寄

19、存器尋址方式:指令給岀的是寄存器的編碼,操作數(shù)在編碼指定的寄存器中,適用于片內(nèi)00H至1FH的32個(gè)字節(jié),用R0,R7表示,通過PSW勺R(shí)S1和RS0選擇組號(hào)確定對(duì)應(yīng)32個(gè)字節(jié)中的其 中8個(gè),還有累加器A,以及乘除法指令中的 A和B寄存器,位尋址方式中的布爾累加器 C;MOV A R1MUL ABINC DPTR寄存器間接尋址方式:指令給出的是寄存器的編碼,操作數(shù)地址在編碼指定的寄存器中,適用于 片內(nèi)RAM勺全部空間,其中52系列中的80H至FFH只能用寄存器間接尋址;女口 MOV A R0MOV A R1MOVX A DPTR立即尋址方式:操作數(shù)本身在指令中直接,給岀適用于用8位立即數(shù)對(duì)片內(nèi)

20、RAM所有地址單元賦 值,也可用16位立即數(shù)對(duì)DPTR賦值; 如MOV A #0E2HMOV DPTR #2000H變址尋址方式:以DPTF或 PC作為基地址寄存器,以累加器 A作為變址寄存器,將基址寄存器與 變址寄存器的內(nèi)容相加形成操作數(shù)的實(shí)際地址的一種尋址方式,變址尋址方式適用于程序存儲(chǔ)器 ROM僅有三條指令如下:MOVC A A+DPTRMOVC A A+PCJMP A+DPTR位尋址方式:指令中直接給岀操作數(shù)所在單元的位地址,適用于片內(nèi)RAM中地址20H至2FH中的16個(gè)字節(jié)中的128個(gè)位地址空間和80H至FFH中地址中可以被8整除的所有SFR中的每個(gè)位地址空 間;如MOV C 7FH

21、MOV F0 CMOV C ACC.7相對(duì)尋址方式:為相對(duì)轉(zhuǎn)移指令而設(shè),指令中直接給出轉(zhuǎn)移的相對(duì)偏移量,其轉(zhuǎn)移目標(biāo)在當(dāng)前指 令-128至+ 127字節(jié)范圍內(nèi)的地址空間。女口SJMP STARTHERE SJMP HERE;等效于: SJMP $2. MCS-51單片機(jī)的PSV程序狀態(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

22、,先指向首地址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)竼卧狪NC R0 ;地址指針加1CJNE R0,#31H,CONT指針未超過終點(diǎn)則繼續(xù)SJMP $ ;暫停程序2:MOV R0,#20H ;設(shè)地址指針初值CLR A ;累加器清0MOV R7,#17 ;計(jì)數(shù)器賦初值,從20H到30H共17個(gè)字節(jié)CONT: MOV R0,A置0指針?biāo)?/p>

23、單元 INC R0 ;地址指針加1DJNZ R7, CONT ;計(jì)數(shù)器減1, 非 0,則繼續(xù)SJMP $ ;暫停4編程查找內(nèi)部RAM的 32H41H單元中是否有0AAH這個(gè)數(shù)據(jù),若有這一數(shù)據(jù),則將 50H單元 置為0FFH否則將50H單元清零。解:設(shè)一個(gè)片內(nèi)RAM指針R0,先指向首地址32H,比較只與#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:CJNER0,#0AAH,NEX比較查找值與指

24、針?biāo)竼卧闹?,不相等轉(zhuǎn)移MOVA,#0FFH ;相等,則準(zhǔn)備好要賦的標(biāo)志值 0FFHSJMP 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,NEXTW較查找值與指針?biāo)竼卧闹?,不相等轉(zhuǎn)移MOV A,#0FFH ;

25、相等,則準(zhǔn)備好要賦的標(biāo)志值 OFFHSJMP 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 .查找20H4FH單元中岀現(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)竼卧闹担幌嗟绒D(zhuǎn)移I

26、NC 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 AEND答:ANL A,#17H ;A=03HORL 17H,A ;(17H)=0011 0100 V 0000 0011=0011 0111 XRL A,R0 ;A= 0000 0011 V 0011 0111 =0011

27、 0100 CPL A ;A=1100 10117 .已知單片機(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: MOV R6,#200 ;1 個(gè)機(jī)器周期D1: MOV R7,#250 ;1個(gè)機(jī)器周期D2: NOP ;1個(gè)機(jī)器周期DJNZ R7,D2 ;2 個(gè)機(jī)器周期,3*25仁753DJNZ R6,

28、D1 ;2 個(gè)機(jī)器周期,(1+753+2)*132=99792RET ;2 個(gè)機(jī)器周期,1+99792+2=99795,約 100msDELAY1S: MOV R7,#10 ;計(jì)數(shù) 10 次 1LOOP: ACALL DELAY100MS延時(shí) 100ms 子程序 99795+2DJNZ R7,LOOP ;未達(dá)到 10 次則繼續(xù) 10*(2+99795+2) RET ; 返回 2+10*(2+99795+2)=9979928 內(nèi)部RAM從 20H單元開始處有一數(shù)據(jù)塊,以 ODF為結(jié)束標(biāo)志,試統(tǒng)計(jì)該數(shù)據(jù)塊的長(zhǎng)度,將該 數(shù)據(jù)塊送到外部數(shù)據(jù)存儲(chǔ)器 7E01H開始的單元,并將長(zhǎng)度存入 7E00H單元。解

29、:從20H的指針用R0,從外部RAM7E0開始的指針用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)RAh中的一個(gè)字節(jié)MOVX DPTR,A存入片外RAM旨針?biāo)竼卧狪NC R7 ;長(zhǎng)度計(jì)數(shù)器加1INC R0 ;片內(nèi)RAM地址指針加1INC DPTR ;片外RAM地址指針加1CJNE A,#0DH,CONT未達(dá)到結(jié)束標(biāo)志MOV A,R7 ;取塊計(jì)數(shù)長(zhǎng)度值MOVX DPTR,A保存SJMP $ ;暫停END9 .內(nèi)部RAM從 DATA開始的區(qū)域

30、中存放著10個(gè)單字節(jié)十進(jìn)制數(shù),求其累加和,并將結(jié)果存入SUM 和口 SUM+單元。解:R7計(jì)數(shù),R6保存累加和高8位,R0用作地址指針ORG 0000HLJMP MAINORG 100HSUM EQU 30HDATAA EQU 40HMAIN: MOV R7,#10 ;字節(jié)計(jì)數(shù)器賦初值MOV R0,#DATAA設(shè)片內(nèi)RAM地址指針初值CLR A ;累加器清0MOV R6,A ;累加結(jié)果的高8位CONT: ADD A,R0加RAh中的一個(gè)字節(jié)到 ACCDA AJNC NEXT ;若無進(jìn)位則不用管高8位INC R6 ;有進(jìn)位,高8位加1NEXT: INC R0 ;片內(nèi)RAM地址指針加1DJNZ R

31、7,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ù)器用R7 LEN EQU 10DATA1 EQU 30HDATA2 EQU 40HRESULT EQU 50HMOV R7,#LEN ;字節(jié)計(jì)數(shù)器賦初值MOV R0,#DATA1設(shè)片內(nèi)RAM地址指針初值MO

32、V R1,#DATA2設(shè)片外RAM地址指針初值CONT: MOV A,R0取片內(nèi)RAM R0所指的的一個(gè)字節(jié)MOV 7FH,R1將R1所指單元內(nèi)容取到片內(nèi) RAM地址7FH中CJNE A,7FH,NOEQ ;比較,不相等則 結(jié)束INC R0 ;DATA1 RAM地址指針加1INC R1 ;DATA2 RAM地址指針加1DJNZ R7,CONT ;未完,繼續(xù)MOV A,#0FFH ;相等,準(zhǔn)備寫入FFHSJMP DOWN轉(zhuǎn)寫入結(jié)果處NOEQ: MOV A,#0 ;不相等,準(zhǔn)備寫入00HDOWN: MOV RESULT,A呆存比較結(jié)果標(biāo)志SJMP $ ;暫停END11. 編制程序,將內(nèi)部 RAM

33、M1、M2 M3和M4單元中的無符號(hào)數(shù) xl、x2、x3和x4相加,并把 和存入RO和R1(R0中為高8位)中。解:M1 EQU 30HM2 EQU 40HM3 EQU 45HM4 EQU 4FHMOV 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)位,高

34、8位再加1NEXT3: MOV R1,A ;低 8 位保存到 R1SJMP $ ;暫停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語言的變量定

35、義格式如下:存儲(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)整型(Iong),浮點(diǎn)型(float), 雙精度型(double)夕卜,還有二進(jìn)制位型(bit),特殊功能寄存器型(sfr) ,SFR可位尋址的位類型(sbit)。存儲(chǔ)類型包括:片內(nèi) RAh區(qū)(data)、片內(nèi)可位尋址區(qū)(bdata),片內(nèi)RAh間接尋址區(qū)(idata),片 外 RAM頁尋址區(qū)(pdata),片外 RAME (xdata)、ROM

36、區(qū)(code)。只所以比標(biāo)準(zhǔn)C語言多了存儲(chǔ)類型,就是因?yàn)镸C&51單片機(jī)的存儲(chǔ)結(jié)構(gòu)中有四個(gè)物理存儲(chǔ)空間 (片內(nèi)RAM片內(nèi)ROM片外RAM片外ROM)三個(gè)邏輯地址空間(片內(nèi)RAM片外RAM ROM)而且有 多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋址)所致,所以在定義變量時(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),易于掌握,

37、上手快。匯編語言優(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ò)誤:#in clude<reg51.h>mai n()a=C;int a=7,Cdelay(10)void delay();cgar i ;for(i=O; i<=255;” +”);答:#in clude<reg51.h>mai n()a=C; /

38、a和C必須先定義才可使用int a=7,C /缺分號(hào),應(yīng)該提在使用前說明delay(10) / 延時(shí)子程序必須先定義,或先有函數(shù)原型說明void delay();/作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,/即不能在一個(gè)函數(shù)內(nèi)定義另一個(gè)函數(shù),而且“ ”前不應(yīng)有分號(hào)/作為函數(shù)原型說明,應(yīng)該放在函數(shù)調(diào)用之前,且其后不應(yīng)該接函數(shù)體cgar i ; / 字符型應(yīng)該是 unsigned charfor(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

39、 型xdata 區(qū)的指針。答:char bdata a;float xdata b;int xdata *c;6. 編程將8051的內(nèi)部數(shù)據(jù)存儲(chǔ)器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲(chǔ)器中 (任意位置)。解:方法一:用嵌入式匯編語言實(shí)現(xiàn)#in clude<reg51.h>void mai n() #pragma asmMOV A,20HMOV B,35HMUL ABMOV DPTR,#1234HMOVX DPTR,AINC DPTRMOV A,BMOVX DPTR,A#pragma en dasm方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)#in clude<reg51.h&g

40、t;#in clude<math.h>int movdata(char);void mai n()un sig ned int xdata x;un sig ned char *ptr,a,b;ptr=0x25;a=*ptr;ptr=0x30;b=*ptr;x=a*b;7. 8051的片內(nèi)數(shù)據(jù)存儲(chǔ)器25H單元中存放有一個(gè)010的整數(shù),編程求其平方根(精確到5位 有效數(shù)字),將平方根放到30H單元為首址的內(nèi)存中。解:方法一:用C語言與匯編語言混合編程實(shí)現(xiàn)/用C語言編寫的主函數(shù) MAIN.C#in clude<reg51.h>#in clude<math.h>c

41、har getdata(char);void mai n()char a=0x25,c;float f;c=getdata(a);f=sqrt(c);;用匯編語言編寫的取數(shù)據(jù)子函數(shù),只有一個(gè)地址參數(shù)在 R7中,返回值為指定地址單元中的內(nèi)容,用R7返回主函數(shù)。PUBLIC _GETDATADE SEGMENT CODERSEG DE_GETDATA: MOV A,R7 取地址參數(shù)MOV R0,AMOV A,R0MOV R7,A ;返回地址單元中的內(nèi)容EXIT: RETEND方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)/MAIN.C#in clude<reg51.h>#in clude<math.

42、h>int movdata(char);void mai n()char n;char *ptr;float *ptr2;float f;ptr=0x25;n=*ptr;f=sqrt( n);ptr2=0x30;*ptr2=f;8將外部RAM10H15H單元的內(nèi)容傳送到內(nèi)部 RAM10H15H單元。 解:方法一:采用 C語言 與匯編語言混合編程/用C語言編寫的主函數(shù) MAIN.C#in clude<reg51.h>char movdata(char,char);void mai n()char a=0x10,b=0x06;movdata(a,b);;用匯編語言編寫的移動(dòng)數(shù)據(jù)子

43、函數(shù)MOVDATA其中第一個(gè)參數(shù)在R5中為字節(jié)數(shù)PUBLIC _MOVDATADE SEGMENT CODERSEG DE_MOVDATA: MOV A,R7 取參數(shù)MOV R0,ALOOP: MOVX A,R0MOV R0,ADJNZ R5,LOOPEXIT: RETEND方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)/MAIN.C#in clude<reg51.h>int movdata(char);void mai n()char n=6;char *ptr1=Ox1O;char xdata *ptr2;ptr2=0x20;while( n-)*ptr2+=*ptr1+;9.內(nèi)部RAM 20H

44、21H和22H、23H單元分別存放著兩個(gè)無符號(hào)的 24H和25H單元。解:方法一:#in clude<reg51.h>void mai n()unsigned int *ptr; /設(shè)置一個(gè)內(nèi)部 RAM指針un sig ned int x,y,z;ptr=0x20; / 指向 0x20 單元x=*ptr; / 取第一個(gè)數(shù)ptr=0x22; / 指向 0x22 單元y=*ptr; / 取第二個(gè)數(shù)z=(x>y)?x:y; / 將兩數(shù)中的較大者賦給z ptr=0x24; / 指向地址為0x24的目標(biāo)單元*ptr=z; /將大數(shù)存入目標(biāo)單元方法二:R7中為首地址,第二個(gè)參數(shù)在16位數(shù)

45、,將其中的大數(shù)置于#in clude<reg51.h>#in clude<absacc.h>void mai n()un sig ned int x,y,z;x=DBYTE0X20*256+DBYTE0X21; y=DBYTE0X22*256+DBYTE0X23;z=(x>y)?x:y; /將兩數(shù)中的較大者賦給zDBYTE0X24=z/256;DBYTE0X25=z%256;方法三:#in clude<reg51.h>un sig ned int x _at_ 0x20;un sig ned int y _at_ 0x22;un sig ned int

46、 z _at_ 0x24;void mai n()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語言的變量定義格式如下:

47、存儲(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) RAh區(qū)(data)、片內(nèi)可位尋址區(qū)(bdata),片內(nèi)RAh間接尋址區(qū)(idata),片 外 RAM頁尋址區(qū)(pdata),片外 RAME (xdata)、ROM區(qū)(cod

48、e)。只所以比標(biāo)準(zhǔn)C語言多了存儲(chǔ)類型,就是因?yàn)镸C&51單片機(jī)的存儲(chǔ)結(jié)構(gòu)中有四個(gè)物理存儲(chǔ)空間 (片內(nèi)RAM片內(nèi)ROM片外RAM片外ROM)三個(gè)邏輯地址空間(片內(nèi)RAM片外RAM ROM)而且有多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋 址)所致,所以在定義變量時(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),易于掌握,上手快。匯編

49、語言優(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ò)誤:#in clude<reg51.h>mai n()a=C;int a=7,Cdelay(10)void delay();cgar i ;for(i=O; i<=255;” +”);答:#in clude<reg51.h>mai n()a=C; /a和C必須先

50、定義才可使用int a=7,C /缺分號(hào),應(yīng)該提在使用前說明delay(10) /延時(shí)子程序必須先定義,或先有函數(shù)原型說明void delay();/作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,/即不能在一個(gè)函數(shù)內(nèi)定義另一個(gè)函數(shù),而且“ ”前不應(yīng)有分號(hào)/作為函數(shù)原型說明,應(yīng)該放在函數(shù)調(diào)用之前,且其后不應(yīng)該接函數(shù)體cgar i ; / 字符型應(yīng)該是 unsigned charfor(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ū)

51、的指針。答: char bdata a;float xdata b;int xdata *c;6. 編程將8051的內(nèi)部數(shù)據(jù)存儲(chǔ)器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲(chǔ)器中 (任意位置)。解:方法一:用嵌入式匯編語言實(shí)現(xiàn)#in clude<reg51.h>void mai n() #pragma asmMOV A,20HMOV B,35HMUL ABMOV DPTR,#1234HMOVX DPTR,AINC DPTRMOV A,BMOVX DPTR,A#pragma en dasm方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)#in clude<reg51.h>#in cl

52、ude<math.h>int movdata(char);void mai n()un sig ned int xdata x;un sig ned char *ptr,a,b;ptr=0x25;a=*ptr;ptr=0x30;b=*ptr;x=a*b;7. 8051的片內(nèi)數(shù)據(jù)存儲(chǔ)器25H單元中存放有一個(gè)010的整數(shù),編程求其平方根(精確到5位 有效數(shù)字),將平方根放到30H單元為首址的內(nèi)存中。解:方法一:用C語言與匯編語言混合編程實(shí)現(xiàn)/用C語言編寫的主函數(shù) MAIN.C#in clude<reg51.h>#in clude<math.h>char getd

53、ata(char);void mai n()char a=0x25,c;float f;c=getdata(a);f=sqrt(c);用匯編語言編寫的取數(shù)據(jù)子函數(shù), 只有一個(gè)地址參數(shù)在 R7中,返回值為指定地址單元中的內(nèi)容, 用R7返回主函數(shù)。PUBLIC _GETDATADE SEGMENT CODERSEG DE_GETDATA: MOV A,R7 取地址參數(shù)MOV R0,AMOV A,R0MOV R7,A ;返回地址單元中的內(nèi)容EXIT: RETEND方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)/MAIN.C#in clude<reg51.h>#in clude<math.h>in

54、t movdata(char);void mai n()char n;char *ptr;float *ptr2;float f;ptr=0x25;n=*ptr;f=sqrt( n);ptr2=0x30;*ptr2=f;8. 將外部 RAM 10H- 15H單元的內(nèi)容傳送到內(nèi)部 RAM 10H-15H單元。解:方法一:采用C語言與匯編語言混合編程/用C語言編寫的主函數(shù) MAIN.C#in clude<reg51.h>char movdata(char,char);void mai n()char a=0x10,b=0x06;movdata(a,b);用匯編語言編寫的移動(dòng)數(shù)據(jù)子函數(shù)M

55、OVDATA其中第一個(gè)參數(shù)在R7中為首地址,第二個(gè)參數(shù)在R5中為字節(jié)數(shù)PUBLIC _MOVDATADE SEGMENT CODERSEG DE_MOVDATA: MOV A,R7 取參數(shù)MOV R0,ALOOP: MOVX A,R0MOV R0,ADJNZ R5,LOOPEXIT: RETEND方法二:?jiǎn)斡肅語言編程實(shí)現(xiàn)/MAIN.C#in clude<reg51.h>int movdata(char);void mai n()char n=6;char *ptr1=0x10;char xdata *ptr2;ptr2=0x20;while( n-)*ptr2+=*ptr1+;9內(nèi)部RAM 20H 21H和22H、23H單元分別存放著兩個(gè)無符號(hào)的16位數(shù),將其中的大數(shù)置于24H和25H單元。解:方法一:#in clude<re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論