單片機原理及應用(林立_張俊亮版)課后習題答案

上傳人:沈*** 文檔編號:138251309 上傳時間:2022-08-20 格式:DOC 頁數:30 大?。?20.50KB
收藏 版權申訴 舉報 下載
單片機原理及應用(林立_張俊亮版)課后習題答案_第1頁
第1頁 / 共30頁
單片機原理及應用(林立_張俊亮版)課后習題答案_第2頁
第2頁 / 共30頁
單片機原理及應用(林立_張俊亮版)課后習題答案_第3頁
第3頁 / 共30頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《單片機原理及應用(林立_張俊亮版)課后習題答案》由會員分享,可在線閱讀,更多相關《單片機原理及應用(林立_張俊亮版)課后習題答案(30頁珍藏版)》請在裝配圖網上搜索。

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

2、L的8031,此后在8031上發(fā)展出了MCS51系列MCU系統(tǒng)。基于這一系統(tǒng)的單片機系統(tǒng)直到現在還在廣泛使用。隨著工業(yè)控制領域要求的提高,開始出現了16位單片機,但因為性價比不理想并未得到很廣泛的應用。90年代后隨著消費電子產品大發(fā)展,單片機技術得到了巨大提高。隨著INTELi960系列特別是后來的ARM系列的廣泛應用,32位單片機迅速取代16位單片機的高端地位,并且進入主流市場。然而,由于各應用領域大量需要的仍是8位單片機,因此各大公司紛紛推出高性能、大容量、多功能的新型8位單片機。目前,單片機正朝著高性能和多品種發(fā)展,但由于MCS-51系列8位單片機仍能滿足絕大多數應用領域的需要,可以肯定

3、,以MCS-51系列為主的8位單片機,在當前及以后的相當一段時間內仍將占據單片機應用的主導地位。3.舉例說明單片機的主要應用領域。答:單片機廣泛應用于儀器儀表、家用電器、醫(yī)用設備、航空航天、專用設備的智能化管理及過程控制等領域,大致可分如下幾個范疇:智能儀器單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應用于儀器儀表中,結合不同類型的傳感器,可實現諸如電壓、電流、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數字化、智能化、微型化,且功能比起采用電子或數字電路更加強大。例如精密的測量設備(電壓表、功

4、率計,示波器,各種分析儀)。工業(yè)控制單片機具有體積小、控制功能強、功耗低、環(huán)境適應能力強、擴展靈活和使用方便等優(yōu)點,用單片機可以構成形式多樣的控制系統(tǒng)、數據采集系統(tǒng)、通信系統(tǒng)、信號檢測系統(tǒng)、無線感知系統(tǒng)、測控系統(tǒng)、機器人等應用控制系統(tǒng)。例如工廠流水線的智能化管理,電梯智能化控制、各種報警系統(tǒng),與計算機聯網構成二級控制系統(tǒng)等。家用電器現在的家用電器廣泛采用了單片機控制,從電飯煲、洗衣機、電冰箱、空調機、彩電、其他音響視頻器材、再到電子秤量設備和白色家電等。網絡和通信現代的單片機普遍具備通信接口,可以很方便地與計算機進行數據通信,為在計算機網絡和通信設備間的應用提供了極好的物質條件,現在的通信設備

5、基本上都實現了單片機智能控制,從手機,電話機、小型程控交換機、樓宇自動通信呼叫系統(tǒng)、列車無線通信、再到日常工作中隨處可見的移動電話,集群移動通信,無線電對講機等。醫(yī)用設備領域單片機在醫(yī)用設備中的用途亦相當廣泛,例如醫(yī)用呼吸機,各種分析儀,監(jiān)護儀,超聲診斷設備及病床呼叫系統(tǒng)等等。模塊化系統(tǒng)某些專用單片機設計用于實現特定功能,從而在各種電路中進行模塊化應用,而不要求使用人員了解其內部結構。如音樂集成單片機,看似簡單的功能,微縮在純電子芯片中(有別于磁帶機的原理),就需要復雜的類似于計算機的原理。如:音樂信號以數字的形式存于存儲器中(類似于ROM),由微控制器讀出,轉化為模擬音樂電信號(類似于聲卡)

6、。在大型電路中,這種模塊化應用極大地縮小了體積,簡化了電路,降低了損壞、錯誤率,也方便于更換。汽車電子單片機在汽車電子中的應用非常廣泛,例如汽車中的發(fā)動機控制器,基于CAN總線的汽車發(fā)動機智能電子控制器、GPS導航系統(tǒng)、abs防抱死系統(tǒng)、制動系統(tǒng)、胎壓檢測等。此外,單片機在工商、金融、科研、教育、電力、通信、物流和國防航空航天等領域都有著十分廣泛的用途。4.將十進制數37轉換為二進制,BCD碼和十六進制數,并對轉換結果進行對比分析。答:37=(100101)B=(25)H;BCD碼為00110111;可見,同一個數用不同進制表示,其結果也不同。5.寫出下列十進制數在8位微機中的原碼,反碼和補碼

7、形式。(1)+36原碼00100100B反碼00100100B補碼00100100B(2)-36原碼10100100B反碼11011011B補碼11011100B(3)+127原碼01111111B反碼01111111B補碼01111111B(4)-128原碼10000000B反碼01111111B補碼10000000B(5)-121原碼11111001B反碼10000110B補碼10000111B6.對于二進制數10001001B,若理解為無符號數,則該數對應十進制數為多少?若理解為有符號數,則該數對應十進制為多少?若理解為BCD數,則該數對應十進制數為多少?答:10001001B 無符號數

8、:137有符號數:-9;BCD數:89;7.對下列各組數進行“與”,“或”和“異或”運算。(1)10101010和 00000000與 00000000或 10101010異或10101010(2) 01110111和 10001000與00000000或11111111異或11111111(3) 11101110和01110111與01100110或11111111異或10011001(4) 00111100和11110000與00110000或11111100異或110011008.ProteusISIS的工作界面中包含哪幾個窗口?菜單欄中包含哪幾個選項?答:ProteusISIS的工作界

9、面主要包括標題欄、菜單欄、工具欄、狀態(tài)欄、方位控制按鈕、仿真進程控制按鈕、對象選擇窗口,原理圖編輯窗口和預覽窗口等。主菜單欄包含文件、查看、編輯、工具、設計、圖形、源文件、調試、庫、模板、系統(tǒng)、幫助選項。9.利用ISIS模塊開發(fā)單片機系統(tǒng)需要經過哪幾個主要步驟?答:(1)啟動ISIS;(2)繪制電路原理圖;(3)輸入單片機程序;(4)進行源代碼調試;(5)仿真運行。10.何謂PCB?利用ARES模塊進行PCB設計需要經過哪幾個主要步驟?答:PCB(PrintedCircuitBoard),中文名稱為印制電路板,又稱印刷電路板、印刷線路板,是重要的電子部件,是電子元器件的支撐體,是電子元器件電氣

10、連接的提供者。由于它是采用電子印刷術制作的,故被稱為“印刷”電路板。利用ARES模塊進行PCB設計的主要步驟:(1)啟動ARES;(2)元器件布局;(3)元器件布線;(4)鋪銅;(5)三維效果圖;(6)CADCAM輸出。 第2章 MCS-51單片機結構及原理習題1 MSC51單片機內部由哪些功能部件組成,各有什么功能?答:以51單片機為例,其內部功能部件有:控制器:是對取自程序存儲器中的指令進行譯碼,在規(guī)定的時刻發(fā)出各種操作所需的控制信號,完成指令所規(guī)定的功能;運算器:根據控制器發(fā)來的信號,執(zhí)行算術邏輯運算操作;存儲器:包括程序存儲和數據存儲器;定時器計數器:2個16位定時器/計數器,可對機器

11、周期計數,也可對外部輸入脈沖計數;中斷系統(tǒng):可響應三個內部中斷源和兩個外部中斷源的中斷請求;輸入輸出接口:4個8位并行口和一個全雙工串行口;2MSC51單片機外部引腳的名稱是什么?各有什么功能?答:(1) 電源及晶振引腳VCC(40腳):+5V電源引腳VSS(20腳): 接地引腳XTAL1(19腳);外接晶振引腳(內置放大器輸入端)XTAL2(18腳):外接晶振引腳(內置放大器輸出端)(2) 控制引腳RST/VPD(9)為復位/ 備用電源引腳 ALE/PROG(30)為地址鎖存使能輸出/ 編程脈沖輸入 PSEN(29):輸出訪問片外程序存儲器讀選通信號 EA/ VPP (31):外部ROM允許

12、訪問/ 編程電源輸入 (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),引腳之間的距離是100mil();44引腳方形扁平封裝(QFP quad flat package)方式,引腳之間的距離是;44引腳帶引線的塑料芯片載體PLCC(Plastic Leaded Chip Carrier)。4什么是復位?單片機

13、復位電路有哪幾種,工作原理分別是什么?答:復位使單片機恢復原始默認狀態(tài)的操作。單片機復位電路有:上電復位電路,由電阻和電容構成,通過上電時,電容相當于短路而使復位引腳在晶振有效的情況下保持2個機器周期的高電平;按鈕開關復位電路,由兩個電阻的分壓構成,通過手工按下按鈕,使復位引腳在晶振有效的情況下保持2個機器周期的高電平。5通常的微機系統(tǒng)存儲器結構有哪幾種?MCS-51單片機存儲器屬于哪一類?CS-51可尋址多大空間?答:通常的微機系統(tǒng)存儲器結構有兩種結構,即哈佛結構和馮諾依曼結構(也叫普林斯頓結構),MCS-51單片機存儲器屬于,MCS-51可尋址空間是兩個64KB,即64KB的程序存儲空間和

14、64KB的數據存儲空間。6片內RAM中低128個單元劃分為哪三個主要部分?各部分的主要功能是什么?答:片內RAM中低128個單元劃分為三個部分:工作寄存器區(qū)(00H-1FH),四組,每組8個,可作用工作寄存器切換使用;可位尋址區(qū)(20H-2FH),16B,位地址為00H-7FH,用作為按位尋址的空間;用戶RAM區(qū)(30H-7FH),80B,用作普通RAM單元或堆棧。7程序狀態(tài)字寄存器PSW各位的定義是什么?答:程序狀態(tài)字寄存器PSW各位的定義如下:CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PPSW.7P

15、SW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0PSW.7:進/借位標志CY,加法有進位時置1,減法有借位時置1;PSW.6:輔助進位標志AC,加法運算低四位向高上四位有進位時置1;PSW.5、PSW.1:用戶標志位F0和用戶標志位F1,保存用戶的位數據;PSW.4、PSW.3:工作寄存器選擇控制位RS1和RS0,00至11分別選擇四組工作之一作為當前工作寄存器PSW.2 :溢出標志位OV,有符號數加、減運算結果有溢出或乘除上結果異常(乘法運算結果大于255即乘積在BA中,或除法運算除數為0)時置1PSW.0:奇偶標志位P,累加器A中1的個數為奇數時置1。8什么是時鐘周期?

16、什么是機器周期?什么是指令周期?當振蕩頻率為12MHz時,一個機器周期為多少微秒?答:時鐘周期又叫振蕩周期或拍,用P表示,是MCS-51單片機中最小的時間單位,在一個時鐘周期內,CPU完成一個最基本的動作。機器周期:由12個時鐘周期構成,完成一個基本操作指令周期:是執(zhí)行一條指令所需的時間,根據指令的復雜性,可由14個機器周期構成。當振蕩頻率為12MHz時,一個機器周期為1微秒。9P0、P1、P2和P3口的結構和功能分別是什么?答:P0口的每一位由1個鎖存器 、2個三態(tài)緩沖器 、1個輸出控制電路(非門 X、與門、電子開關MUX、輸出驅動電路構成,其功能既可以作為通用I/O口實現輸入/輸出功能,也

17、可作為單片機地址線的低8位和數據線實現外部擴展功能。在用作輸入輸出口時,需外接上拉電阻。P1口的每一位由1個鎖存器 、1個場效應管驅動器V和2個三態(tài)門緩沖器構成,其作用是用作輸入輸出口P2口的每一位由1個鎖存器、2個三態(tài)緩沖器、1個輸出控制單元、1個輸出驅動單元構成,其功能是用作輸入輸出口,或地址總線的高8位。P3口的每一位由1個鎖存器、2個三態(tài)緩沖器、1個第二功能控制單元 、1個輸出驅動單元構成,其作用是用作輸入輸出口或第二功能。1051單片機引腳ALE的作用是什么?當51不外接存儲器時,ALE上的輸出的脈沖頻率是多少?答:51單片機引腳ALE的作用是對外部存儲尋址時鎖存P0口輸出的低8位地

18、址,當51不外接存儲器時,ALE上的輸出的脈沖頻率是fosc/6。第3章 單片機的匯編語言與程序設計習題1MCS-51單片機有哪幾種尋址方式?適用于什么地址空間?答:MCS-51單片機有7種尋址方式:直接尋址、寄存器尋址、寄存器間接尋址、立即尋址、變址尋址、位尋址、相對尋址。直接尋址方式:操作數的地址由指令直接給出,適用于片內RAM的所有地址空間;如MOVA,68HMOVA,PSW寄存器尋址方式:指令給出的是寄存器的編碼,操作數在編碼指定的寄存器中,適用于片內00H至1FH的32個字節(jié),用R0,R7表示,通過PSW的RS1和RS0選擇組號確定對應32個字節(jié)中的其中8個,還有累加器A,以及乘除法

19、指令中的A和B寄存器,位尋址方式中的布爾累加器C;MOVA,R1MULABINCDPTR寄存器間接尋址方式:指令給出的是寄存器的編碼,操作數地址在編碼指定的寄存器中,適用于片內RAM的全部空間,其中52系列中的80H至FFH只能用寄存器間接尋址;如MOVA,R0MOVA,R1MOVXA,DPTR立即尋址方式:操作數本身在指令中直接,給出適用于用8位立即數對片內RAM所有地址單元賦值,也可用16位立即數對DPTR賦值; 如MOVA,#0E2HMOVDPTR,#2000H變址尋址方式:以DPTR或PC作為基地址寄存器,以累加器A作為變址寄存器,將基址寄存器與變址寄存器的內容相加形成操作數的實際地址

20、的一種尋址方式,變址尋址方式適用于程序存儲器ROM,僅有三條指令如下:MOVCA,A+DPTRMOVCA,A+PCJMPA+DPTR位尋址方式:指令中直接給出操作數所在單元的位地址,適用于片內RAM中地址20H至2FH中的16個字節(jié)中的128個位地址空間和80H至FFH中地址中可以被8整除的所有SFR中的每個位地址空間;如MOVC,7FHMOVF0,CMOVC,ACC.7相對尋址方式:為相對轉移指令而設,指令中直接給出轉移的相對偏移量,其轉移目標在當前指令-128至127字節(jié)范圍內的地址空間。如SJMPSTARTHERE:SJMPHERE;等效于:SJMP$2MCS-51單片機的PSW程序狀態(tài)

21、字中無ZERO(零)標志位,怎樣判斷某內部數據單元的內容是否為零?答:MCS-51單片機的PSW程序狀態(tài)字中無ZERO(零)標志位,判斷某內部數據單元的內容是否為零是能通過取數到A累加器,再判斷A中的每一位是否為零來確定其值是否為零。3編程將內部RAM的20H-30H單元內容清零。解:設一個片內RAM指針R0,先指向首地址20H,通過累加器A清零,然后采用間接尋址方式依次將A中的零值傳送到指針所指的片內RAM單元,每傳送一個字節(jié),地址指針加1,直到達到地址為30H或達到計數器規(guī)定的17個字節(jié)為止。程序1:MOVR0,#20H;設地址指針初值CLRA;累加器清0CONT:MOVR0,A;置0指針

22、所指單元INCR0;地址指針加1CJNER0,#31H,CONT;指針未超過終點則繼續(xù)SJMP$;暫停程序2:MOVR0,#20H;設地址指針初值CLRA;累加器清0MOVR7,#17;計數器賦初值,從20H到30H共17個字節(jié)CONT:MOVR0,A;置0指針所指單元INCR0;地址指針加1DJNZR7, CONT;計數器減1,非0,則繼續(xù)SJMP$;暫停4編程查找內部RAM的32H41H單元中是否有0AAH這個數據,若有這一數據,則將50H單元置為0FFH,否則將50H單元清零。解:設一個片內RAM指針R0,先指向首地址32H,比較R0與#0AAH,若相等,則退出循環(huán),給50H單元賦0FF

23、H,若不相等,則R0加1為繼續(xù)比較下一個字節(jié)做準備,直到達到地址為41H或達到計數器規(guī)定的16個字節(jié)為止還沒找到,則給50H單元賦00H程序1:MOVR0,#32H;設地址指針初值CONT:CJNER0,#0AAH,NEXT;比較查找值與指針所指單元的值,不相等轉移MOVA,#0FFH;相等,則準備好要賦的標志值0FFHSJMPDOWN;轉存到保存結果處NEXT:INCR0;修改地址指針CJNER0,#42H,CONT;若指針未越過終點,則繼續(xù)MOVA,#00H;查找失敗,則將00H存入結果標志單元DOWN:MOV50H,A;將比較結果標志存入50H單元SJMP$;暫停END程序2:MOVR7

24、,#16;計數器賦初值,從20H到30H共16個字節(jié)MOVR0,#32H;設地址指針初值CONT:CJNER0,#0AAH,NEXT;比較查找值與指針所指單元的值,不相等轉移MOVA,#0FFH;相等,則準備好要賦的標志值0FFHSJMPDOWN;轉存到保存結果處NEXT:INCR0;修改地址指針DJNZR7,CONT;計數器減1,非0,則繼續(xù)MOVA,#00H;查找失敗,則將00H存入結果標志單元DOWN:MOV50H,A;將比較結果標志存入50H單元SJMP$;暫停END5查找20H4FH單元中出現00H的次數,并將查找結果存入50H單元。解:從20H到4FH共48個字節(jié)MOVR7,#48

25、;字節(jié)計數器賦初值MOVR0,#20H;設地址指針初值CONT:CJNER0,#00H,NEXT;比較查找值與指針所指單元的值,不相等轉移INCR6;相等,0的個數計數器加1NEXT:INCR0;修改地址指針DJNZR7,CONT;計數器減1,非0,則繼續(xù)MOV50H,R6;保存O的個數計數值到50H單元SJMP$;暫停ENDEND6已知A=83H,R0=17H,(17H)=34H,寫出下列程序段執(zhí)行之后的A中的內容。 ANLA,#17H ORL17H,A XRLA,R0 CPLAEND答:ANLA,#17H;A=03HORL17H,A ;(17H)=0011 0100 0000 0011=0

26、011 0111 XRLA,R0;A= 0000 0011 0011 0111 =0011 0100 CPLA;A=1100 10117已知單片機的晶振頻率為12MHz,分別設計延時為0.1s、1s的子程序。答:已知單片機的晶振頻率為12MHz,則機器周期為1us,延時子程序是通過執(zhí)行指令序列中機器周期數來達到,如果要0.1s,即100ms,也就是100000us,所以需要機器周期數達到100000。要延時達到1S,可通過對延時為0.1秒的子程序調用10次來實現。DELAY100MS:MOV R6,#200 ;1個機器周期D1: MOV R7,#250 ;1個機器周期D2:NOP;1個機器周期

27、DJNZ R7,D2 ;2個機器周期,3*251=753DJNZ R6,D1 ;2個機器周期,(1+753+2)*132=99792RET ;2個機器周期,1+99792+2=99795,約100msDELAY1S:MOVR7,#10;計數10次1LOOP:ACALLDELAY100MS;延時100ms子程序99795+2DJNZR7,LOOP;未達到10次則繼續(xù)10*(2+99795+2)RET;返回2+10*(2+99795+2)=9979928內部RAM從20H單元開始處有一數據塊,以ODH為結束標志,試統(tǒng)計該數據塊的長度,將該數據塊送到外部數據存儲器7E01H開始的單元,并將長度存入7

28、E00H單元。解:從20H的指針用R0,從外部RAM7E01開始的指針用DPTR,計數器用R7MOVR7,#0;字節(jié)計數器賦初值MOVR0,#20H;設片內RAM地址指針初值MOVDPTR,#7E01H;設片外RAM地址指針初值CONT:MOVA,R0;取片內RAM中的一個字節(jié)MOVXDPTR,A;存入片外RAM指針所指單元INCR7;長度計數器加1INCR0;片內RAM地址指針加1INCDPTR;片外RAM地址指針加1CJNEA,#0DH,CONT;未達到結束標志MOVA,R7;取塊計數長度值MOVXDPTR,A;保存SJMP$;暫停END9內部RAM從DATA開始的區(qū)域中存放著10個單字節(jié)

29、十進制數,求其累加和,并將結果存入SUM和SUM+1單元。解:R7計數,R6保存累加和高8位,R0用作地址指針ORG0000HLJMPMAIN ORG100HSUMEQU30HDATAAEQU40HMAIN:MOVR7,#10;字節(jié)計數器賦初值MOVR0,#DATAA;設片內RAM地址指針初值CLRA;累加器清0MOVR6,A;累加結果的高8位CONT:ADDA,R0;加RAM中的一個字節(jié)到ACCDA AJNCNEXT;若無進位則不用管高8位INCR6;有進位,高8位加1NEXT:INCR0;片內RAM地址指針加1DJNZR7,CONT;未完繼續(xù)MOVSUM,A;保存低8位MOVSUM+1,R

30、6;保存高8位SJMP$;暫停END10內部RAM從DATA1和DATA2單元開始處存放著兩個等長的數據塊,數據塊的長度在LEN單元中。請編程檢查這兩個數據塊是否相等,若相等,將0FFH寫入RESULT單元,否則將0寫入RESULT單元。解:從DATA1開始的指針用R0,從DATA2開始的指針用R1,計數器用R7LENEQU10DATA1EQU30HDATA2EQU40HRESULTEQU50HMOVR7,#LEN;字節(jié)計數器賦初值MOVR0,#DATA1;設片內RAM地址指針初值MOVR1,#DATA2;設片外RAM地址指針初值CONT:MOVA,R0;取片內RAM R0所指的的一個字節(jié)MO

31、V7FH,R1;將R1所指單元內容取到片內RAM地址7FH中CJNEA,7FH,NOEQ;比較,不相等則結束INCR0;DATA1 RAM地址指針加1INCR1;DATA2 RAM地址指針加1DJNZR7,CONT;未完,繼續(xù)MOVA,#0FFH;相等,準備寫入FFHSJMPDOWN;轉寫入結果處NOEQ:MOVA,#0;不相等,準備寫入00HDOWN:MOVRESULT,A;保存比較結果標志SJMP$;暫停END11編制程序,將內部RAM中M1、M2、M3和M4單元中的無符號數xl、x2、x3和x4相加,并把和存入RO和R1(R0中為高8位)中。解:M1EQU30HM2EQU40HM3EQU

32、45HM4EQU4FHMOVA,M1;取第一個數ADDA,M2;與第二個數相加JNCNEXT1;如果無進位,則轉移至第三個相加MOVR0,#1;有進位,高8位置1NEXT1:ADDA,M3;與第三個數相加JNCNEXT2;沒有進位,則轉至第四個數相加INCR0;有進位,高8位加1NEXT2:ADDA,M4;與第四個數相加JNCNEXT3;沒有進位,則轉至結束INCR0;有進位,高8位再加1NEXT3:MOVR1,A;低8位保存到R1SJMP$;暫停END第4章 單片機的C51語言習題1C語言的優(yōu)點是什么?C程序的主要結構特點是什么?答:C語言是一種高級語言,學習比低級容易,不需要具體組織、分配

33、存儲器資源和處理端口數據,可以直接驅動單片機的所有資源。C程序以函數為單位,由一個主函數和若干個其他函數構成,主函數是程序的入口,其他函數由主函數直接或間接調用。程序可以由一個文件或多個文件組成。文件類型包括頭文件和C語言源文件,也可以是匯編語言文件,C程序可與匯編語言混合編程。2C51語言的變量定義包含哪些關鍵因素?為何這樣考慮?答:C語言的變量定義格式如下:存儲種類數據類型存儲類型變量名其中:存儲種類與標準C語言相同,包括:自動型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register)。數據類型除了包含標準C語言類型的字符型(char),整型(int),長

34、整型(long),浮點型(float),雙精度型(double)外,還有二進制位型(bit),特殊功能寄存器型(sfr),SFR可位尋址的位類型(sbit)。存儲類型包括:片內RAM區(qū)(data)、片內可位尋址區(qū)(bdata),片內RAM間接尋址區(qū)(idata),片外RAM頁尋址區(qū)(pdata),片外RAM區(qū)(xdata)、ROM區(qū)(code)。只所以比標準C語言多了存儲類型,就是因為MCS51單片機的存儲結構中有四個物理存儲空間(片內RAM、片內ROM,片外RAM,片外ROM),三個邏輯地址空間(片內RAM,片外RAM,ROM),而且有多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋址)所致

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

36、以實現優(yōu)勢互補。4指出下面程序的語法錯誤: #include main() a=C; int a=7,C delay(10) void delay(); cgar i; for(i=O; i=255; ”+”); 答: #include main() a=C;/a和C必須先定義才可使用 int a=7,C/缺分號,應該提在使用前說明 delay(10)/延時子程序必須先定義,或先有函數原型說明 void delay();/作為函數定義,有函數定義不能嵌套的問題,/即不能在一個函數內定義另一個函數,而且“”前不應有分號/作為函數原型說明,應該放在函數調用之前,且其后不應該接函數體 cgar i;

37、/字符型應該是unsigned char for(i=O; i=255; ”+”);/ ”+”應改成i+/主函數沒有結束,缺”5定義變量a,b,c,其中a為內部RAM的可位尋址區(qū)的字符變量,b為外部數據存儲區(qū)浮點型變量,c為指向 int 型 xdata 區(qū)的指針。答:char bdata a;float xdata b;int xdata *c;6編程將8051的內部數據存儲器20H單元和35H單元的數據相乘,結果存到外部數據存儲器中(任意位置)。解:方法一:用嵌入式匯編語言實現#includevoid main()#pragma asmMOVA,20HMOVB,35HMULABMOVDPTR

38、,#1234HMOVXDPTR,AINCDPTRMOVA,BMOVXDPTR,A#pragma endasm方法二:單用C語言編程實現#include#includeint movdata(char);void main() unsigned int xdata x; unsigned char *ptr,a,b; ptr=0x25; a=*ptr; ptr=0x30; b=*ptr; x=a*b;78051的片內數據存儲器25H單元中存放有一個010的整數,編程求其平方根(精確到5位有效數字),將平方根放到30H單元為首址的內存中。解:方法一:用C語言與匯編語言混合編程實現/用C語言編寫的主

39、函數MAIN.C#include#includechar getdata(char);void main() char a=0x25,c; float f; c=getdata(a); f=sqrt(c);用匯編語言編寫的取數據子函數,只有一個地址參數在R7中,返回值為指定地址單元中的內容,用R7返回主函數。PUBLIC _GETDATADESEGMENT CODERSEGDE_GETDATA:MOVA,R7 ;取地址參數MOVR0,A MOVA,R0MOVR7,A;返回地址單元中的內容EXIT: RETEND方法二:單用C語言編程實現/MAIN.C#include#includeint mo

40、vdata(char);void main() char n; char *ptr; float *ptr2; float f; ptr=0x25; n=*ptr; f=sqrt(n); ptr2=0x30; *ptr2=f;8將外部RAM 10H15H單元的內容傳送到內部RAM 10H15H單元。解:方法一:采用C語言與匯編語言混合編程/用C語言編寫的主函數MAIN.C#includechar movdata(char,char);void main() char a=0x10,b=0x06; movdata(a,b);用匯編語言編寫的移動數據子函數MOVDATA,其中第一個參數在R7中為首

41、地址,第二個參數在R5中為字節(jié)數PUBLIC _MOVDATADESEGMENT CODERSEGDE_MOVDATA:MOVA,R7 ;取參數MOVR0,A LOOP:MOVXA,R0MOVR0,ADJNZR5,LOOPEXIT: RETEND 方法二:單用C語言編程實現/MAIN.C#includeint movdata(char);void main() char n=6; char *ptr1=0x10; char xdata *ptr2; ptr2=0x20; while(n-) *ptr2+=*ptr1+; 9內部RAM 20H、21H和22H、23H單元分別存放著兩個無符號的16

42、位數,將其中的大數置于24H和25H單元。解:方法一:#includevoid main() unsigned int *ptr;/設置一個內部RAM指針 unsigned int x,y,z; ptr=0x20;/指向0x20單元 x=*ptr;/取第一個數 ptr=0x22;/指向0x22單元 y=*ptr;/取第二個數 z=(xy)?x:y;/將兩數中的較大者賦給z ptr=0x24;/指向地址為0x24的目標單元 *ptr=z;/將大數存入目標單元方法二:#include#includevoid main() unsigned int x,y,z; x=DBYTE0X20*256+DB

43、YTE0X21; y=DBYTE0X22*256+DBYTE0X23; z=(xy)?x:y;/將兩數中的較大者賦給z DBYTE0X24=z/256; DBYTE0X25=z%256;方法三:#includeunsigned int x _at_ 0x20;unsigned int y _at_ 0x22;unsigned int z _at_ 0x24;void main() z=(xy)?x:y;第4章 單片機的C51語言習題1C語言的優(yōu)點是什么?C程序的主要結構特點是什么?答:C語言是一種高級語言,學習比低級容易,不需要具體組織、分配存儲器資源和處理端口數據,可以直接驅動單片機的所有資

44、源。C程序以函數為單位,由一個主函數和若干個其他函數構成,主函數是程序的入口,其他函數由主函數直接或間接調用。程序可以由一個文件或多個文件組成。文件類型包括頭文件和C語言源文件,也可以是匯編語言文件,C程序可與匯編語言混合編程。2C51語言的變量定義包含哪些關鍵因素?為何這樣考慮?答:C語言的變量定義格式如下:存儲種類數據類型存儲類型變量名其中:存儲種類與標準C語言相同,包括:自動型(auto)、外部型(extern)、靜態(tài)型(static)、寄存器型(register)。數據類型除了包含標準C語言類型的字符型(char),整型(int),長整型(long),浮點型(float),雙精度型(d

45、ouble)外,還有二進制位型(bit),特殊功能寄存器型(sfr),SFR可位尋址的位類型(sbit)。存儲類型包括:片內RAM區(qū)(data)、片內可位尋址區(qū)(bdata),片內RAM間接尋址區(qū)(idata),片外RAM頁尋址區(qū)(pdata),片外RAM區(qū)(xdata)、ROM區(qū)(code)。只所以比標準C語言多了存儲類型,就是因為MCS51單片機的存儲結構中有四個物理存儲空間(片內RAM、片內ROM,片外RAM,片外ROM),三個邏輯地址空間(片內RAM,片外RAM,ROM),而且有多種尋址方式(直接尋址、間接尋址、頁面尋址、位尋址)所致,所以在定義變量時,要根據其所在位置和尋址方式明確指

46、定存儲類型。3C51與匯編語言的特點各有哪些?怎樣實現兩者的優(yōu)勢互補?答:C51是結構化語言,代碼緊湊;接近自然語言,程序可讀性強,易于調試、維護;庫函數豐富,編程工作量小,可使產品開發(fā)周期短;具有機器級控制能力,功能很強,適合于嵌入式系統(tǒng)開發(fā);匯編指令無關,易于掌握,上手快。匯編語言優(yōu)點是編寫的程序代碼精煉、執(zhí)行速度快,在相同功能下,匯編語言程序可能比C語言程序效率高。缺點是對程序員要求高,必須對單片機的硬件結構非常熟悉才能編程,不便于編寫比較復雜的程序??筛鶕枰獙σ髸r間性很強的代碼用匯編語言編寫,其它部分用C語言編寫,兩者混合編程就可以實現優(yōu)勢互補。4指出下面程序的語法錯誤: #inc

47、lude main() a=C; int a=7,C delay(10) void delay(); cgar i; for(i=O; i=255; ”+”); 答: #include main() a=C;/a和C必須先定義才可使用 int a=7,C/缺分號,應該提在使用前說明 delay(10)/延時子程序必須先定義,或先有函數原型說明 void delay();/作為函數定義,有函數定義不能嵌套的問題,/即不能在一個函數內定義另一個函數,而且“”前不應有分號/作為函數原型說明,應該放在函數調用之前,且其后不應該接函數體 cgar i;/字符型應該是unsigned char for(i

48、=O; i=255; ”+”);/ ”+”應改成i+/主函數沒有結束,缺”5定義變量a,b,c,其中a為內部RAM的可位尋址區(qū)的字符變量,b為外部數據存儲區(qū)浮點型變量,c為指向 int 型 xdata 區(qū)的指針。答:char bdata a;float xdata b;int xdata *c;6編程將8051的內部數據存儲器20H單元和35H單元的數據相乘,結果存到外部數據存儲器中(任意位置)。解:方法一:用嵌入式匯編語言實現#includevoid main()#pragma asmMOVA,20HMOVB,35HMULABMOVDPTR,#1234HMOVXDPTR,AINCDPTRMO

49、VA,BMOVXDPTR,A#pragma endasm方法二:單用C語言編程實現#include#includeint movdata(char);void main() unsigned int xdata x; unsigned char *ptr,a,b; ptr=0x25; a=*ptr; ptr=0x30; b=*ptr; x=a*b;78051的片內數據存儲器25H單元中存放有一個010的整數,編程求其平方根(精確到5位有效數字),將平方根放到30H單元為首址的內存中。解:方法一:用C語言與匯編語言混合編程實現/用C語言編寫的主函數MAIN.C#include#includech

50、ar getdata(char);void main() char a=0x25,c; float f; c=getdata(a); f=sqrt(c);用匯編語言編寫的取數據子函數,只有一個地址參數在R7中,返回值為指定地址單元中的內容,用R7返回主函數。PUBLIC _GETDATADESEGMENT CODERSEGDE_GETDATA:MOVA,R7 ;取地址參數MOVR0,A MOVA,R0MOVR7,A;返回地址單元中的內容EXIT: RETEND方法二:單用C語言編程實現/MAIN.C#include#includeint movdata(char);void main() ch

51、ar n; char *ptr; float *ptr2; float f; ptr=0x25; n=*ptr; f=sqrt(n); ptr2=0x30; *ptr2=f;8將外部RAM 10H15H單元的內容傳送到內部RAM 10H15H單元。解:方法一:采用C語言與匯編語言混合編程/用C語言編寫的主函數MAIN.C#includechar movdata(char,char);void main() char a=0x10,b=0x06; movdata(a,b);用匯編語言編寫的移動數據子函數MOVDATA,其中第一個參數在R7中為首地址,第二個參數在R5中為字節(jié)數PUBLIC _MO

52、VDATADESEGMENT CODERSEGDE_MOVDATA:MOVA,R7 ;取參數MOVR0,A LOOP:MOVXA,R0MOVR0,ADJNZR5,LOOPEXIT: RETEND 方法二:單用C語言編程實現/MAIN.C#includeint movdata(char);void main() char n=6; char *ptr1=0x10; char xdata *ptr2; ptr2=0x20; while(n-) *ptr2+=*ptr1+; 9內部RAM 20H、21H和22H、23H單元分別存放著兩個無符號的16位數,將其中的大數置于24H和25H單元。解:方法一:#includevoid main() unsigned int *ptr;/設置一個內部RAM指針 unsigned int x,y,z; ptr=0x20;/指向0x20單元 x=*ptr;/取第一個數 ptr=0x22;/指向0x22單元 y=*ptr;/取第二個數 z=(xy)?x:y;/將兩數中的較大者賦給z ptr=0x24;/指向地址為0x24的目標單元 *ptr=z;/將大數存入目標單元方法二:#include#includevoi

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!