單片機(jī)復(fù)習(xí)資料
選擇(20)、簡(jiǎn)答(40)、程序填空(30)、設(shè)計(jì)(10)
整理人: 張鵬
一. 選擇題
-
C語(yǔ)言中最簡(jiǎn)單的數(shù)據(jù)類(lèi)型包括 (整型、實(shí)型、字符)
-
51單片機(jī)時(shí)序單位從 小 到 大 是
2 拍節(jié) —>1狀態(tài)
6狀態(tài)—>機(jī)器周期
1—4機(jī)器周期—> 指令周期
-
七段共陰極數(shù)碼管顯示字符‘A’、’H’,’L’,段碼應(yīng)為( )。
-
MCS-51單片機(jī)內(nèi)部有 2 個(gè)16位定時(shí)器/計(jì)數(shù)器。
-
單片機(jī)程序存儲(chǔ)器的尋址范圍是由程序計(jì)數(shù)器 PC 的位數(shù)決定的,MCS-51的PC為 16 位,其尋址范圍是 64K 。
-
控制串行口工作方式的寄存器是 SCON 。
-
定時(shí)器工作方式的寄存器是 TMOD 。
-
在51單片機(jī)單片機(jī)中斷 屏蔽位 是
INT0 EX0
T0 ET0
INT1 EX1
T1 ET1
串口 ES
-
定時(shí)器/計(jì)數(shù)器工作 方式0 是13位計(jì)數(shù)結(jié)構(gòu)
1 是16位計(jì)數(shù)結(jié)構(gòu)。
2 是8位計(jì)數(shù)器結(jié)構(gòu)
3 是2個(gè)8位計(jì)數(shù)器結(jié)構(gòu)( 定時(shí)器0 ) -
在單片機(jī)中, data 片內(nèi)數(shù)據(jù)存儲(chǔ)器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Xdata 片外數(shù)據(jù)存儲(chǔ)器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? code 程序存儲(chǔ)器 -
51單片機(jī)串行口有4種工作方式
-
MCS-51單片機(jī)復(fù)位操作的主要功能是把PC初始化為 0000H
-
INTEL 8051 CPU是 8 位的單片機(jī)。
-
定時(shí)器 T0\T1 的啟動(dòng)位是 TR0\TR1
-
在單片機(jī)中, RAM 是數(shù)據(jù)存儲(chǔ)器。ROM是程序存儲(chǔ)器
-
MCS-51單片機(jī)有片內(nèi) 4KB ROM、128B RAM
-
51單片機(jī)的對(duì)應(yīng)的中斷號(hào)
INT0??0
T0??????1
INT1 ? 2
T1 ???? 3
串口 ? 4
-
51單片機(jī)的對(duì)應(yīng)的中斷號(hào)優(yōu)先級(jí)
INT0 -> T0 -> INT1 -> T1 -> 串口
MCS-51能夠響應(yīng)定時(shí)器T0中斷、外部NT1中斷,它的中斷允許寄存器IE的內(nèi)容應(yīng)是
EA / / ES ET1 EX1 ET0 EX0 1 0 0 0 0 1 1 0
二、簡(jiǎn)答題
- 8051有哪幾 5 個(gè)中斷源?每個(gè)中斷對(duì)應(yīng)的 中斷標(biāo)志 是什么?寫(xiě)每個(gè)中斷對(duì)應(yīng)的中斷類(lèi)型號(hào)是多少?
INT0 IE0 ? 0
T0 ?? TF0 ? 1
INT1 IE1 ?? 2
T1 ?? TF1 ? 3
串口 TI\RI 4 - MCS—51的存儲(chǔ)器空間從邏輯上可以分為那 3幾個(gè)空間?每個(gè)空間的空間有多大?MCS—51的存儲(chǔ)器空間從物理上可以分 4為那幾個(gè)空間?
? 51系列單片機(jī)采用哈佛結(jié)構(gòu),
? 共有四個(gè)物理存儲(chǔ)空間 片內(nèi)數(shù)據(jù)存儲(chǔ)器、片外數(shù)據(jù)存儲(chǔ)器、片內(nèi)程序存儲(chǔ)器、片外程序存儲(chǔ)器
? 共有三個(gè)邏輯存儲(chǔ)空間 片內(nèi)數(shù)據(jù)存儲(chǔ)器 128B、片外數(shù)據(jù)存儲(chǔ)器64KB、片內(nèi)+片外的程序存儲(chǔ)器64K( 片內(nèi)有4KB,片外60KB;片內(nèi)0KB,片外64KB)
- 呃呃呃呃下面這兩張圖好像都是第3題
- 串行通信中,單片機(jī)的fosc=12MHz,串口波特率為1400,串口工作在方式1。用C51寫(xiě)出初始化過(guò)程。(SCON格式如下)
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
- 寫(xiě)出單片機(jī)串行口發(fā)送 接收數(shù)據(jù)的過(guò)程(中斷法)
# 定時(shí)器1
TMOD=0X10;
TH1=(65535-X)/256;
TL1=(65536-X)%256;
ET1=1;
EA=1;
TR1=1;
3、程序填空
鍵盤(pán)碼
鍵盤(pán)掃描函數(shù)
a) 計(jì)數(shù)顯示器,對(duì)按鍵動(dòng)作進(jìn)行統(tǒng)計(jì),并將動(dòng)作次數(shù)通過(guò)數(shù)碼管顯示出來(lái)(參考如下電路圖)。
#include <reg51.h>
// led_mode存放的是LED顯示碼
unsigned char code led_mode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code led_p[]={0xfe,0xfd,0xfb,0xf7}; //LED位選
unsigned char data d[4]={0,0,0,0},count=0;
unsigned char j=0;
TIMER0() interrupt 1 //此語(yǔ)句中的1定時(shí)0
{
P0=0;
P0=led_mode[d[j]];
P2= led_p[j];
j=(j+1)%4;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
INT_0() interrupt 0 sing 2
{
count++;
if(count==100) count=0 ;
d[2]= count/10;
d[3]=count%10;
}
main()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
EX0=1;
IT0=1;
TR0=1;
while(1);
}
b) 采用定時(shí)器中斷方式使P1口上的8個(gè)LED燈每間隔10ms輪流點(diǎn)亮(如下圖所示)
#include <reg51.h>
unsigned char n=0,i=0;
unsigned char code ledcod[]={0x7f, 0xbf,0x0df,0x0ef,0x0f7,0x0fb,0x0fd,0x0fe,0x0ff};
void TIMER(void) interrupt 1 using 2
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
n++;
if(n>10){
n=0 ;
i=(i+1)%8;
}
P1=ledcod[i]
}
main()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
計(jì)數(shù)顯示器,對(duì)按鍵動(dòng)作進(jìn)行統(tǒng)計(jì),并將動(dòng)作次數(shù)通過(guò)數(shù)碼管顯示出來(lái)(參考如下電路圖)
#include <reg51.h>
unsigned char code led_mod[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d, 0x07,0x7f,0x6f,0x00};//0X00標(biāo)紅
unsigned char code led_sca[]={0xfe,0xfd,0xfb,0xf7};
unsigned char led_data[]={10,10,10,10};//此語(yǔ)句中的10 去LED顯示碼得到00,數(shù)碼管不亮 //10,10,10,10標(biāo)紅
unsigned char count;
void delay(unsigned int time)
{
unsiged int i;
for(i=0;i<time;i++);
}
void led_disp()
{
unsigned char i,j;
for(i=0;i<4;i++){
P0=0x00;
j=led_data[i];
P0=led_mod[j];
P2=led_sca[i];
delay(1000);
}
}
int1() interrupt 2 //此語(yǔ)句中的2代表 對(duì)應(yīng)中斷INT1
{
count=(count+1)%100;
led_data[2]=count/10;
led_datal3l=count%10 ;
}
main()
{
led_data[2]=count/10;
led_data[3]=count*10;
IT0=1; //此語(yǔ)句作用是設(shè)置邊沿觸發(fā)
EX0=1; //此語(yǔ)句作用是允許INT0中斷
EA=1; //此語(yǔ)句作用是CPU開(kāi)中斷
while(1) led_disp();
}
2)利用定時(shí)器1ms中斷一次,動(dòng)態(tài)顯示LED的原理,將8756顯示在4位數(shù)碼管上(參考如下電路圖)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-821205.html
#include <reg51.h>
//led_mode[]中存放的是數(shù)碼管的顯示碼
unsigned char code led_mode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code led_p[]={0xfe,0xfd,0xfb,0xf7};
unsigned char data d[4]={8,7,5,6}; //8,7,5,6 標(biāo)紅
unsigned char j=0;
TIMER0() interrupt 1 using 2
{
P0=0;
P0=led_mode[d[j]];
P2=led_p[j];
j=(j+1)%4;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
main()
{ TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-821205.html
#include <reg51.h>
unsigned char count=0;
sbit start=P2^7;
bit flag=0;
void TIME0() interrupt 1
{
TH0=(65556-10000)/256;
TL0=(65556-10000)%256;
count++;
if(count==20){
count=0;
flag=1;
}
}
main()
{
unsigned char n,LED;
TMOD=0x01;
TH0=(65556-10000)/256;
TL0=(65556-10000)%256;
TR0=1;
ET0=1;
EA=1;
SCON=0;
n=0;
LED=0x7f;
start=1;
while(1){
if(flag==1){
flag=0;
SBUF=LED;
while(!TI); //等待發(fā)送結(jié)束
TI=0;
n++;
if(n==8){
n=0;
LED=0x7f;
}else{
LED=(LED>>1)|0x80;
}
}
}
}
到了這里,關(guān)于盲目自學(xué)只會(huì)害了你!半小時(shí)速通單片機(jī)原理! #期末考試 #單片機(jī) #速成的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!