




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、一、單項選擇題:(每小題2分,共10分。在每小題備選答案中選出一個正確答案,并將正確答案的代碼填在題中括號內(nèi)。選對得分,不選、選錯均不得分。)1利用下列( D )關鍵字可以改變工作寄存器組A、interruptB、sfrC、while D、using2C51中一般指針變量占用( C )字節(jié)存儲。A、一個 B、兩個
2、; C、三個 D、四個3使用宏來訪問絕對地址時,一般需包含的庫文件是(B)A、 B、 C、 D、4執(zhí)行#define PA8255 XBYTE0x3FFC;PA8255=0x7e;后存儲單元0x3FFC的值是(A )A、Ox7e B、8255H C、未定
3、 D、7e5設有int i;則表達式i=1,+i,+i|+i,i的值為 (C)A、1 B、2 C、3 D、46設有int a =10,11,12,*p=&a0;則執(zhí)行完*p+;*p+=1;后a0,a1,a2的值依次是 (C)A、10,11,12 B、11,12,12 C、10,12,12 D、11,11,127設有int i;則表達式i=1,+i,i|+i,i的值為 (B)A、1 B、2 C、3 D、4二、判斷題:(每小題1分,共10分。正確的在括號內(nèi)打“”,錯誤的打“×”。判對得分,不判、判錯均不得分。)1若一個函數(shù)的返回類型為void,則表示其沒有返回值。(
4、 )2特殊功能寄存器的名字,在C51程序中,全部大寫。()3“sfr”后面的地址可以用帶有運算的表達式來表示。( × )4#include <>與#include “”是等價的。()5sbit不可以用于定義內(nèi)部RAM的可位尋址區(qū),只能用在可位尋址的SFR上。(×)6Continue 和break都可用來實現(xiàn)循環(huán)體的中止。( × )7若一個函數(shù)的返回類型為void,則表示其沒有返回值。( )8所
5、有定義在主函數(shù)之前的函數(shù)無需進行聲明。( × )9int i,*p=&i;是正確的C說明。( )107&3+12的值是15。( × )11一個函數(shù)利用return不可能同時返回多個值。( )三、填空(每空1分,共20分。在空白處填上正確的內(nèi)容)1KeiL C51軟件中,工程文件的擴展名是_UV2_,編譯連接后生成可燒寫的文件擴展名是_HEX_。2C51支持的指針有 一般指針 和 存儲器指針 。3C51中,沒有專門的循環(huán)語
6、句,我們可以用函數(shù)_crol_完成一個字節(jié)的循環(huán)左移,用_irol_完成二個字節(jié)的循環(huán)左移。4 函數(shù) 是C語言的基本單位。5C語言中輸入和輸出操作是由庫函數(shù) scanf 和 printf 等函數(shù)來完成。6若有說明int i,j,k;則表達式i=10,j=20,k=30,k*=i+j的值為_ 900_。7 數(shù)組 是一組有固定數(shù)目和相同類型成分分量的有
7、序集合。8變量的指針就是變量的 地址 ;指針變量的值是 指針 。9在C語言中,把多個不同類型的變量結(jié)合在一起形成的一個組合型變量,稱為 結(jié)構變量 ,簡稱 結(jié)構 。10C51的數(shù)據(jù)類型有 基本類型 、 構造類型 、 指針類型 、 空類型 。11C51的基本數(shù)據(jù)類型有 位型 、 字符型 、 整形 、 長整形 、 浮點型 、 雙精度浮點型 。12C51的構造數(shù)據(jù)類型有 數(shù)組類型 、 結(jié)構類型 、 共用體型 、 梅舉型 。13C51的存儲類型有 data 、 bdata 、 idata 、 pdata 、 xdata 、 code 。14C51的存儲模式有 SMALL 、 COMPACT 和 LARG
8、E 。15C51程序與其他語言程序一樣,程序結(jié)構也分為 順序結(jié)構 、 選擇結(jié)構(或分支結(jié)構) 、 循環(huán)結(jié)構 三種。16數(shù)組的一個很重要的用途就是 查表 。17四、問答題(共20分)1簡述C51語言和匯編語言的比較(5分)使用C51語言進行嵌入式系統(tǒng)的開發(fā),有著匯編語言所不可比擬的優(yōu)勢: 編程調(diào)試靈活方便; 生成的代碼編譯效率高; 模塊化開發(fā); 可移植性好; 便于項目的維護;2簡述單片機的C語言的特點(7分)單片機的C語言的特點主要體現(xiàn)在以下幾個方面: 無需了解機器硬件及其指令系統(tǒng),只需初步了解MCS-51的存儲器結(jié)構; C51能方便的管理內(nèi)部寄存器的分配、不同存儲器的尋址和數(shù)據(jù)類型等細節(jié)問題,
9、但對硬件控制有限;而匯編語言可以完全控制硬件資源; C51在小應用程序中,產(chǎn)生的代碼量大,執(zhí)行速度慢;但在較大的程序中代碼效率高; C51程序由若干函數(shù)組成,具有良好的模塊化結(jié)構,便于改進和擴充; C51程序具有良好的可讀性和可維護性;而匯編語言在大應用程序開發(fā)中,開發(fā)難度增加,可讀性差; C51有豐富的庫函數(shù),可大大減少用戶的編程量,顯著縮短編程與調(diào)試時間,大大提高軟件開發(fā)效率; 使用匯編語言編制的程序,當機型改變時,無法直接移植使用,而C語言程序是面向用戶的程序設計語言,能在不同機型的機器上運行,可移植性好。3哪些變量類型是51單片機直接支持的(5分)答:C51編譯器支持的數(shù)據(jù)類型有:位型
10、(bit)、無符號字符型(unsigned char)、有符號字符型(signed char)、無符號整型(unsigned int)、有符號整型(signed int)、無符號長整型(unsigned long)、有符號長整型(signed long)、浮點型(float)和指針型等。C51編譯器支持的數(shù)據(jù)類型、長度和值域如表1-1所示。表1-1 C51的數(shù)據(jù)類型數(shù)據(jù)類型長度/bit長度/byte值域bit10,1unsigned char810255signed char81-128127unsigned int162065 535signed int162-32 76832 767uns
11、igned long32404 294 967 295signed long324-2 147 483 6482 147483 647float324±1176E-38±340E+38(6位數(shù)字)double648±1176E-38±340E+38(10位數(shù)字)一般指針243存儲空間 065 5354簡述C51的數(shù)據(jù)存儲類型(10分)答:我們都知道,8051單片機存儲區(qū)可分為內(nèi)部數(shù)據(jù)存儲區(qū)、外部數(shù)據(jù)存儲區(qū)以及程序存儲區(qū)。8051單片機內(nèi)部的數(shù)據(jù)存儲區(qū)是可讀寫的,8051派生系列最多可有256字節(jié)的內(nèi)部數(shù)據(jù)存儲區(qū),其中低128字節(jié)可直接尋址,高128字節(jié)(
12、從0x80到0xFF)只能間接尋址,從20H開始的16字節(jié)可位尋址。內(nèi)部數(shù)據(jù)區(qū)可分為3個不同的存儲類型:data、idata和bdata。外部數(shù)據(jù)區(qū)也是可讀寫的,訪問外部數(shù)據(jù)區(qū)比訪問內(nèi)部數(shù)據(jù)區(qū)慢,因為外部數(shù)據(jù)區(qū)是通過數(shù)據(jù)指針加載地址來間接訪問的。C51提供兩種不同的存儲類型xdata和pdata訪問外部數(shù)據(jù)。程序存儲區(qū)是只能讀不能寫。程序存儲區(qū)可能在8051單片機內(nèi)部或者在外部或者內(nèi)外都有,這由8051單片機的硬件決定。C51提供了code存儲類型來訪問程序存儲區(qū)。每個變量可以明確地分配到指定的存儲空間,對內(nèi)部數(shù)據(jù)存儲器的訪問比對外部數(shù)據(jù)存儲器的訪問快許多,因此應當將頻繁使用的變量放在內(nèi)部存儲
13、器中,而把較少使用的變量放在外部存儲器中。各存儲區(qū)的簡單描述如表1-2所示。表1-2 C51存儲類型與8051存儲空間的對應關系存儲區(qū)描述DATA片內(nèi)RAM的低128字節(jié),可在一個周期內(nèi)直接尋址BDATA片內(nèi)RAM的位尋址區(qū),16字節(jié)IDATA片內(nèi)RAM的256字節(jié),必須采用間接尋址XDATA外部數(shù)據(jù)存儲區(qū),使用DPTR間接尋址PDATA外部存儲區(qū)的256個字節(jié),通過P0口的地址對其尋址。使用MOVX Ri,需要兩個指令周期CODE程序存儲區(qū),使用DPTR尋址。以上介紹的是C51的數(shù)據(jù)存儲類型,C51存儲類型及其大小和值域如表1-3所示。表1-3 C51存儲類型及其大小和值域存儲類型長度/bi
14、t長度/byte值域data810255idata810255pdata810255code162065 535xdata162065 5355簡述C51對51單片機特殊功能寄存器的定義方法(5分)答:MCS-51通過其特殊功能寄存器(SFR)實現(xiàn)對其內(nèi)部主要資源的控制。MCS-51單片機有21個SFR,有的單片機還有更多的SFR,它們分布在片內(nèi)RAM的高128字節(jié)中,其地址能夠被8整除的SFR一般可以進行位尋址。關于MCS-51單片機的特殊功能寄存器參看附錄A。對SFR只能用直接尋址方式訪問。C51允許通過使用關鍵字sfr、sbit或直接引用編譯器提供的頭文件來實現(xiàn)對SFR的訪問。 (1)使
15、用關鍵字定義sfr為了能直接訪問特殊功能寄存器SFR,C51提供了一種自主形式的定義方法。這種定義方法與標準的C語言不兼容,只適用于對8051系列單片機進行C編程。這種定義的方法是引入關鍵字“sfr”,語法如下:sfr 特殊功能寄存器名字 = 特殊功能寄存器地址;如:sfr SCON=0x98;/*串口控制寄存器地址98H*/sfr TMOD=0X89;/*定時器/計數(shù)器方式控制寄存器地址89H*/ (2)通過頭文件訪問SFR 8051系列單片機的寄存器數(shù)量與類型是極不相同的,因此對單片機特殊功能寄存器的訪問可以通過對頭文件的訪問來進行。 為了用戶處理方便,C51編譯器把MCS-51單片機的常
16、用的特殊功能寄存器和特殊位進行了定義,放在一個“”或“”的頭文件中。當用戶要使用時,只需要在使用之前用一條預處理命令“#include <>”把這個頭文件包含到程序中,然后就可以使用特殊功能寄存器名和特殊位名稱了。用戶可以通過文本編輯器對頭文件進行增減。 (3)SFR中位定義在8051單片機的應用問題中,經(jīng)常需要單獨訪問SFR中的位,C51的擴充功能使之成為可能,使用關鍵字“sbit”可以訪問位尋址對象。特殊位(sbit)的定義,像SFR一樣不與標準C兼容。與SFR定義一樣,用關鍵字“sbit”定義某些特殊位,并接受任何符號名,“=”號后將絕對地址賦給變量名。這種地址分配有三種方法
17、:第一種方法:sbit 位名=特殊功能寄存器名位置;當特殊功能寄存器的地址為字節(jié)(8位)時,可使用這種方法。特殊功能寄存器名必須是已定義的SFR的名字?!啊焙蟮摹拔恢谩闭Z句定義了基地址上的特殊位的位置。該位置必須是07的數(shù)。如:第二種方法:sbit 位名=字節(jié)地址位置;這種方法是以一個整常數(shù)為基地址,該值必須在0x800xFF之間,并能被8整除,確定位置的方法同上。第三種方法:sbit 位名=位地址;這種方法將位的絕對地址賦給變量,地址必須在0x800xFF之間。6C51 的 data、bdata、idata 有什么區(qū)別(6分)答:data、bdata、idata是表明數(shù)據(jù)的存儲類型,data
18、是指片內(nèi)RAM的低128字節(jié),可在一個周期內(nèi)直接尋址;bdata是指片內(nèi)RAM的位尋址區(qū),16字節(jié);idata是指片內(nèi)RAM的256字節(jié),必須采用間接尋址。7C51中的中斷函數(shù)和一般的函數(shù)有什么不同(6分)答:C51編譯器允許用C51創(chuàng)建中斷服務函數(shù),中斷函數(shù)是由中斷系統(tǒng)自動調(diào)用的。中斷函數(shù)的定義格式為:函數(shù)類型 函數(shù)名 interrupt n using n其中:interrupt和using為關鍵字;interrupt后面的n 為中斷源的編號,即中斷號;using后面的n所選擇的寄存器組,取值范圍為03。定義中斷函數(shù)時,using是一個選項,可以省略不用。如果不用using選項,則由編譯器
19、選擇一個寄存器組作為絕對寄存器組。8051的中斷過程通過使用interrupt關鍵字和中斷號(031)來實現(xiàn),中斷號告訴編譯器中斷函數(shù)的入口地址。8按照給定的數(shù)據(jù)類型和存儲類型,寫出下列變量的說明形式(6分)(1)在data區(qū)定義字符變量val1答:char data vall;(2)在idata區(qū)定義整型變量val2 答:int idata val2;(3)在xdata區(qū)定義無符號字符型數(shù)組val34。答:unsigned xdata val34;(4)在xdata區(qū)定義一個指向char類型的指針px。答:char xdata *px;(5)定義可位尋址變量flag。答:bit flag;(
20、6)定義特殊功能寄存器變量P3。答:Sfr P3=0xB0;9什么是重入函數(shù)重入函數(shù)一般什么情況下使用,使用時有哪些需要注意的地方答: 多個函數(shù)可以同時使用的函數(shù),稱為重入函數(shù)。(6分)通常情況下,C51函數(shù)不能被遞歸調(diào)用,也不能應用導致遞歸調(diào)用的結(jié)構。有此限制是由于函數(shù)參數(shù)和局部變量是存儲在固定的地址單元中。重入函數(shù)特性允許你聲明一個重入函數(shù)。即可以被遞歸調(diào)用的函數(shù)。重入函數(shù)可以被遞歸調(diào)用,也可以同時被兩個或更多的進程調(diào)用。重入函數(shù)在實時應用中及中斷服務程序代碼和非中斷程序代碼必須共用一個函數(shù)的場合中經(jīng)常用到。10如何消除鍵盤的抖動(5分)答:由于按鍵是機械開關結(jié)構,所以當用手按下其中一個鍵
21、時,往往會出現(xiàn)所按鍵在閉合位置和斷開位置之間發(fā)生跳幾下后才會穩(wěn)定到閉合狀態(tài)的情況。在釋放一個鍵時,也會出現(xiàn)類似的情況,這就是鍵的抖動,抖動的持續(xù)時間不一,但通常不會大于10ms。若抖動問題不解決,就會引起對閉合鍵的多次讀入。對于鍵抖動最方便的解決方法就是當發(fā)現(xiàn)有鍵按下后,不是立即進行掃描,而是延時大約10ms后再進行。由于一個鍵按下的時間一般會持續(xù)上百毫秒,所以延遲10ms后再掃描處理并不遲。11在使用8051的定時器/計數(shù)器前,應對它進行初始化,其步驟是什么(4分)答: (1)確定T/C的工作方式編程TMOD寄存器;
22、160; (2)計算T/C中的計數(shù)初值,并裝載到TH和TL; (3)T/C在中斷方式工作時,須開CPU中斷和源中斷編程IE寄存器; (4)啟動定時器/計數(shù)器編程TCON中TR1或TR0位。五、程序分析題(10分)1設單片機時鐘頻率為6MHz,分析下面程序?qū)崿F(xiàn)什么功能#include ""sbit P10=P10;void main()TMOD=0x01;TH0=(65536-12500)/256;TL0=(65536-1
23、2500)%256;ET0=1;EA=1;TR0=1;while(1); void T0_srv(void)interrupt 1 using 1TH0=(65536-12500)/256;TL0=(65536-12500)%256;P10=!P10;解:引腳輸出50ms周期的方波。2分析下面程序?qū)崿F(xiàn)什么功能#include ""#include ""void init_ser()SCON = 0x50; /*SCON:工作模式1,8-bit UART,允許接收*/TMOD |= 0x20; /*TMOD:定時器T1,工作模式2, 8位自動重載方式*/T
24、H1 = 0xf3; /*當波特率為2400時,定時器初值*/TR1 = 1; /*定時器T1開始運行*/TI = 1; /*允許發(fā)送數(shù)據(jù)*/long factorial(int n) reentrantlong result;if(n=0)result=1;elseresult=n*factorial(n-1);return result;void main()int j;long tmp;long (*p)(int n);/*函數(shù)指針變量定義*/init_ser();p=(void*)factorial;/*函數(shù)指針變量p指向factorial()函數(shù)*/for(j=0;j<11;+
25、j)tmp=(*p)(j);/*用指針變量p調(diào)用factorial()函數(shù)*/printf("%d!=%ldn",j,tmp);for(;);解:輸出010的階乘。六、編程題(30分)1在8051系統(tǒng)中,已知振蕩頻率是12MHz,用定時器/計數(shù)器T0實現(xiàn)從產(chǎn)生周期是2s的方波,試編程。(10分)解:#include <>sbit P1_1=P11;/定義位變量unsigned char i;/定時次數(shù)void timer0over(void); /函數(shù)聲明(定時50ms函數(shù))void main( ) /主函數(shù) i=0; TMOD=0x01;/定時器T0定時50m
26、s,方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1;/開T0 for(;) if(TF0) timer0over( ); void timer0over(void) TH0=(65536-50000)/256; TL0=(65536-50000)%256; TF0=0; i+; if(i=20) /20次到了嗎 i=0; P1_1=!P1_1; 2在8051系統(tǒng)中,已知振蕩頻率是12MHz,用定時器/計數(shù)器T1實現(xiàn)從產(chǎn)生高電平寬度是10ms,低電平寬度是20ms的矩形波,試編程。(10分)解:#include <>un
27、signed char i;sbit P1_1=P11;void main( )/主函數(shù) i=0; TMOD=0x10;/T1定時方式1,定時時間10ms TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET1=1; TR1=1; while(1);void timer1_int(void) interrupt 3 TH0=(65536-10000)/256; TL0=(65536-10000)%256; i+; if(i=1) P1_1=0; else if(i=3) i=0; P1_1=1; 3用單片機和內(nèi)部定時器來產(chǎn)生矩形波,要求頻
28、率為100Hz,占空比為2:1,設單片機的時鐘頻率為12MHz,寫出有關程序。(10分)解:#include <>unsigned char i;sbit P1_1=P11;void main() i=0; TMOD=0x10; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET1=1; TR1=1; while(1);void timer1_int(void) interrupt 3 TH0=(65536-10000)/256; TL0=(65536-10000)%256; i+; if(i=2) P1_1=0; else
29、 if(i=3) i=0; P1_1=1; 4如圖1-1所示,單片機P1口的和各接一個開關S1、S2,、和各接一只發(fā)光二極管。由S1和S2的不同狀態(tài)來確定哪個發(fā)光二極管被點亮,如表1-4所示。(10分)表1-4 S1、S2與二極管的關系S2S1被點亮的二極管00VD101VD210VD311VD4解:(一)程序如下:#include<>void main() char a; a=P1/*讀P1口*/ a=a&0x03;/*屏蔽高6位*/ if(a=0) P1=0x83; else if a=1 P1=0x43; else if a=2 P1=0x23; else P1=0x
30、13;(二)程序如下:#include “”void main()char a;a=P1;/*讀P1口*/a=a&0x03;/*屏蔽高6位*/switch (a) case0:P1=0x83;break; case1:P1=0x43;break; case2:P1=0x23;break;case3:P1=0x13; (三)程序如下:#include “”void main() char a; loop:a=P1;a=a&0x03;/*屏蔽高6位*/switch (a)case0:P1=0x83;break;case1:P1=0x43;break;case2:P1=0x23;break;case3:P1=0x13;goto loop;(四)程序如下:#include “”void main()char a;while (1) a=P1; a=a&0x
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)建設合同范本
- 分期合同范本模板
- 廠子務工合同范例
- 吊車協(xié)議合同范本
- 廈門合同范例范例
- 制造加工企業(yè)勞動合同范例
- 保供煤合同范例
- 出售商用烤箱合同范例
- 沙子承包的合同范本
- 同意賣公司股合同范例
- 醫(yī)療廢物管理組織機構架構圖
- cjj/t135-2009《透水水泥混凝土路面技術規(guī)程》
- 短時耐受電流
- 社保人事專員績效考核表
- 河北省自然科學基金資助項目申請書模板
- 上海世博會對上海城市競爭力影響的評估模型
- 常用標準波導和法蘭尺寸
- 河南書法家協(xié)會入會申請表
- 鄉(xiāng)村獸醫(yī)登記申請表(共1頁)
- 旋挖樁主要施工方法及技術措施(全護筒)
- GB∕T 12810-2021 實驗室玻璃儀器 玻璃量器的容量校準和使用方法
評論
0/150
提交評論