版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋買賣合同的房產(chǎn)交易合同范本3篇
- 教育培訓(xùn)行業(yè)聘用合同模板3篇
- 教育培訓(xùn)機(jī)構(gòu)市場(chǎng)專員合同3篇
- 工程工人的勞動(dòng)合同范本3篇
- 房屋買賣合同翻譯示例3篇
- 文化館工程項(xiàng)目建議3篇
- 排隊(duì)叫號(hào)系統(tǒng)招標(biāo)文件詳解與解析指南3篇
- 方式安全承諾書樣本3篇
- 攪拌站施工合同維護(hù)與保修3篇
- 政務(wù)信息化公告3篇
- 工行個(gè)人小額貸款合同樣本
- 【8歷期末】安徽省合肥市包河區(qū)智育聯(lián)盟校2023-2024學(xué)年八年級(jí)上學(xué)期1月期末歷史試題
- 醫(yī)療機(jī)構(gòu)并購(gòu)合同模板
- 北師版七年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)考點(diǎn) 清單04 基本平面圖形(12個(gè)考點(diǎn)梳理+題型解讀+提升訓(xùn)練)
- 精品[QC]提高地磚施工合格率范本
- 2020 新ACLS-PCSA課前自我測(cè)試-翻譯版玉二醫(yī)【復(fù)制】附有答案
- 走賬協(xié)議合同范本
- 甲狀腺功能減退癥(11)講課教案
- 電瓶車供貨服務(wù)方案(完整版)
- 常用儀表縮寫字母
- 政工干部年度述職報(bào)告
評(píng)論
0/150
提交評(píng)論