第六届“蓝桥杯”校内选拔赛单片机设计与开发试题
一、选择题:共10题,每题2分,共20 分
1.单片机复位后,SP、PC、I/O口的内容为
A.SP = 60H PC = 00H P0 = P1 = P2 = P3 = FFH
B.SP = 00H PC = 0000H P0 = P1 = P2 = P3 = 00H
C.SP = 07H PC = 0000H P0 = P1 = P2 = P3 = FFH
D.SP = 00H PC = 00H P0 = P1 = P2 = P3 = 00H
2.8051有四个工作寄存器区,由PSW状态字中的RS1和RS0两位的状态来决定,单片机复位后,若执行SETB RS0 指令,此时只能使用区的工作寄存器。
A.Ⅰ区 B.Ⅱ区 C.Ⅲ区 D.Ⅳ区
3.在MCS-51中,需要外加电路实现中断撤除的是:
A.定时中断
B.脉冲方式的外部中断
C.外部串行中断
D.电平方式的外部中断
4、关于定时器,若振荡频率为12 MHz,在方式1下最大定时时间为
A.8.192ms
B. 65.536 ms
C. 0.256ms
D.16.384ms
5、开机复位后,CPU使用的是第0组工作寄存器,地址范围是。
A.00H-10H
B.08H-0FH
C.10H-1FH
D.00H-07H
6、某种存储器芯片是8KB*2片,那么它的地址线根线是。
A、11根
B、12根
C、13根
D、14根
7、下列初始化语句中,正确且与语句
char c[ ]="string";等价的是。
A) char c[ ]={'s','t','r','i','n','g'};
B) char c[ ]='string';
C) char c[7]={'s','t','r','i','n','g','\0'};
D) char c[7]={'string'};
8、分析下面的代码:
if(x>20||x<-10)
if(y<=100&&y>x)
printf("Good");
else
printf("Bad");
如果x=30,y=150,输出为。
A. Good
B. Bad
C. Good Bad
D. Bad Good
9、若w=1,x=2,y=3,z=4,则条件表达式w<x?w:y<z?y:z的值是。
A. 4
B. 3
C. 2
D. 1
10、下面程序的运行结果是。
#include<stdio.h>
void main()
{int y=10;
do{y--;}while(- -y);
printf(“%d\n”,y- -);}
A. -1
B. 1
C. 8
D. 0
二、填空题:每空1分,共20 分
1.编程时,一般在中断服务子程序和子程序中需要保护和恢复现场,保护现场用
指令,恢复现场用指令。
2.若同时中断实现下列顺序:T0>外中断1>外中断0,则要_______、_______和CLR PX0。
(IP:———PS PT1 PX1 PT0 PX0)
3、MCS-51单片机PC的长度为16位;SP的长度为位,DPTR的长度为位。
4、访问MCS-51单片机程序存储器地址空间、片内数据存储器地址、片外数据存储器地址的指令分别为、和。
5、外部中断有两种触发方式:和。
6、单片机串行通信时,若要发送数据,就必须将要发送的数据送至单元,若要接收数据也要到该单元取数,取数的指令为。
7、LED数码显示按显示过程分为显示和显示2种。
前者,对每位显示来说是连续显示的,且显示亮度较高;后者,多位显示时节省外部驱动芯片,显示亮度较低,功耗较低。
8、下列程序的输出结果是________。
#include
main( )
{ char b[30],*chp;
strcpy(&b[0],"CH");
strcpy(&b[1],"DEF");
strcpy(&b[2],"ABC");
printf("%s \n",b);
}
9、把数组a(大小为M)中前M-1个元素中的最小值放入a的最后一个元素中#include <stdio.h>
#define M 11
void main()
{ int a[M],i;
for(i=0;i<M-1;i++)
scanf("%d",&a[i]);
a[M-1]=a[0];
/************found************/
for(i=1; _____;i++)
/************found************/
if(_____)
a[M-1]=a[i];
printf("Max is %d\n",a[M-1]);
}
10、求一维数组a中非素数之和。
例如:如果数组a的元素为:2,3,5,7,8,9,10,11,12,13,15,17,
则程序的输出应为:Sum is: 54。
#include <math.h>
#include <conio.h>
#include <stdio.h>
void main()
{ int a[12]={2,3,5,7,8,9,10,11,12,13,15,17},i,j,k,s;
/************found************/
______;
for ( i=0; i<12; i++)
{
k=sqrt(a[i]);
for ( j=2;j <= k; j++)
if (a[i] % j == 0)
break;
if( j<=k )
/************found************/
s=s+_______;
}
printf("Sum is: %d\n",s);
}
三、判断题:共10题,每题1分,共10分
1、MOV A,30H这条指令执行后的结果(A)=30H。
()
2、8031与8051的区别在于内部是否有数据存储器。
()
3、MCS-51单片机可执行指令:MOV R6,R7。
()
4、指令中直接给出的操作数称为直接寻址。
()
5、MCS-51单片机中的PC是不可寻址的。
()
6、MCS-51有5 个中断源,有5个中断优先级,优先级由软件填写特殊功能寄存器IP以选择。
()
7、MOV A,@R7,将R7单元中的数据作为地址,从该地址中取数,送入A中。
()
8、同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。
()
9、区分外部程序存储器和数据存储器的最可靠的方法是看其是被WR还是被
PSEN信号连接。
()
10、当向堆栈压入一个字节的数据后,SP中的内容减1;()
四、简答题:共3题,每题10分,共30分
1、8051单片机内部包含哪些主要逻辑功能部件?
2、MCS-51指令系统主要有哪几种寻址方式?每种寻址方式举个例子。
3、MCS-51指令系统主要有哪几种中断源?并写出每个中断入口地址?
五、程序设计题:共2题,每题10分,共20分
1、统计字符串中英文字母的个数并输出。
例如,当字符串为"This Is a c Program"
输出:Result is:15
#include <string.h>
#include <stdio.h>
fun(char str1[])
{
/***********begin***********/
/************end************/
}
void main()
{
void NONO( );//函数声明
char str1[80];
int n;
printf("Enter str1:\n");
gets(str1);
n=fun(str1);
printf("Result is: %d\n",n);
}
2、如图所示,设计一个从左到右的流水灯,接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果(用C编程)。