《单片机C51技术》复习题.docx
《《单片机C51技术》复习题.docx》由会员分享,可在线阅读,更多相关《《单片机C51技术》复习题.docx(49页珍藏版)》请在冰豆网上搜索。
《单片机C51技术》复习题
一.填空题(每空1分,共10分)
1.单片机的最小系统除了单片机外还应包括时钟电路.及电源电路。
2.MCS-51单片机具有一个位的CPU和位的程序计数器。
3.MCS-51单片机执行指令所用的时间以机器周期为单位,1个机器周期=时钟周期。
4.如果单片机的晶振频率为12MHZ,那么机器周期为,如果单片机的晶振频率为6MHZ,那么机器周期为。
5.用KeilC51软件编写C语言源文件时应保存为扩展名为的文件,用PROTEUS软件进行仿真时应下载扩展名为的代码文件。
6.编译预处理命令是计算机将C语言编译为机器语言是进行的预处理,编译预处理命令以
开头,末尾不加。
7.C51语言中有字符型、整型、浮点型指针型和位变量等几种基本变量类型,其中,字符型变量所占用的长度为Byte。
整型变量所占用的长度为Byte。
8.若想用uchar代换程序中的unsignedchar则所使用的语句为:
;
9.在编程过程中,变量必须先后使用。
#defineN5语句中N为(常量.变量)。
10.在程序运行中,其值可以改变的量称为变量。
一个变量主要由两部分构成:
一个
是,一个是。
11.65%10=;67/10=;919%100=;0x7f的十进制数为。
12.逻辑表达式的结合性为。
逻辑表达式的值应该是一个逻辑值“真”或“假”,以
代表假,以代表真。
13.函数是具有一定功能的程序段,C语言程序有主函数.和用户自定义函数。
函数的定义不能嵌套。
一段程序只能有且只有一个函数。
14.有两种方法可以终止子函数运行并返回到调用它的函数中:
一是执行到函数的
返回;二是执行到语句返回,并可以带回返回值。
15.在KeilC中,如果被调函数定义在调用函数之后,则在函数调用之前必须进行。
16.unsignedchara[10];定义了一个型数组a,数组长度为,可用的下标为。
unsignedcharm[3][6];定义了一个维数组m,数组元素的个数为。
17.数组定义时方括号中的数值必须是,该数值反映了数组元素的多少。
数组元素的引用采用加下标的方法。
18.P1=0XFE;P1=P1<<2;移位后P1=。
P1=0XF5;P1=P1>>2;移位后P1=。
19.循环结构是程序设计中的一种基本结构,循环结构的语句有:
.和do-while语句。
20.在循环体中加入break语句可以改变循环的运行过程,遇到break;结束。
21.语句for(i=0;i<=5;i++);控制的循环次数为。
语句for(i=5;i<0;i--);控制的循环次数为。
若i=5,语句while(i<6)i++;控制的循环次数为。
22.把P1^1口定义为K1:
;定义一个位变量key1:
;
23.指针是C语言中一个重要的概念,指针型变量以标记。
24.按键消抖一般有两种方法:
和软件消抖,软件消抖中,当单片机检测到有键按下时,可以先越过抖动过程再对按键识别。
25.MCS-51单片机有四个8位双向并行的I/O口,这四个端口既可以字节寻址又可
以,其中内部没有上拉电阻的端口是。
26.数码管按发光二极管连接方式分为共阴极和数码管。
按段数可分为七段数码管和。
27.AT89C51单片机共有5个中断源。
它们分别为2个外部中断:
.,3个
片内中断:
T0.T1和。
28.T0、T1除了有定时功能外还有。
29.利用中断服务程序时除了要开各自的中断允许外,还要开。
30.T0、T1有4种工作模式,其中具有自动重装载功能的是。
31.定时计数器T0有四种工作模式。
其中模式0由TH0的和TL0的构成13位计数器。
32.定时计数器T0/T1有四种工作模式。
其中模式0为计数器,模式1为计数器,模式2和模式3为计数器。
33.T0定时器/计数器的溢出中断标志位是,T1定时器/计数器的运行控制位是,串口的中断允许控制位是。
34.AT89C51单片机中断源分为级,由中断优先寄存器IP设置,系统复位后所有中断源被设置为。
35.C51提供的中断函数语法为:
返回值类型函数名(形参)interruptn,n对应中断源的编号,若n=4,则对应的中断源为。
36.根据信息的传送方向,串行通信可以分为单工.和3种。
89C51有一个可编程的串行通信接口。
37.CPU与其他设备之间的通信有和串行通信,串行通信又分为同步和串行通信。
38.AT89C51单片机的串行口通过编程可以有4种工作方式。
其中,方式0和方式2的波特率是,方式1和方式3的波特率可变,由定时器决定。
39.若i=5,执行语句b=i++;b=,i=。
二.读程序
1.unsignedcharx,,y,z;
x=x&0x0f;
if(x>=10)
{
z=1;
y=x-9;
}
else
{
z=0;
y=x;
}
当x=0x45时,程序执行完毕后,x=;y=,z=
当x=0x48时,程序执行完毕后,x=;y=,z=
2.unsignedcharx,y;
if(x>30)
if(x<45)
y=3;
elsey=1;
elsey=5;
当x的值为20时,y=;当x=40时,y=;当x=45时,y=。
3.unsignedcharx,y;
if(x>=30&&x<=45)
y=3;
elseif(x<30)y=1;
elsey=5;
当x的值为20时,y=;当x=40时,y=;当x=50时,y=。
4.unsignedcharx,y;
if(x>45||x<30)
if(x<30)y=1;
elsey=5;
elsey=3;
当x的值为20时,y=;当x=40时,y=;当x=50时,y=。
5.intx,y,z;
x=0x46;
x|=0x15;
y=x/10;
z=x%10;
x=;y=,z=
6.unsignedcharx=1,y,a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
a[0]=;a[x]=;a[2*y]=
7.intx,y;
while(x<10)
{
x++;
y+=x;
}
8.intx,y=0;
for(x=0;x<10;x++)
y+=x;
x=;y=。
9.intx=0,y=0;
while(x<10)
{
x++;
y+=x;
}
x=;y=。
10.intx,y=0;
for(x=0;x<10;x++)
{
y*=x;
}
x=;y=。
11.intx,y=1;
for(x=1;x<3;x++)
{
y*=x;
}
x=;y=。
12.intx=0,y=1;
while(x<4)
{
x++;
y*=x;
}
x=;y=。
13.intx=0,y=0;
while(x<10)
{
x++;
y*=x;
}
x=;y=。
14.unsignedcharx,y,a[5]={23,67,12,89,43};
x=0;
for(y=0;y<5;y++)
{
if(x>a[y])
x=a[y];
}
x=;y=。
15.unsignedcharx,y,a[5]={23,67,12,89,43};
x=100;
for(y=0;y<5;y++)
{
if(xx=a[y];
}
x=;y=。
16.unsignedcharx,y,a[5]={23,67,12,89,43};
x=12;
for(y=0;y<5;y++)
{
if(a[y]==x)
break;
}
x=;y=。
17.unsignedcharx,y,a[5]={23,67,12,89,43};
x=15;
for(y=0;y<5;y++)
{
if(a[y]==x)
break;
}
x=;y=。
18.unsignedcharx=15,y=0,a[5]={23,67,12,89,43};
while(a[y]!
=x)y++;
x=;y=。
19.unsignedcharx=15,y=0,a[5]={15,15,12,89,43};
while(a[y]==x)y++;
x=;y=。
20.voiddelay()
{inti,j,k;
for(i=1;i<8;i++)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
main()
{inti,temp;
while
(1)
{P2=0xff;
delay();
P2=0xfe;
temp=0xfe;
for(i=0;i<8;i++)
{P2=temp<
delay();
}
}
}
i=6时,P2=。
并说明其程序功能。
21.#include
charb[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay()
{inti,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voidmain()
{inta;
a=0;P2=0X3F;P3=0X3F;
while
(1)
{if(P1!
=0xff)
delay();
if(P1!
=0xff)
{
switch(P1)
{case0xfe:
a++;P2=b[a/10];P3=b[a%10];break;
case0xfd:
a--;P2=b[a/10];P3=b[a%10];break;
case0xfb:
a=0;P2=b[a/10];P3=b[a%10];break;
}
if(a==99)
a=0;
while(P1!
=0xff);
}}}
分别说明P1为0xfe时功能,P1为0xfd时功能
,P1为0xfb时功能。
22.#include
inta[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
b[2]={0x01,0x02};
intc=60,i,x[2],j,k;
main()
{TMOD=0x10;
TH1=0X9E;
TL1=0X58;
EA=1;
ET1=1;
TR1=1;
while
(1)
{
x[0]=c/10;
x[1]=c%10;
for(i=0;i<2;i++)
{P3=b[i];
P2=a[x[i]];
for(k=120;k>0;k--);
}
}}
voidds()interrupt3
{TH1=0X9E;
TL1=0X58;
j++;
if(j==40)
{j=0;
c--;
}
}
定时时间为,中断源编号为,并简要说明其功能
。
23.#include
main()
{
TMO