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

下載本文檔

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

文檔簡介

1、第一章習題 1.什么是單片機?單片機和通用微機相比有何特點? 答:單片機又稱為單片微計算機,它的結(jié)構特點是將微型計算機的基本功能部件(如中央處理器(cpu)、存儲器、輸入接口、輸出接口、定時/計數(shù)器及終端系統(tǒng)等)全部集成在一個半導體芯片上。 雖然單片機只是一個芯片,但無論從組成還是從邏輯功能上來看,都具有微機系統(tǒng)的定義。與通用的微型計算機相比,單片機體積小巧,可以嵌入到應用系統(tǒng)中作為指揮決策中心,是應用系統(tǒng)實現(xiàn)智能化。  2.單片機的發(fā)展有哪幾個階段?8位單片機會不會過時,為什么? 答:單片機誕生于1971年,經(jīng)歷了scm、mcu、s

2、oc三大階段,早期的scm單片機都是8位或4位的。其中最成功的是intel的8031,此后在8031上發(fā)展出了mcs51系列mcu系統(tǒng)?;谶@一系統(tǒng)的單片機系統(tǒng)直到現(xiàn)在還在廣泛使用。隨著工業(yè)控制領域要求的提高,開始出現(xiàn)了16位單片機,但因為性價比不理想并未得到很廣泛的應用。90年代后隨著消費電子產(chǎn)品大發(fā)展,單片機技術得到了巨大提高。隨著intel i960系列特別是后來的arm系列的廣泛應用,32位單片機迅速取代16位單片機的高端地位,并且進入主流市場。然而,由于各應用領域大量需要的仍是8位單片機,因此各大公司紛紛推出高性能、大容量、多功能的新型8位單片機。 目前,單片機正

3、朝著高性能和多品種發(fā)展,但由于mcs-51系列8位單片機仍能滿足絕大多數(shù)應用領域的需要,可以肯定,以mcs-51系列為主的8位單片機,在當前及以后的相當一段時間內(nèi)仍將占據(jù)單片機應用的主導地位。  3.舉例說明單片機的主要應用領域。 答:單片機廣泛應用于儀器儀表、家用電器、醫(yī)用設備、航空航天、專用設備的智能化管理及過程控制等領域,大致可分如下幾個范疇:智能儀器   單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應用于儀器儀表中,結(jié)合不同類型的傳感器,可實現(xiàn)諸如電壓、電流、功率、頻率、濕度、溫度、流量、速度、

4、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強大。例如精密的測量設備(電壓表、功率計,示波器,各種分析儀)。 工業(yè)控制   單片機具有體積小、控制功能強、功耗低、環(huán)境適應能力強、擴展靈活和使用方便等優(yōu)點,用單片機可以構成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、通信系統(tǒng)、信號檢測系統(tǒng)、無線感知系統(tǒng)、測控系統(tǒng)、機器人等應用控制系統(tǒng)。例如工廠流水線的智能化管理,電梯智能化控制、各種報警系統(tǒng),與計算機聯(lián)網(wǎng)構成二級控制系統(tǒng)等。 家用電器現(xiàn)在的家用電器廣泛采用了單片機控制,從

5、電飯煲、洗衣機、電冰箱、空調(diào)機、彩電、其他音響視頻器材、再到電子秤量設備和白色家電等。 網(wǎng)絡和通信   現(xiàn)代的單片機普遍具備通信接口,可以很方便地與計算機進行數(shù)據(jù)通信,為在計算機網(wǎng)絡和通信設備間的應用提供了極好的物質(zhì)條件,現(xiàn)在的通信設備基本上都實現(xiàn)了單片機智能控制,從手機,電話機、小型程控交換機、樓宇自動通信呼叫系統(tǒng)、列車無線通信、再到日常工作中隨處可見的移動電話,集群移動通信,無線電對講機等。 醫(yī)用設備領域   單片機在醫(yī)用設備中的用途亦相當廣泛,例如醫(yī)用呼吸機,各種分析儀,監(jiān)護儀,超聲診斷設備及病床呼叫系統(tǒng)等等

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

7、gps導航系統(tǒng)、abs防抱死系統(tǒng)、制動系統(tǒng)、胎壓檢測等。    此外,單片機在工商、金融、科研、教育、電力、通信、物流和國防航空航天等領域都有著十分廣泛的用途。  4.將十進制數(shù)37轉(zhuǎn)換為二進制,bcd碼和十六進制數(shù),并對轉(zhuǎn)換結(jié)果進行對比分析。 答:37=(100101)b=(25)h;bcd 碼為 0011 0111;    可見,同一個數(shù)用不同進制表示,其結(jié)果也不同。  5.寫出下列十進制數(shù)在8位微機中的原碼,反碼和補碼形式。

8、60;(1)+36 原碼   0010 0100b     反碼   0010 0100b     補碼   0010 0100b (2)-36    原碼   1010 0100b     反碼   

9、;1101 1011b     補碼   1101 1100b (3)+127    原碼   0111 1111b 反碼   0111 1111b補碼   0111 1111b (4)-128    原碼   1000 0000

10、b    反碼   0111 1111b     補碼   1000 0000b (5)-121    原碼   1111 1001b     反碼   1000 0110b 補碼   1000 01

11、11b    6.對于二進制數(shù)1000 1001b,若理解為無符號數(shù),則該數(shù)對應十進制數(shù)為多少?若理解為有符號數(shù),則該數(shù)對應十進制為多少?若理解為bcd數(shù),則該數(shù)對應十進制數(shù)為多少? 答:1000 1001b 無符號數(shù):137有符號數(shù):-9;               bcd數(shù):89;   7.對下列各組數(shù)進行“與”,“或”和“異或”運算。

12、60;(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或

13、60; 1111 1111異或 1001 1001(4) 0011 1100 和 1111 0000與  0011 0000或  1111 1100異或 1100 11008.proteus isis的工作界面中包含哪幾個窗口?菜單欄中包含哪幾個選項? 答:proteus isis的工作界面主要包括標題欄、菜單欄、工具欄、狀態(tài)欄、方位控制按鈕、仿真進程控制按鈕、對象選擇窗口,原理圖編輯窗口和預覽窗口等。&#

14、160;主菜單欄包含文件、查看、編輯、工具、設計、圖形、源文件、調(diào)試、庫、模板、系統(tǒng)、幫助選項。    9.利用isis模塊開發(fā)單片機系統(tǒng)需要經(jīng)過哪幾個主要步驟? 答:(1)啟動isis;(2)繪制電路原理圖;    (3)輸入單片機程序;    (4)進行源代碼調(diào)試;    (5)仿真運行。  10.何謂pcb?利用ares模塊進行pcb設計需要經(jīng)過哪幾個主要步驟? 答:pcb(printed&

15、#160;circuit board),中文名稱為印制電路板,又稱印刷電路板、印刷線路板,是重要的電子部件,是電子元器件的支撐體,是電子元器件電氣連接的提供者。由于它是采用電子印刷術制作的,故被稱為“印刷”電路板。 利用ares模塊進行pcb設計的主要步驟: (1)啟動ares; (2)元器件布局; (3)元器件布線; (4)鋪銅; (5)三維效果圖; (6)cadcam輸出。 第2章 mcs-51單片機結(jié)構及原理習題1 msc51單片機內(nèi)部由哪些功能部件組成,各有什么功能?答:以51單片機為例,其內(nèi)部功能部件有:

16、控制器:是對取自程序存儲器中的指令進行譯碼,在規(guī)定的時刻發(fā)出各種操作所需的控制信號,完成指令所規(guī)定的功能;運算器:根據(jù)控制器發(fā)來的信號,執(zhí)行算術邏輯運算操作;存儲器:包括程序存儲和數(shù)據(jù)存儲器;定時器計數(shù)器:2個16位定時器/計數(shù)器,可對機器周期計數(shù),也可對外部輸入脈沖計數(shù);中斷系統(tǒng):可響應三個內(nèi)部中斷源和兩個外部中斷源的中斷請求;輸入輸出接口:4個8位并行口和一個全雙工串行口;2msc51單片機外部引腳的名稱是什么?各有什么功能?答:(1) 電源及晶振引腳vcc(40腳):+5v電源引腳vss(20腳): 接地引腳xtal1(19腳);外接晶振引腳(內(nèi)置放大器輸入端)xtal2(18腳):外接

17、晶振引腳(內(nèi)置放大器輸出端)(2) 控制引腳rst/vpd(9)為復位/ 備用電源引腳 ale/prog(30)為地址鎖存使能輸出/ 編程脈沖輸入 psen(29):輸出訪問片外程序存儲器讀選通信號 ea/ vpp (31):外部rom允許訪問/ 編程電源輸入 (3) 并行i/o口引腳p0.0p0.7(3932腳)p0口;p1.0p1.7(18腳)p1口;p2.0p2.7(2128腳)p2口;p3.0p3.7(1017腳)p3口。351系列單片機的封裝有哪些類型?請說明每一種封裝引腳之間的距離。答:51系列單片機的封裝有:40引腳雙列直插封裝(dipdual in-line package),

18、引腳之間的距離是100mil();44引腳方形扁平封裝(qfp quad flat package)方式,引腳之間的距離是;44引腳帶引線的塑料芯片載體plcc(plastic leaded chip carrier)。4什么是復位?單片機復位電路有哪幾種,工作原理分別是什么?答:復位使單片機恢復原始默認狀態(tài)的操作。單片機復位電路有:上電復位電路,由電阻和電容構成,通過上電時,電容相當于短路而使復位引腳在晶振有效的情況下保持2個機器周期的高電平;按鈕開關復位電路,由兩個電阻的分壓構成,通過手工按下按鈕,使復位引腳在晶振有效的情況下保持2個機器周期的高電平。5通常的微機系統(tǒng)存儲器結(jié)構有哪幾種?m

19、cs-51單片機存儲器屬于哪一類?cs-51可尋址多大空間?答:通常的微機系統(tǒng)存儲器結(jié)構有兩種結(jié)構,即哈佛結(jié)構和馮諾依曼結(jié)構(也叫普林斯頓結(jié)構),mcs-51單片機存儲器屬于,mcs-51可尋址空間是兩個64kb,即64kb的程序存儲空間和64kb的數(shù)據(jù)存儲空間。6片內(nèi)ram中低128個單元劃分為哪三個主要部分?各部分的主要功能是什么?答:片內(nèi)ram中低128個單元劃分為三個部分:工作寄存器區(qū)(00h-1fh),四組,每組8個,可作用工作寄存器切換使用;可位尋址區(qū)(20h-2fh),16b,位地址為00h-7fh,用作為按位尋址的空間;用戶ram區(qū)(30h-7fh),80b,用作普通ram單元

20、或堆棧。7程序狀態(tài)字寄存器psw各位的定義是什么?答:程序狀態(tài)字寄存器psw各位的定義如下:cyacf0rs1rs0ovf1pcyacf0rs1rs0ovf1pcyacf0rs1rs0ovf1pcyacf0rs1rs0ovf1ppsw.7psw.6psw.5psw.4psw.3psw.2psw.1psw.0psw.7:進/借位標志cy,加法有進位時置1,減法有借位時置1;psw.6:輔助進位標志ac,加法運算低四位向高上四位有進位時置1;psw.5、psw.1:用戶標志位f0和用戶標志位f1,保存用戶的位數(shù)據(jù);psw.4、psw.3:工作寄存器選擇控制位rs1和rs0,00至11分別選擇四組工

21、作之一作為當前工作寄存器psw.2 :溢出標志位ov,有符號數(shù)加、減運算結(jié)果有溢出或乘除上結(jié)果異常(乘法運算結(jié)果大于255即乘積在ba中,或除法運算除數(shù)為0)時置1psw.0:奇偶標志位p,累加器a中1的個數(shù)為奇數(shù)時置1。8什么是時鐘周期?什么是機器周期?什么是指令周期?當振蕩頻率為12mhz時,一個機器周期為多少微秒?答:時鐘周期又叫振蕩周期或拍,用p表示,是mcs-51單片機中最小的時間單位,在一個時鐘周期內(nèi),cpu完成一個最基本的動作。機器周期:由12個時鐘周期構成,完成一個基本操作指令周期:是執(zhí)行一條指令所需的時間,根據(jù)指令的復雜性,可由14個機器周期構成。當振蕩頻率為12mhz時,一

22、個機器周期為1微秒。9p0、p1、p2和p3口的結(jié)構和功能分別是什么?答:p0口的每一位由1個鎖存器 、2個三態(tài)緩沖器 、1個輸出控制電路(非門 x、與門、電子開關mux、輸出驅(qū)動電路構成,其功能既可以作為通用i/o口實現(xiàn)輸入/輸出功能,也可作為單片機地址線的低8位和數(shù)據(jù)線實現(xiàn)外部擴展功能。在用作輸入輸出口時,需外接上拉電阻。p1口的每一位由1個鎖存器 、1個場效應管驅(qū)動器v和2個三態(tài)門緩沖器構成,其作用是用作輸入輸出口p2口的每一位由1個鎖存器、2個三態(tài)緩沖器、1個輸出控制單元、1個輸出驅(qū)動單元構成,其功能是用作輸入輸出口,或地址總線的高8位。p3口的每一位由1個鎖存器、2個三態(tài)緩沖器、1個

23、第二功能控制單元 、1個輸出驅(qū)動單元構成,其作用是用作輸入輸出口或第二功能。1051單片機引腳ale的作用是什么?當51不外接存儲器時,ale上的輸出的脈沖頻率是多少?答:51單片機引腳ale的作用是對外部存儲尋址時鎖存p0口輸出的低8位地址,當51不外接存儲器時,ale上的輸出的脈沖頻率是fosc/6。第3章 單片機的匯編語言與程序設計習題1mcs-51單片機有哪幾種尋址方式?適用于什么地址空間?答:mcs-51單片機有7種尋址方式:直接尋址、寄存器尋址、寄存器間接尋址、立即尋址、變址尋址、位尋址、相對尋址。直接尋址方式:操作數(shù)的地址由指令直接給出,適用于片內(nèi)ram的所有地址空間;如mova

24、,68hmova,psw寄存器尋址方式:指令給出的是寄存器的編碼,操作數(shù)在編碼指定的寄存器中,適用于片內(nèi)00h至1fh的32個字節(jié),用r0,r7表示,通過psw的rs1和rs0選擇組號確定對應32個字節(jié)中的其中8個,還有累加器a,以及乘除法指令中的a和b寄存器,位尋址方式中的布爾累加器c;mova,r1mulabincdptr寄存器間接尋址方式:指令給出的是寄存器的編碼,操作數(shù)地址在編碼指定的寄存器中,適用于片內(nèi)ram的全部空間,其中52系列中的80h至ffh只能用寄存器間接尋址;如mova,r0mova,r1movxa,dptr立即尋址方式:操作數(shù)本身在指令中直接,給出適用于用8位立即數(shù)對片

25、內(nèi)ram所有地址單元賦值,也可用16位立即數(shù)對dptr賦值; 如mova,#0e2hmovdptr,#2000h變址尋址方式:以dptr或pc作為基地址寄存器,以累加器a作為變址寄存器,將基址寄存器與變址寄存器的內(nèi)容相加形成操作數(shù)的實際地址的一種尋址方式,變址尋址方式適用于程序存儲器rom,僅有三條指令如下:movca,a+dptrmovca,a+pcjmpa+dptr位尋址方式:指令中直接給出操作數(shù)所在單元的位地址,適用于片內(nèi)ram中地址20h至2fh中的16個字節(jié)中的128個位地址空間和80h至ffh中地址中可以被8整除的所有sfr中的每個位地址空間;如movc,7fhmovf0,cmov

26、c,acc.7相對尋址方式:為相對轉(zhuǎn)移指令而設,指令中直接給出轉(zhuǎn)移的相對偏移量,其轉(zhuǎn)移目標在當前指令-128至127字節(jié)范圍內(nèi)的地址空間。如sjmpstarthere:sjmphere;等效于:sjmp$2mcs-51單片機的psw程序狀態(tài)字中無zero(零)標志位,怎樣判斷某內(nèi)部數(shù)據(jù)單元的內(nèi)容是否為零?答:mcs-51單片機的psw程序狀態(tài)字中無zero(零)標志位,判斷某內(nèi)部數(shù)據(jù)單元的內(nèi)容是否為零是能通過取數(shù)到a累加器,再判斷a中的每一位是否為零來確定其值是否為零。3編程將內(nèi)部ram的20h-30h單元內(nèi)容清零。解:設一個片內(nèi)ram指針r0,先指向首地址20h,通過累加器a清零,然后采用間

27、接尋址方式依次將a中的零值傳送到指針所指的片內(nèi)ram單元,每傳送一個字節(jié),地址指針加1,直到達到地址為30h或達到計數(shù)器規(guī)定的17個字節(jié)為止。程序1:movr0,#20h;設地址指針初值clra;累加器清0cont:movr0,a;置0指針所指單元incr0;地址指針加1cjner0,#31h,cont;指針未超過終點則繼續(xù)sjmp$;暫停程序2:movr0,#20h;設地址指針初值clra;累加器清0movr7,#17;計數(shù)器賦初值,從20h到30h共17個字節(jié)cont:movr0,a;置0指針所指單元incr0;地址指針加1djnzr7, cont;計數(shù)器減1,非0,則繼續(xù)sjmp$;暫停

28、4編程查找內(nèi)部ram的32h41h單元中是否有0aah這個數(shù)據(jù),若有這一數(shù)據(jù),則將50h單元置為0ffh,否則將50h單元清零。解:設一個片內(nèi)ram指針r0,先指向首地址32h,比較r0與#0aah,若相等,則退出循環(huán),給50h單元賦0ffh,若不相等,則r0加1為繼續(xù)比較下一個字節(jié)做準備,直到達到地址為41h或達到計數(shù)器規(guī)定的16個字節(jié)為止還沒找到,則給50h單元賦00h程序1:movr0,#32h;設地址指針初值cont:cjner0,#0aah,next;比較查找值與指針所指單元的值,不相等轉(zhuǎn)移mova,#0ffh;相等,則準備好要賦的標志值0ffhsjmpdown;轉(zhuǎn)存到保存結(jié)果處ne

29、xt:incr0;修改地址指針cjner0,#42h,cont;若指針未越過終點,則繼續(xù)mova,#00h;查找失敗,則將00h存入結(jié)果標志單元down:mov50h,a;將比較結(jié)果標志存入50h單元sjmp$;暫停end程序2:movr7,#16;計數(shù)器賦初值,從20h到30h共16個字節(jié)movr0,#32h;設地址指針初值cont:cjner0,#0aah,next;比較查找值與指針所指單元的值,不相等轉(zhuǎn)移mova,#0ffh;相等,則準備好要賦的標志值0ffhsjmpdown;轉(zhuǎn)存到保存結(jié)果處next:incr0;修改地址指針djnzr7,cont;計數(shù)器減1,非0,則繼續(xù)mova,#0

30、0h;查找失敗,則將00h存入結(jié)果標志單元down:mov50h,a;將比較結(jié)果標志存入50h單元sjmp$;暫停end5查找20h4fh單元中出現(xiàn)00h的次數(shù),并將查找結(jié)果存入50h單元。解:從20h到4fh共48個字節(jié)movr7,#48;字節(jié)計數(shù)器賦初值movr0,#20h;設地址指針初值cont:cjner0,#00h,next;比較查找值與指針所指單元的值,不相等轉(zhuǎn)移incr6;相等,0的個數(shù)計數(shù)器加1next:incr0;修改地址指針djnzr7,cont;計數(shù)器減1,非0,則繼續(xù)mov50h,r6;保存o的個數(shù)計數(shù)值到50h單元sjmp$;暫停endend6已知a=83h,r0=1

31、7h,(17h)=34h,寫出下列程序段執(zhí)行之后的a中的內(nèi)容。 anla,#17h orl17h,a xrla,r0 cplaend答:anla,#17h;a=03horl17h,a ;(17h)=0011 0100 0000 0011=0011 0111 xrla,r0;a= 0000 0011 0011 0111 =0011 0100 cpla;a=1100 10117已知單片機的晶振頻率為12mhz,分別設計延時為0.1s、1s的子程序。答:已知單片機的晶振頻率為12mhz,則機器周期為1us,延時子程序是通過執(zhí)行指令序列中機器周期數(shù)來達到,如果要0.1s,即100ms,也就是10000

32、0us,所以需要機器周期數(shù)達到100000。要延時達到1s,可通過對延時為0.1秒的子程序調(diào)用10次來實現(xiàn)。delay100ms:mov r6,#200 ;1個機器周期d1: mov r7,#250 ;1個機器周期d2:nop;1個機器周期djnz r7,d2 ;2個機器周期,3*251=753djnz r6,d1 ;2個機器周期,(1+753+2)*132=99792ret ;2個機器周期,1+99792+2=99795,約100msdelay1s:movr7,#10;計數(shù)10次1loop:acalldelay100ms;延時100ms子程序99795+2djnzr7,loop;未達到10次

33、則繼續(xù)10*(2+99795+2)ret;返回2+10*(2+99795+2)=9979928內(nèi)部ram從20h單元開始處有一數(shù)據(jù)塊,以odh為結(jié)束標志,試統(tǒng)計該數(shù)據(jù)塊的長度,將該數(shù)據(jù)塊送到外部數(shù)據(jù)存儲器7e01h開始的單元,并將長度存入7e00h單元。解:從20h的指針用r0,從外部ram7e01開始的指針用dptr,計數(shù)器用r7movr7,#0;字節(jié)計數(shù)器賦初值movr0,#20h;設片內(nèi)ram地址指針初值movdptr,#7e01h;設片外ram地址指針初值cont:mova,r0;取片內(nèi)ram中的一個字節(jié)movxdptr,a;存入片外ram指針所指單元incr7;長度計數(shù)器加1incr

34、0;片內(nèi)ram地址指針加1incdptr;片外ram地址指針加1cjnea,#0dh,cont;未達到結(jié)束標志mova,r7;取塊計數(shù)長度值movxdptr,a;保存sjmp$;暫停end9內(nèi)部ram從data開始的區(qū)域中存放著10個單字節(jié)十進制數(shù),求其累加和,并將結(jié)果存入sum和sum+1單元。解:r7計數(shù),r6保存累加和高8位,r0用作地址指針org0000hljmpmain org100hsumequ30hdataaequ40hmain:movr7,#10;字節(jié)計數(shù)器賦初值movr0,#dataa;設片內(nèi)ram地址指針初值clra;累加器清0movr6,a;累加結(jié)果的高8位cont:ad

35、da,r0;加ram中的一個字節(jié)到accda ajncnext;若無進位則不用管高8位incr6;有進位,高8位加1next:incr0;片內(nèi)ram地址指針加1djnzr7,cont;未完繼續(xù)movsum,a;保存低8位movsum+1,r6;保存高8位sjmp$;暫停end10內(nèi)部ram從data1和data2單元開始處存放著兩個等長的數(shù)據(jù)塊,數(shù)據(jù)塊的長度在len單元中。請編程檢查這兩個數(shù)據(jù)塊是否相等,若相等,將0ffh寫入result單元,否則將0寫入result單元。解:從data1開始的指針用r0,從data2開始的指針用r1,計數(shù)器用r7lenequ10data1equ30hdata

36、2equ40hresultequ50hmovr7,#len;字節(jié)計數(shù)器賦初值movr0,#data1;設片內(nèi)ram地址指針初值movr1,#data2;設片外ram地址指針初值cont:mova,r0;取片內(nèi)ram r0所指的的一個字節(jié)mov7fh,r1;將r1所指單元內(nèi)容取到片內(nèi)ram地址7fh中cjnea,7fh,noeq;比較,不相等則結(jié)束incr0;data1 ram地址指針加1incr1;data2 ram地址指針加1djnzr7,cont;未完,繼續(xù)mova,#0ffh;相等,準備寫入ffhsjmpdown;轉(zhuǎn)寫入結(jié)果處noeq:mova,#0;不相等,準備寫入00hdown:mo

37、vresult,a;保存比較結(jié)果標志sjmp$;暫停end11編制程序,將內(nèi)部ram中m1、m2、m3和m4單元中的無符號數(shù)xl、x2、x3和x4相加,并把和存入ro和r1(r0中為高8位)中。解:m1equ30hm2equ40hm3equ45hm4equ4fhmova,m1;取第一個數(shù)adda,m2;與第二個數(shù)相加jncnext1;如果無進位,則轉(zhuǎn)移至第三個相加movr0,#1;有進位,高8位置1next1:adda,m3;與第三個數(shù)相加jncnext2;沒有進位,則轉(zhuǎn)至第四個數(shù)相加incr0;有進位,高8位加1next2:adda,m4;與第四個數(shù)相加jncnext3;沒有進位,則轉(zhuǎn)至結(jié)束

38、incr0;有進位,高8位再加1next3:movr1,a;低8位保存到r1sjmp$;暫停end第4章 單片機的c51語言習題1c語言的優(yōu)點是什么?c程序的主要結(jié)構特點是什么?答:c語言是一種高級語言,學習比低級容易,不需要具體組織、分配存儲器資源和處理端口數(shù)據(jù),可以直接驅(qū)動單片機的所有資源。c程序以函數(shù)為單位,由一個主函數(shù)和若干個其他函數(shù)構成,主函數(shù)是程序的入口,其他函數(shù)由主函數(shù)直接或間接調(diào)用。程序可以由一個文件或多個文件組成。文件類型包括頭文件和c語言源文件,也可以是匯編語言文件,c程序可與匯編語言混合編程。2c51語言的變量定義包含哪些關鍵因素?為何這樣考慮?答:c語言的變量定義格式如

39、下:存儲種類數(shù)據(jù)類型存儲類型變量名其中:存儲種類與標準c語言相同,包括:自動型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register)。數(shù)據(jù)類型除了包含標準c語言類型的字符型(char),整型(int),長整型(long),浮點型(float),雙精度型(double)外,還有二進制位型(bit),特殊功能寄存器型(sfr),sfr可位尋址的位類型(sbit)。存儲類型包括:片內(nèi)ram區(qū)(data)、片內(nèi)可位尋址區(qū)(bdata),片內(nèi)ram間接尋址區(qū)(idata),片外ram頁尋址區(qū)(pdata),片外ram區(qū)(xdata)、rom區(qū)(code)。只所以比標準

40、c語言多了存儲類型,就是因為mcs51單片機的存儲結(jié)構中有四個物理存儲空間(片內(nèi)ram、片內(nèi)rom,片外ram,片外rom),三個邏輯地址空間(片內(nèi)ram,片外ram,rom),而且有多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋址)所致,所以在定義變量時,要根據(jù)其所在位置和尋址方式明確指定存儲類型。3c51與匯編語言的特點各有哪些?怎樣實現(xiàn)兩者的優(yōu)勢互補?答:c51是結(jié)構化語言,代碼緊湊;接近自然語言,程序可讀性強,易于調(diào)試、維護;庫函數(shù)豐富,編程工作量小,可使產(chǎn)品開發(fā)周期短;具有機器級控制能力,功能很強,適合于嵌入式系統(tǒng)開發(fā);匯編指令無關,易于掌握,上手快。匯編語言優(yōu)點是編寫的程序代碼精

41、煉、執(zhí)行速度快,在相同功能下,匯編語言程序可能比c語言程序效率高。缺點是對程序員要求高,必須對單片機的硬件結(jié)構非常熟悉才能編程,不便于編寫比較復雜的程序??筛鶕?jù)需要對要求時間性很強的代碼用匯編語言編寫,其它部分用c語言編寫,兩者混合編程就可以實現(xiàn)優(yōu)勢互補。4指出下面程序的語法錯誤: #include<reg51.h> main() a=c; int a=7,c delay(10) void delay(); cgar i; for(i=o; i<=255; ”+”); 答: #include<reg51.h> main() a=c;/a和c必須先定義才可使用 in

42、t a=7,c/缺分號,應該提在使用前說明 delay(10)/延時子程序必須先定義,或先有函數(shù)原型說明 void delay();/作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,/即不能在一個函數(shù)內(nèi)定義另一個函數(shù),而且“”前不應有分號/作為函數(shù)原型說明,應該放在函數(shù)調(diào)用之前,且其后不應該接函數(shù)體 cgar i;/字符型應該是unsigned char for(i=o; i<=255; ”+”);/ ”+”應改成i+/主函數(shù)沒有結(jié)束,缺”5定義變量a,b,c,其中a為內(nèi)部ram的可位尋址區(qū)的字符變量,b為外部數(shù)據(jù)存儲區(qū)浮點型變量,c為指向 int 型 xdata 區(qū)的指針。答:char bda

43、ta a;float xdata b;int xdata *c;6編程將8051的內(nèi)部數(shù)據(jù)存儲器20h單元和35h單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲器中(任意位置)。解:方法一:用嵌入式匯編語言實現(xiàn)#include<reg51.h>void main()#pragma asmmova,20hmovb,35hmulabmovdptr,#1234hmovxdptr,aincdptrmova,bmovxdptr,a#pragma endasm方法二:單用c語言編程實現(xiàn)#include<reg51.h>#include<math.h>int movdata(cha

44、r);void main() unsigned int xdata x; unsigned char *ptr,a,b; ptr=0x25; a=*ptr; ptr=0x30; b=*ptr; x=a*b;78051的片內(nèi)數(shù)據(jù)存儲器25h單元中存放有一個010的整數(shù),編程求其平方根(精確到5位有效數(shù)字),將平方根放到30h單元為首址的內(nèi)存中。解:方法一:用c語言與匯編語言混合編程實現(xiàn)/用c語言編寫的主函數(shù)main.c#include<reg51.h>#include<math.h>char getdata(char);void main() char a=0x25,c;

45、 float f; c=getdata(a); f=sqrt(c);用匯編語言編寫的取數(shù)據(jù)子函數(shù),只有一個地址參數(shù)在r7中,返回值為指定地址單元中的內(nèi)容,用r7返回主函數(shù)。public _getdatadesegment codersegde_getdata:mova,r7 ;取地址參數(shù)movr0,a mova,r0movr7,a;返回地址單元中的內(nèi)容exit: retend方法二:單用c語言編程實現(xiàn)/main.c#include<reg51.h>#include<math.h>int movdata(char);void main() char n; char *pt

46、r; float *ptr2; float f; ptr=0x25; n=*ptr; f=sqrt(n); ptr2=0x30; *ptr2=f;8將外部ram 10h15h單元的內(nèi)容傳送到內(nèi)部ram 10h15h單元。解:方法一:采用c語言與匯編語言混合編程/用c語言編寫的主函數(shù)main.c#include<reg51.h>char movdata(char,char);void main() char a=0x10,b=0x06; movdata(a,b);用匯編語言編寫的移動數(shù)據(jù)子函數(shù)movdata,其中第一個參數(shù)在r7中為首地址,第二個參數(shù)在r5中為字節(jié)數(shù)public _m

47、ovdatadesegment codersegde_movdata:mova,r7 ;取參數(shù)movr0,a loop:movxa,r0movr0,adjnzr5,loopexit: retend 方法二:單用c語言編程實現(xiàn)/main.c#include<reg51.h>int movdata(char);void main() char n=6; char *ptr1=0x10; char xdata *ptr2; ptr2=0x20; while(n-) *ptr2+=*ptr1+; 9內(nèi)部ram 20h、21h和22h、23h單元分別存放著兩個無符號的16位數(shù),將其中的大數(shù)置

48、于24h和25h單元。解:方法一:#include<reg51.h>void main() unsigned int *ptr;/設置一個內(nèi)部ram指針 unsigned int x,y,z; ptr=0x20;/指向0x20單元 x=*ptr;/取第一個數(shù) ptr=0x22;/指向0x22單元 y=*ptr;/取第二個數(shù) z=(x>y)?x:y;/將兩數(shù)中的較大者賦給z ptr=0x24;/指向地址為0x24的目標單元 *ptr=z;/將大數(shù)存入目標單元方法二:#include<reg51.h>#include<absacc.h>void main(

49、) unsigned int x,y,z; x=dbyte0x20*256+dbyte0x21; y=dbyte0x22*256+dbyte0x23; z=(x>y)?x:y;/將兩數(shù)中的較大者賦給z dbyte0x24=z/256; dbyte0x25=z%256;方法三:#include<reg51.h>unsigned int x _at_ 0x20;unsigned int y _at_ 0x22;unsigned int z _at_ 0x24;void main() z=(x>y)?x:y;第4章 單片機的c51語言習題1c語言的優(yōu)點是什么?c程序的主要結(jié)構

50、特點是什么?答:c語言是一種高級語言,學習比低級容易,不需要具體組織、分配存儲器資源和處理端口數(shù)據(jù),可以直接驅(qū)動單片機的所有資源。c程序以函數(shù)為單位,由一個主函數(shù)和若干個其他函數(shù)構成,主函數(shù)是程序的入口,其他函數(shù)由主函數(shù)直接或間接調(diào)用。程序可以由一個文件或多個文件組成。文件類型包括頭文件和c語言源文件,也可以是匯編語言文件,c程序可與匯編語言混合編程。2c51語言的變量定義包含哪些關鍵因素?為何這樣考慮?答:c語言的變量定義格式如下:存儲種類數(shù)據(jù)類型存儲類型變量名其中:存儲種類與標準c語言相同,包括:自動型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register

51、)。數(shù)據(jù)類型除了包含標準c語言類型的字符型(char),整型(int),長整型(long),浮點型(float),雙精度型(double)外,還有二進制位型(bit),特殊功能寄存器型(sfr),sfr可位尋址的位類型(sbit)。存儲類型包括:片內(nèi)ram區(qū)(data)、片內(nèi)可位尋址區(qū)(bdata),片內(nèi)ram間接尋址區(qū)(idata),片外ram頁尋址區(qū)(pdata),片外ram區(qū)(xdata)、rom區(qū)(code)。只所以比標準c語言多了存儲類型,就是因為mcs51單片機的存儲結(jié)構中有四個物理存儲空間(片內(nèi)ram、片內(nèi)rom,片外ram,片外rom),三個邏輯地址空間(片內(nèi)ram,片外ram

52、,rom),而且有多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋址)所致,所以在定義變量時,要根據(jù)其所在位置和尋址方式明確指定存儲類型。3c51與匯編語言的特點各有哪些?怎樣實現(xiàn)兩者的優(yōu)勢互補?答:c51是結(jié)構化語言,代碼緊湊;接近自然語言,程序可讀性強,易于調(diào)試、維護;庫函數(shù)豐富,編程工作量小,可使產(chǎn)品開發(fā)周期短;具有機器級控制能力,功能很強,適合于嵌入式系統(tǒng)開發(fā);匯編指令無關,易于掌握,上手快。匯編語言優(yōu)點是編寫的程序代碼精煉、執(zhí)行速度快,在相同功能下,匯編語言程序可能比c語言程序效率高。缺點是對程序員要求高,必須對單片機的硬件結(jié)構非常熟悉才能編程,不便于編寫比較復雜的程序??筛鶕?jù)需要對

53、要求時間性很強的代碼用匯編語言編寫,其它部分用c語言編寫,兩者混合編程就可以實現(xiàn)優(yōu)勢互補。4指出下面程序的語法錯誤: #include<reg51.h> main() a=c; int a=7,c delay(10) void delay(); cgar i; for(i=o; i<=255; ”+”); 答: #include<reg51.h> main() a=c;/a和c必須先定義才可使用 int a=7,c/缺分號,應該提在使用前說明 delay(10)/延時子程序必須先定義,或先有函數(shù)原型說明 void delay();/作為函數(shù)定義,有函數(shù)定義不能嵌套的問題,/即不能在一個函數(shù)內(nèi)定義另一個函數(shù),而且“”前不應有分號/作為函數(shù)原型說明,應該放在函數(shù)調(diào)用之前,且其后不應該接函數(shù)體 cgar i;/字符型應該是unsigned char for(i=o; i<=255; ”+”);/ ”+”應改成i+/主函數(shù)沒有結(jié)束,缺”5定義變量a,b,c,其中a為內(nèi)部ram的可位尋址區(qū)的字符變量,b為外部數(shù)據(jù)存儲區(qū)浮點型變量,c為指向 int 型 xdata 區(qū)的指針。答:char bdata

溫馨提示

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

評論

0/150

提交評論