一、1.单项选择题
0. 以下集成块型号中,不属于MCS-51系列单片机型号的是( )
A.8094BH
B.83C452
C.80C32
D.8051AH
1. 用8位(bit)二进制能够表示的有符号数的范围是( )
A.-127~+128
B.-128~+127
C.-127~+127
D.-128~+128
2. 下列选项中,合法的C语言关键字是( )
A.default
B.get
C.integer
D.VAR
3. 已知char ch="B";则以下表达式的值是( ) ch=(ch>="A"&&ch<="Z")?(ch+32):ch;
A.A
B.a
C.b
D.Z
4. 变量的指针是( )
A.变量的首地址
B.变量的值
C.变量的名
D.变量的一个标志
5. 打开文件语句fp=fopen("a.dat","r");中fp的类型是( )
A.File *
B.file
C.File
D.FILE *
6. 8051与8751的区别是( )
A.内部数据存储器的数目不同
B.内部数据存储器的类型不同
C.内部程序存储器的类型不同
D.内部的寄存器的数目不同
7. 单片机的指令地址存放在( )
A.PSW
B.DPTR
C.SP
D.PC
8. MCS-51外部中断1固定对应的中断入口地址为( )
A.0003H
B.000BH
C.0013H
D.001BH
9. 在扩展系统中,能够提供地址信号的高8位的端口是( )
A.P0口
B.P1口
C.P2口
D.P3口
10. 控制串行口工作方式的寄存器是( )
A.TCON
B.PCON
C.SCON
D.TMOD
11. 执行下列3条指令后,30H单元的内容是( ) MOV R0,#30H MOV 40H,#0EH MOV @R0,40H
A.40H
B.30H
C.0EH
D.FFH
12. MOV C,00H指令中源操作数的寻址方式是( )
A.位寻址
B.直接寻址
C.立即寻址
D.寄存器寻址
13. 若设串行控制寄存器SCON=40H,则串行口的工作方式是( )
A.方式0
B.方式1
C.方式2
D.方式3
14. 地址指针DPTR是( )
A.4位的专用寄存器
B.8位的专用寄存器
C.16位的专用寄存器
D.32位的专用寄存器
15. 一个EPROM的地址有A0-A11引脚,它的容量是( )
A.2KB
B.4KB
C.11KB
D.12KB
二、2.填空题
0. 若int s=6;则表达式s%2+(s+1)%2的值是______。
1. 若a=5,b=2,c=1,则表达式a-b<c||b==c的值是______。
2. 鸡兔共有30只,脚共有90个,下面程序是计算鸡兔各有多少只。请填空。
main()
{int x,y;
for(x=1:x<=29:x++)
{y=30-x;
if(______)printf("%d,%d ",x,y);}
}
3. 输入两个整数,n1,n2(要求n1<n2),统计两整数范围内的素数的个数。请填空。
#include"math.h"
#include"stdio.h"
int prime(int x)
{int k;
for(k=2;k<=sqrt(x);k++)
if(x%k==0)return(0);
return(1)}
main()
{int a,b,j,n=0;
printf(" 请输入两个数:");
scanf("%d,%d",&a,&b);
if(a>b){______}
for(j=a;j<=b,j++)
if(prime(j))n++;
printf("a=%4d,b=%4d,n=%4d "a,b,n);}
三、3.改错题
0. #include<stdio.h>
main()
{
int a;
char ch;
ch="A":
scanf("%d",a);
printf("%c+%d=%c ",ch,ch+a);
}
错误:______
改正:______
1. main()
{
int a[3]={0,1,2};
int i;
scarf("%d",&a);
for(i=1;i<3;i++)a[0]=a[0]+a[i];
printf("a [0]=%d ",a[0]);
}
错误:______
改正:______
2. 下面程序的功能是将小写字母变成对应大写字母后的第二个字母。其中y变成A,z变成B。
#include "stdio.h"
main()
{char c;
while((c=getchar())!=" ")
{if(c>="a"&&c<="z")
c=c-30;
if(c>"z"||c<="z"+2)
c=c-26;}
printf("%c",c);
}
错误:______
改正:______
3. 以下程序的输出结果是29,改正错误。
fun(int x,int y)
{x*x+y*y;}
main()
{int a;
a=fun(5,2);
printf("%d",a);
}
错误:______
改正:______
四、4.程序阅读题
0. #include<stdio.h>
#define N 6
void main()
{int a[N]={4,5,8,3,6,1};
int j,i,t;
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}
for(j=0;j<N;j++)printf("%5d",a[j]);
程序运行结果是:______
1. #include<stdio.h>
main()
{int x,sum;
scanf("%d",&x);
sum=0;
while(x>0)
{if(x%2==0)sum+=x;
scanf("%d",&x);}
printf("%d ",sum);
}
程序运行时输入1 9 3 4 0<回车>,则程序运行结果是:______
2. #include"stdio.h"
main()
{int i;
for(i=1;i<=5;i++)
{if(i%2)printf("*");
else continue;
printf("#");}
printf("#");}
程序运行结果是:______
3. #include<stdio.h>
main()
{int n,sum=0;
scanf("%d",&n);
do{sum=sum+(n%10)*(n%10);
n=n/10;}while(n);
printf("sum=%d",sum);
}
程序运行时,从键盘输入2345<回车>,运行结果是:______
五、5.程序设计题
0. 编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩并输出。
六、6.填空题-单片机原理与接口技术
0. 一个机器周期包含______个晶振周期。若品振周期的频率为12MHz,则机器周期为______。
1. 12根地址线可选择______存储单元,32KB存储单元需要______根地址线。
2. 使用8031单片机时EA引脚接______电平,因其内部无______存储器。
3. 设(SP=60H),(ACC=30H),(B=70H)。执行下列指令后,SP的内容为______,61H单元的内容为______。
PUSH ACC
PUSH B
4. 执行下列程序后,(42H)=______,(55H)=______。
MOV SP,#40H
MOV 42H,#85H
MOV 55H,#37H
PUSH 42H
PUSH 55H
POP 42H
POP 55H
5. 当DAC 0832 D/A转换器的CS接8031的P2.0时,程序中0832的地址指针DPDR寄存器应置为______。
6. 存储器的地址线有14根,数据线有8根,其存储容量为______。
7. 80C51在作并行扩展时,如果采用全地址译码,扩展芯片的地址是______。
七、7.改错题-单片机原理与接口技术
0. 下面的程序完成5+4+3+2+1=15=0FH。
MOV R3,05H
CLR A
L00P: ADD A,R3
DJNZ @R3,LOOP
SJMP $
错误:______
改正:______
1. 设单片机的fosc=6MHz,下面程序是100ms延时的子程序。
DELAY: MOV R7,#64H
A0: MOV R6,#0FAH
DJNZ R6,$
DJNZ R7.DELAY
RET
错误:______
改正:______
八、8.程序阅读题-单片机原理与接口技术
0. 下面程序是将片外RAM 2000H开始的单元中______字节的数据,传送到片内RAM______开始的单元中去。
MAIN:MOV DPTR,#2000H
MOV R1,#20H
MOV R0,#05H
LOOP:MOVX A,@DPTR
MOV @R1,A
INC DPTR
INC R1
DJNZ R0,LOOP
RET
1. 下面程序是对8255进行初始化,使其A口按方式0______,B口按方式0输出,C口上半部按方式0______,C口下半部按方式1输入。
九、9.程序设计题-单片机原理与接口技术
0. 将4个单字节数放片内30H~39H,它们求和结果放在片内50H,51H单元。
十、10.微型计算机原理与接口技术-应用题
0. 下面程序的功能是信号灯控制程序,利用P1口控制八个发光二极管的亮与灭(设输出低电平时,对应发光二极管被点亮)。阅读程序完成说明语句。
ORG 0000H
AJMP MAIN ;转主程序
ORG 001 BH ;该地址是①的地址
AJMP CONT ;当出现②时,才会执行到该指令
ORG 0100H
MAIN: MOV TMOD,#10H ;执行该指令的目的是③
MOV TH1,#3CH ;置50ms定时初值
MOV TL1,#OBOH ;此时堆栈指针SP的内容是④
SETB EA ;执行该指令前,EA的初始值是⑤
SETB ET1 ;定时器T1开中断
SETB TR1 ;执行该指令的目的是⑥
CLR 08H ;清1s计满标志位
MOV R3,#14H ;置50ms循环初值
DISP: MOV R2,07H
MOV A,#0FEH
NEXT:MOV P1,A ;第2次执行完该指令后,对应⑦灯被点亮
JNB 08H,$ ;查询1s时间到否
CLR 08H ;清标志位
RL A
DJNZ R2,NEXT
MOV R2,#07H
NEXT1:MOV P1,A
JNB 08H,$
CLR 08H
RR A
DJNZ R2,NEXT1
SJMP DISP
CONT: MOV TH1,#3CH ;程序执行到此处时,堆栈指针SP的内容是⑧
MOV TL1,#OBOH
DJNZ R3,EXIT ;判1s定时到否
MOV R3,#14H ;重置50ms循环初值
SETB 08H ;标志位置1
EXIT: RETI ;该指令的功能是将堆栈的内容送至PC
答:①______;②______;③______;④______;
⑤______;⑥______;⑦______;⑧______。