北京吉利學院2017 —2018 學年第 二 學期期末考試試卷
學院 專業 班級
成績
姓名 學號 考場
《單片機原理及接口技術》B卷
(滿分:100分,考試時間:120 分鍾)
題號 |
一 |
二 |
三 |
四 |
總分 |
分數 |
|
|
|
|
|
本題得分 |
|
一、選擇題(本大題共20小題,每小題1.5分,共 30分)
1、MCS-51系列的單片機中片內RAM的字節大小可能的是( B )
A、128M B、128K C、128 D、64
2、C51語言提供的合法的數據類型關鍵字是( A )。
A、sfr B、BIT C、Char D、integer r
3、片內RAM的位尋址區,位於地址( B )處。
A、00H~1FH B、20H~2FH C、30H~7FH D 、80H~FFH
4、間接尋址片內數據存儲區(256字節),所用的存儲類型是( C )
A、data B、bdata C、idata D、xdata
5、MCS-51單片機上電復位的信號是( D )
A、下降沿 B、上升沿 C、低電平 D、高電平
6、可以將P1口的低4位全部置高電平的表達式是( B )
A、P1&=0x0f B、P1|=0x0f C、P1^=0x0f D、P1=~P1
7、一般單片機C51程序中,為了使程序執行的效率最高,函數參數傳遞時,函數參數的個數不能夠超過( C )
A、1 B、2 C、3 D、4
8、需要擴展一片外部RAM,大小32K字節,需要的地址線是( A )
A、15 B、14 C、13 D、12
9、如果將中斷優先級寄存器IP中,將IP設置為0x0A,則優先級最高的是( D )
A、外部中斷1 B、外部中斷0
C、定時/計數器1 D、定時/計數器0
10、單片機C51中用關鍵字( C )來改變寄存器組
A、interrupt B、unsigned C、using D、reentrant
11、紅外線遙控碼由發射電路經( A )Hz的載頻調制后發射。
A、38K B、 12M C、6M D、 32。768K
12、紅外線遙控碼的邏輯“0”與邏輯“1”是以脈沖的( B )決定的。
A、電平 B、寬度 C、頻率 D、形狀
13、DS1302內的時鍾寄存器是以( C )的數據格式定義的。
A、十進制 B、十六進制 C、BCD碼 D、壓縮BCD碼
14、設MCS-51單片機晶振頻率為12MHz,定時器作計數器使用時,其最高的輸入計數頻率應為( B )
A、2MHz B、1MHz C、500kHz D、250kHz
15、使用_nop_()函數時,必須包含的庫文件是( C )
A、reg52.h B、absacc.h C、intrins.h D、stdio.h
16、ADC0809的啟動轉換的信號是( D )
A、ALE B、EOC C、CLOCK D、START
17、線反轉法識別有效按鍵時,如果讀入的列線值不全為1,則說明( A )
A、有鍵被按下 B、一定只有一個鍵被按下
C、一定有多個鍵被按下 D、沒有鍵被按下
18、在單片機應用系統中,LED數碼管顯示電路通常有( C )顯示方式。
A、靜態 B、動態 C、靜態和動態 D、查詢
19、共陽極LED數碼管加反相器驅動時顯示字符“6”的段碼是(B )
A、0x06 B、0x7D C、0x82 D、0xFA
20、串行口每一次傳送( A )字符。
A、1個 B、1串 C、 1波特 D、1幀
本題得分 |
|
二、填空題(共11小題,每空1分,共20 分)
1、單片機中,常用作串入並出的芯片是 ,常用作232串口電平轉換芯片是_________。
2、在單片機硬件設計時,31腳一般要接 EA非 , 晶振在PCB設計中應盡量__靠近單片機。
3、單片機程序的入口地址是_____0000H_________,外部中斷0的入口地址是___0003H_____。
4、非編碼式鍵盤識別有效鍵盤的方法通常有兩種:一種是___逐列掃描法__另一種是 行列反轉法
5、若采用12MHz的晶體振盪器,則MCS-51單片機的振盪周期為_______1/12us______,機器周期為 1us 。
6、LCD1602常用的寫子函數有 ______________和 兩種。
7、KeiL C51軟件中,工程文件的擴展名是 .UV2 ,編譯連接后生成可燒寫的文件擴展名是 .hex 。
8、字符型LCD標准西文字庫采用是 ASCii 編碼方式。
9、若只需要開串行口中斷,則IE的值應設置為 90H ,若需要將外部中斷0設置為下降沿觸發,則執行的語句為___IT0=1____。
10、一個函數由兩部分組成,即____函數頭__和__函數體___。
11、DS1302是雙電源工作方式,第二電源的作用是____________________________。
本題得分 |
|
三、程序分析與填空題(每空3分,共15分)
1、下面的while循環執行了 無限 次空語句。
i = 3;
while(i! = 0);
2、//該程序功能為點亮第一個發光二極管
#include <reg51.h> //51系列單片機頭文件
sbit led1=P1^0; //聲明單片機P1口的第一位為led1
void main() //主函數
{
led1=0; /*點亮第一個發光二極管*/
}
3、將下面的程序補充完整:
#include<reg51.h>
_void delay(unsigned int i)_________;
void main()
{
while(1)
{
P1 = 0xFF;
________delay__(1200);
P1 = 0x00;
______delay____(1200);
}
}
//函數名:delay
//函數功能:實現軟件延時
//形式參數:整型變量i,控制循環次數
//返回值:無
void delay(unsigned int i)
{
unsigned int k;
for(k = 0;k < i;k ++);
}
四.簡答題(前兩題各8分,第3小題9分,第4小題10分,共35分)
- 中斷響應過程中,為什么通常要保護現場?需要保護哪些內容?如何保護?
因為一般主程序和中斷服務程序都可能會用到累加器,PSW寄存器及其他一些寄存器。CPU在進入中斷服務程序后,用到上述寄存器時,就會破壞它原來存在寄存器中的內容;一旦中斷返回,將會造成主程序的混亂。因而在進入中斷服務程序后,一般要先保護現場,然后再執行中斷處理程序,在返回主程序以前再恢復現場。
保護方法一般是把累加器、PSW寄存器及其他一些與主程序有關的寄存器壓入堆棧。在保護現場和恢復現場時,為了不使現場受到破壞或者造成混亂,一般規定此時CPU不響應新的中斷請求。這就要求在編寫中斷服務程序時,注意在保護現場之前要關中斷,在恢復現場之后開中斷。如果在中斷處理時允許有更高級的中斷打斷它,則在保護現場之后再開中斷,恢復現場之前關中斷。
- 51單片機外擴的程序存儲器和數據存儲器地址空間相同,但不會發生數據沖突,為什么?
51的指令系統設計了不同的數據傳送指令以區別這4個不同的邏輯空間:CPU訪問內、片外ROM指令用MOVC,訪問片外RAM指令用MOVX,訪問片內RAM指令用MOV。 程序存儲器用於存放編好的程序和表格常數。程序通過16位程序計數器尋址,尋址能力為64KB。這使得指令能在64KB的地址空間內任意跳轉,但不能使程序從程序存儲器空間轉移到數據存儲器空間。 實際上,當引腳EA接高電平時,8051的程序計數器PC執行片內ROM中的程序,當指令地址超過片內ROM地址時,就自動轉向片外ROM中去取指令。當引腳EA接低電平(接地)時,8051片內ROM不起作用,CPU只能從片外ROM中取指令,地址可以從0000H開始編址。8051從片內程序存儲器和片外程序存儲器取指時的執行速度相同。 用P0口作地址/數據復用總線,用P2口的口線作高位地址線,最多可以擴展64KB的存儲器。控制信號線包括:使用ALE作為地址鎖存的選通信號,以實現低8位地址的鎖存;以PSEN信號作為擴展程序存儲器的讀選通信號;以EA信號作為內、外程序存儲器的選擇信號;以EA和作為擴展數據存儲器和I/O端口的讀、寫選通信號。執行MOVX指令時,RD和WR信號分別自動有效。片外數據存儲器RAM的讀和寫由8051的RD (P3.7)和WR(P3.6)信號控制,而片外程序存儲器的輸出允許(OE)由讀選通PSEN信號控制。盡管片外數據存儲器和片外程序存儲器共處同一地址空間,但由於控制信號及使用的數據傳送指令不同,故不會發生總線沖突。
- 在有串行通信時,定時器/計數器1的作用是什么,怎樣確定串行口的波特率?
用來實現控制串行通信速率的,也就是方式1,方式3時的波特率是由T1的溢出率來實現控制的。
4.已知單片機系統晶振頻率為6MHz,若要求定時值為10ms時,定時器T0工作在方式1時,定時器T0對應的初值是多少?TMOD的值是多少?TH0=?TL0=?(寫出步驟)
(1)T0:定時方式,工作在方式 1。方式字 TMOD=01H
(2) fosc=6MHz,16 位計數器,10ms 定時,設計數初值為 a,(5 t=12/ fosc*(216 - a) , 10*103=12/6 *(216 - a) ,a=60536=EC78H , 即 TH0=ECH TL0=78H 所以:TMOD=01H TH0=ECH TL0=78H
一、選擇題(本大題共20小題,每小題1.5分,共 30分)
- 51單片機的CPU主要由( A )組成。
A、運算器、控制器 B、加法器、寄存器
C、運算器、加法器 D、運算器、譯碼器
- 程序是以(C )形式存放在程序存儲器中。
A、C語言源程序 B、匯編程序
C、二進制編碼 D、BCD碼
- 單片機8031的EA(——)引腳( A )。
A、必須接地 B、必須接+5V電源
C、可懸空 D、以上三種視需要而定
- 單片機上電復位后,PC的內容為(A )。
A、0x0000 B、0x0003 C、0x000B D、0x0800
- 外部擴展存儲器時,分時復用做數據線和低8位地址線的是( A )
A、P0口 B、P1口 C、P2口 D、P3口
- 單片機的ALE引腳是以晶振振盪頻率的(C )固定頻率輸出正脈沖,因此它可作為外部時鍾或外部定時脈沖使用。
A、1/2 B、1/4 C、1/6 D、1/12
- 下面敘述不正確的是( C )。
A、一個C源程序可以由一個或多個函數組成。
B、一個C源程序必須包含一個主函數main( )。
C、在C程序中,注釋說明只能位於一條語句的后面。
D、C程序的基本組成部分單位是函數。
8、在C語言中,當do-while語句中的條件為( A)時,循環結束。
A、0 B、false C、true D、非0
9、下面的while循環執行了(A )次空語句。
While(i=3);
A、無限次 B、0次 C、1次 D、2次
10、C程序總是從(A )開始執行的。
A、主函數 B、主程序 C、子程序 D、主過程
11、在C51程序中常常把( D)作為循環體,用於消耗CPU運行時間,產生延時效果。
A、賦值語句 B、表達式語句 C、循環語句 D、空語句
12、在單片機應用系統中,LED數碼管顯示電路通常有(C )顯示方式。
A、靜態 B、動態 C、靜態和動態 D、查詢
13、共陽極LED數碼管加反相器驅動時顯示字符“6”的段碼是( B )
A、0x06 B、0x7D C、0x82 D、0xFA
14、51單片機的定時器T1用做定時方式時,采用工作方式1,則工作方式控制字為( A )
A、0x01 B、0x05 C、0x10 D、0x50
15、啟動T0開始計數是使TCON的(B )。
A、TF0位置1 B、TR0位置1 C、TR0位清0 D、TR1位清0
16、在定時/計數器的計數初值計算中,若設最大計數值為M,對於工作方式1下的M值為(D)。
A、M=213 = 8192 B、M=28 = 256
C、M=24 = 16 D、M=216 = 65536
17、51單片機的串行口是( B )。
A、單工 B、全雙工 C、半雙工 D、並行口
18、表示串行數據傳輸速率的指標為( D )。
A、USART B、UART C、字符幀 D、波特率
19、單片機輸出信號為( B )電平。
A、RS-232C B、TTL C、RS-449 D、RS-232
20、串行口的發送數據和接收數據端為( A )。
A、TXD和RXD B、TI和RI C、TB8和RB8 D、REN
二、填空題(共7小題,每空1 分,共20 分)
1、除了單片機和電源外,單片機最小系統包括_時鍾_電路和__復位 _電路。
2、MCS-51系列單片機的存儲器主要有4個物理存儲空間,即____片內數據存儲器_____、____片外數據存儲器_____、______片內程序存儲_____、片外程序存儲器。
3、當振盪脈沖頻率為12MHz時,一個機器周期為______1微秒______;當振盪脈沖頻率為6MHz時,一個機器周期為_____2微秒____。
4、while語句和do-while語句的區別在於:__do-while__語句是先執行、后判斷;而__while____語句是先判斷、后執行。
5、結構化程序設計的三種基本結構是____順序__、___選擇___、______循環____。
6、51單片機的定時器的內部結構由以下四部分組成:______TMON___、____TCON___、_____T1_______和____T0_____。
7、A/D轉換器的作用是將__模擬__量轉為__數字_量;D/A轉換器的作用是將___數字___量轉為___模擬____量。
三、簡答題(本大題共4小題,第1、2小題各8分,第3小題9分,第4小題10分,共 35分)
1、在使用8051的定時器/計數器前,應對它進行初始化,其步驟是什么?
在書上
2、在有串行通信時,定時器/計數器1的作用是什么,怎樣確定串行口的波特率?
3、如何消除鍵盤的抖動?
4、8051引腳有多少I/O線?他們和單片機對外的地址總線和數據總線有什么關系?地址總線和數據總線各是幾位?
#include "reg52.h" #include<intrins.h> void delay(int i) { while(i--); } void main() { char i; P2=0xfe; delay(50000); while(1) { for(i=0;i<7;i++) { P2=_crol_(P2,1); delay(50000); } for(i=0;i<7;i++) { P2=_cror_(P2,1); delay(50000); } } }
#include "reg52.h" sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; int code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值 void delay(int i) { while(i--); } void DigDisplay() { char i; for(i=0;i<8;i++) { switch(i) //位選,選擇點亮的數碼管, { case(0): LSA=0;LSB=0;LSC=0; break;//顯示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//顯示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//顯示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//顯示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//顯示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//顯示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//顯示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//顯示第7位 } P0=smgduan[i];//發送段碼 delay(100); //間隔一段時間掃描 P0=0x00;//消隱 } } void main() { while(1) { DigDisplay(); //數碼管顯示函數 } }