单片机复习题.docx
《单片机复习题.docx》由会员分享,可在线阅读,更多相关《单片机复习题.docx(20页珍藏版)》请在冰豆网上搜索。
单片机复习题
单片机复习题
单片机的引脚及其功能
1.EA脚的功能是控制程序存储器的选择,单片机使用片内程序存储器时,该引脚
应该接+5V高电平。
2.单片机的RST引脚是复位引脚,外接复位电路。
3.MCS-51单片机有片内RAM、特殊功能寄存器、扩展数据存储器和程序存储器4个存储空间。
4.对于标准的MCS-51单片机而言,idata区是指片内RAM地址范围为0x00~0x7f的
区域,共128字节,对于增强型MCS-51单片机(52单片机)而言,idata区的地址范围为
0x00~0xff,共256字节。
5.MCS-51单片机的data区位于单片机的片内RAM中,地址范围为0x00~0x7f,共
128字节。
6.MCS-51单片机有4组工作寄存器组,工作寄存器组区的地址范围是0x00~0x1f,
当前工作寄存器组用R0~R78个寄存器表示。
7.若函数display()的定义如下:
voiddisplay(void)using1
{……}
单片机在执行函数display时,当前工作寄存器组是第1组工作寄存器,其中R2的地
址是0x0a。
8.单片机执行下列程序段后,当前工作寄存器组是第3组工作寄存器,其中R7的地
址是0x1f。
RS0=1;RS1=1;
9.code区是指单片机的程序存储区,code区的作用是存放程序代码和表格数据。
10.至少要配备时钟电路、复位电路、存储器电路和电源电路,单片机才能独
立工作。
11.时钟电路的作用是产生时钟信号,装配晶振时应该将晶振尽可能地安装在
XTAL1、XTAL2引脚附近。
12.若单片机的fosc=12MHz,单片机的机器周期为1μs。
13.C51程序中至少有一个main函数。
14.C51程序中,语句由分号(;)结尾。
15.C51书写比较自由,一条语句可以分多行书写,也可以在一行中书写多条语句。
16.unsignedchar型变量占1个字节,值域是0~255,data区中最多只能定义128
个unsignedchar型变量。
17.C51中,16进制数的表示方法是以0x开头的数字,与0x12等值的十进制数是18。
18.用C51设计单片机程序时,应尽量使用无符号字符型和位型数据,以便提高程
序的运行速度。
19.写出下列常量和变量的定义式:
⑴值为20的符号常量KTIM。
⑵无符号字符型变量i、j。
⑶带符号整型变量k。
⑷浮点型变量f。
⑸有符号的长整型变量sl。
⑹位变量mybit。
⑺定义无符号字符型变量i、j,并给i赋值3、j赋值4。
【解】
⑴#defineKTIM20
⑵unsignedchari,j;
⑶intk;
或者signedintk;
⑷floatf;
⑸longsl;
或者signedlongsl;
⑹bitmybit;
⑺unsignedchari=3,j=4;
20.若有下列定义:
inti=0x1234;
unsignedcharj;
语句“j=i;”执行后,i=0x1234,j=0x34。
21.若有下列定义:
inti;
unsignedcharj=0x82;
语句“i=j;”执行后,i=0x0082。
22.若有下列定义:
unsignedinti;
charj=0x82;
语句“i=j;”执行后,i=0xff82,j=0x82。
23.定义下列特殊功能寄存器和特殊位:
⑴特殊功能寄存器P0、P1、P2、P3。
⑵16位特殊功能寄存器RCAP2,RCAP2的低字节地址为0xca,高字节地址为0xcb。
⑶特殊功能寄存器P0的第0位P0_0。
⑷片内RAM0x24单元的第4位down。
【解】
⑴sfrP0=0x80;
sfrP1=0x90;
sfrP2=0xa0;
sfrP3=0xb0;
⑵sfr16RCAP2=0xca;
⑶法一:
sfrP0=0x80;
sbitP0_0=P0^0;
法二:
sbitP0_0=0x80^0;
法三:
sbitP0_0=0x80;//这里的0x80是P0.0的位地址,而不是P0口的端口地址
⑷法一:
sbitdown=0x24^4;
法二:
sbitdown=0x24;//这里的0x24为0x24单元第4位的位地址
24.设m为unsignedchar型变量,mybit为bit型变量,请按下列要求编写程序段:
⑴将m中的数据从P0口输出。
⑵将mybit中的数据从P0.0口线输出。
⑶将P0.3口线置1。
⑷将P0.5口线清0。
⑸读P0口的输入状态,并保存至m中。
⑹读P0.0口线输入状态,并保存到mybit中。
【解】
⑴sfrP0=0x80;
unsignedcharm;
P0=m;
⑵sfrP0=0x80;
sbitP0_0=P0^0;
bitmybit;
P0_0=mybit;
⑶sfrP0=0x80;
sbitP0_3=P0^3;
P0_3=1;
⑷sfrP0=0x80;
sbitP0_5=P0^5;
P0_5=0;
⑸sfrP0=0x80;
unsignedcharm;
P0=0xff;
m=P0;
⑹sfrP0=0x80;
sbitP0_0=P0^0;
bitmybit;
P0_0=1;
mybit=P0_0;
25.单片机复位后,P0=0xff。
26.复位后,特殊功寄存器P1=0xff。
27.宏定义是一种编译预处理命令,宏定义以#开头,结尾处无分号(;),一般放在
程序的开头处。
用字符uchar代表字符unsignedchar的宏定义是#defineunchar
unsignedchar。
28.C51中,测试等于运算符是==,测试不等于运算符是!
=。
29.C51中,当一个表达式中有多个运算符时,先进行高优先级运算,同级运算的先
后顺序由结合方向确定,若结合方向是从左向右,则按从左至右的顺序进行运算。
30.下列程序中,表达式“d=a!
=b=(b后求解d=(a!
=(b程序运行后,a=4,b=3,c=2,d=1。
voidmain(void)
{unsignedchara=4,b=3,c=2,d;
d=a!
=b}
31.下列程序运行后,a=1,b=3,c=0。
voidmain(void)
{unsignedchara=0,b=1,c=2;
c=!
(a=1)&&(b=3);
}
32.设有下列程序段:
a=1;b=2;c=3;//1
if(k<5)//2
a=4;b=5;//3
c=6;//4
⑴若k=4,则执行上述程序段后,a=4,b=5,c=6。
⑵若k=5,则执行上述程序段后,a=1,b=5,c=6。
33.单片机在片外不扩展程序存储器,不扩展并行RAM,也不扩展并行I/O芯片的情
况下,P2口可作为普通的I/O口使用。
34.复位时,特殊功能寄存器P2=0xff。
35.设m为unsignedchar型变量,mybit为bit型变量,请按下列要求编写程序段:
⑴从P2口输出数据0x5a。
⑵将mybit中的数据从P2.6口线输出。
⑶将P2.2口线置1。
⑷将P2.4口线清0。
⑸读P2口的输入状态,并保存至m中。
⑹读P2.7口线的输入状态,并保存到mybit中。
【解】
⑴sfrP2=0xa0;
P2=0x5a;
⑵sfrP2=0xa0;
sbitP2_6=P2^6;
bitmybit;
P2_6=mybit;
⑶sfrP2=0xa0;
sbitP2_2=P2^2;
P2_2=1;
⑷sfrP2=0xa0;
sbitP2_4=P2^4;
P2_4=0;
⑸sfrP2=0xa0;
unsignedcharm;
P2=0xff;
m=P2;
⑹sfrP2=0xa0;
sbitP2_7=P2^7;
bitmybit;
P2_7=1;
mybit=P2_7;
36.单片机片外扩展并行I/O芯片时,P2口只能作地址总线口使用,不能作普通I/O口使用,此时,P2口输出的是高8位地址A15~A8
37.P3口是双功能I/O口,在端口线上的第二功能没有启用的情况下,P3口的端口线才能作普通的I/O口使用。
38.单片机复位后,特殊功能寄存器P3=0xff。
39.按下列要求编写程序段:
⑴读P3口输入至变量keyinput中。
⑵读P3.4引脚输入至位变量setport中。
⑶将P3.5置1。
【解】
⑴sfrP3=0xb0;
unsignedcharkeyinput;
P3=0xff;
keyinput=P3;
⑵sfrP3=0xb0;
sbitP3_4=P3^4;
bitsetport;
P3_4=1;
setport=P3_4;
⑶sfrP3=0xb0;
sbitP3_5=P3^5;
P3_5=1;
40.#include的作用是将特殊功能寄存器定义头文件reg51.h包含至当前程序文件中来,一般放在程序的开头处。
41.%是取余运算符,要求运算符两边的数据必须是字符型型数据或者是整型数据。
42.10%4=2,10/3=3。
43.表达式if(a%2!
=0)可以判断变量a是否为奇数。
44.下列程序段运行后,i=6,j=6,k=5,m=5。
unsignedchari=5,j,k,m;
j=i++;
k=++j;
m=--k;
45.逻辑与运算符是&&,按位与运算符是&,逻辑或运算符是||,按位或运算符是|,逻辑非运算符是!
,按位反运算符是~。
46.函数_crol_()是C51的内嵌函数,若程序中使用了_crol_()函数,则需要在程序的开头处使用“#include”将头文件intrins.h包含至当前程序文件中
来。
函数_crol_(m,2)的功能是将无符号字符变量m循环左移2位。
47.定义函数时,若函数无形式参数,则用void说明形式参数。
48.调用无参数函数时,可以省略实际参数表,但不能省略函数名后面的园括号。
49.C51规定,函数必须先定义,才能使用函数。
50.程序中需要调用math.h头文件中的cos(x)函数,则在程序的开头处需要用
#include将math.h文件包含至程序文件中来。
51.请按下列要求定义变量:
⑴在片内RAM0x20~0x2f区域内定义无符号字符型变量i、j。
⑵在片内RAM0x00~0x7f区域内定义无符号整型变量k,k的初值为4。
⑶在扩展RAM中定义长整型变量k。
⑷在程序存储器中定义无符号字符型变量a,a的值为字符L。
【解】
⑴unsignedcharbdatai,j;
⑵unsignedintdatak=4;
⑶longxdatak;
⑷unsignedcharcodea='L';
52.若有如下定义:
unsignedcharidataa[5];
数组a[]位于idata区,有5个元素,这些元素依次是a[0]、a[1]、a[2]、a[3]、
a[4]。
53.若有如下定义:
unsignedchara[]={1,2,3,4,5};
unsignedcharb[5]={6,7};
数组a[]有5个元素,元素a[2]的值为3。
数组b[]中有5个元素,元素b[2]的值为0。
54.C51程序中,若数组中各元素的值均小于256,一般是将数组定义成字符型数组。
55.MCS-51单片机有外部中断0、定时/计数器0、外部中断1、定时/计数器1和串
行I/O中断5个中断源,共有6个中断请求标志位。
56.中断请求标志位的作用是记录中断事件是否发生过,并向CPU提出中断请求,在中断产生条件满足的情况下,硬件电路会自动地将中断请求标志位置1。
57.外部中断0的中断请求标志位是IE0。
58.使用外部中断1时,需要将IE寄存器的EA位和EX1位置1。
59.外部中断0有低电平触发和下降沿触发2种触发方式,一般采用下降沿触发方式。
60.将外部中断1设置成下降沿触发的方法是将特殊功能寄存器TCON的IT1位置1,其语句是IT1=1;。
61.特殊功能寄存器IP的功能是什么?
什么样情况下可以不设置IP?
什么样的情况下必须设置IP?
为什么?
【解】
IP的功能是,管理单片机的中断优先级。
当系统中只开放了一个中断时,不必设置IP,当系统中开放的中断数不止一个时,必须设置IP的值。
因为在这种情况下存在着多个中断源同时向CPU请求中断服务的问题,在这种情况下,必须确定CPU优先响应哪个中断请求。
62.某应用系统中使用了INT0、INT1、T0三个中断,如果这3个中断同时向CPU提出中断请求时,要求CPU按T0→INT0→INT1的顺序响应中断请求,请写出实现这一要求的程序段。
【解】
要想CPU按T0→INT0→INT1的顺序响应中断请求,必须将T0设为高级中断,INT0、INT1设为低级中断。
实现上述要求的程序段如下:
#include
……
PT0=1;//T0采用高级中断
PX0=0;//INT0采用低级中断,单片机复位后,PX0=0,本句可省去
PX1=0;//INT1采用低级中断,单片机复位后,PX0=0,本句可省去
63.单片机复位后,如果5个中断源同时向CPU提出中断请求,CPU响应中断的顺序是什么?
【解】
单片机复位后,IP=0x00,5个中断源均为低级中断,当它们同时向CPU提出中断请求时,CPU按以下顺序响应中断请求:
INT0→T0→INT1→T1→TI/RI
64.外部中断0的中断类型号是0,外部中断1的中断类型号是2,定时/计数器T1的中
断类型号是3,串行发送中断的中断类型号是4。
65.某应用系统中使用了INT0、INT1两个中断,INT0采用低电平触发,INT1采用下降沿触发,当这两个中断源同时向CPU请求中断时,CPU先响应INT1的中断请求。
请写出系统初
始化程序。
【解】系统初始化程序如下:
#include
voidinit_int(void)
{IT0=0;//INT0采用低电平触发。
单片机复位后,IT0=0,本句可以省去
IT1=1;//INT1采用下降沿触发
PX0=0;//INT0为低级中断,单片机复位后,PX0=0,本句可以省去
PX1=1;//INT1为高级中断
EX0=1;//开INT0中断
EX1=1;//开INT1中断
EA=1;//开全局中断
}
66.如图所示采用外部中断0(INT0)。
在开关SW1断开时使LED正反循环流水点亮,在开关SW1闭合时使LED交替循环点亮10次。
【
解】
#include
#include
#defineuintunsignedint
voiddelay(uintN);
voidmain()
{
uinti,led;
EA=1;
EX0=1
PX0=0x01;
IT0=1;
while
(1)
{
led=0xfe;
for(i=0;i<8;i++)
{
P1=led;
delay(20000);
led=_crol_(led,1);
}
led=0x7f;
for(i=0;i<7;i++)
{
P1=led;
led=_cror_(led,1);
delay(20000);
}
}
}
voiddelay(uintN)//延时程序
{
uintj=N;
for(j=0;j}
voidint_0()interrupt0using0//中断服务函数
{
inti,F=0xAA;
for(i=0;i<10;i++)
{
P1=F;
delay(40000);//调用延时程序
F=~F;//对F取反
}
return;
}
67.标准的MCS-51单片机片内集成有2个16位的可编程定时/计数器,它们有定时和计数2种运行模式和4种工作方式。
68.与定时/计数器T0有关的外部引脚是P3.2/INT0、P3.4/T0。
69.T1的计数器是TH1、TL1,它是加1计数器,每输入1个脉冲,计数器的值就会自动加1,计数值计满模值时,计数值回0,硬件电路会自动地将特殊功能寄存器TCON的TF1位置1。
70.当TMOD.6=1时,T1的计数器对外部引脚P3.5/T1输入的脉冲进行计数。
71.当TMOD.2=0时,T0的计数器对机器周期计数,T0实现的是定时功能。
72.将TMOD的D2(TMOD.3)位清0,T0用TR0控制计数器的启动与停止。
当TR0=1时,T0的计数器正常计数,当TR0=0时,T0的计数器停止计数。
73.单片机复位后,TMOD的值为0x00,T0工作在定时模式,其计数器为13位计数
器,并且使用TR0控制计数器的开启和停止。
74.T0采用方式1、定时模式,T1采用方式0、计数模式,设置T0、T1的运行模式、工作方式的语句是TMOD=0x41;。
75.单片机复位后,TCON的值为0x00,T0停止运行。
76.TCON中的位分配有位地址,启动定时/计数器T0的语句是TR0=1;。
77.方式0的计数器是13位计数器,当TMOD的TMOD.1、TMOD.0位设置为00时,T0工作在方式0下,T0的计数器由TH0中的8位和TL0中的低5位组成,其模值为8192。
78.T1工作在方式0下,T1的计数器计满8192时,其计数值回0,硬件电路会自
动地将TF1位置1,用来指示计数值已计满。
79.方式1的计数器是16位计数器,其模值是65536,将TMOD的D5、D4(TMOD.5、TMOD.4)位设置为01时,T1工作在方式1下,T1的计数器由TH1中的8位和TL1中的8位组成。
80.方式2的计数器是8位计数器,其模值是256。
81.单片机的fosc=12MHz,T0作5ms定时器使用,T0的计数次数为5000,可以采用的工作方式是方式0、方式1。
82.单片机的fosc=6MHz,T0工作在方式0下作10ms定时器使用,给T0装入计数初值的语句是TH0=(8192-5000)/32;TL0=(8192-5000)%32;,
若T0工作在方式1下,给T0装入计数初值的语句是TH0=(65536-5000)/256;TL0=(65536-5000)%256;。
83.T1的计数次数为25,工作在方式2下,给T1装入计数初值的语句是
TH1=TL1=256-25;。
84.T0的中断请求标志位是TF0,中断类型号是3。
85.STC89C51单片机的fosc=6MHz,若要求定时时长为0.1ms,T0工作在方式0、方式1、方式2和方式3,定时器的计数初值各为多少?
若T0为高优先级中断,请编写对应的初始化程序。
【解】定时器的定时时长为0.1ms,则定时器的计数次数n为
n=(fosc×t)/12==50
在方式0下,其计数初值为x=8192-50=8142
在方式1下,其计数初值为x=65536-50=65486
在方式2下,其计数初值为x=256-50=206
在方式3下,其计数初值为x=256-50=206
若T0为高优先级中断,各种方式下的初始化程序如下:
⑴方式0
voidinit_T0(void)
{TMOD=0x00;//设置T0的工作模式、工作方式:
方式0、定时,本句可省略
TL0=(8192-50)%32;//T0计数器赋初值
TH0=(8192-50)/32;//
PT0=1;//T0为高级中断
ET0=1;//开T0中断
EA=1;//开全局中断
TR0=1;//启动T0
}
⑵方式1
voidinit_T0(void)
{TMOD=0x01;//设置T0的工作模式、工作方式:
方式