微型计算机原理与接口技术试卷
微型计算机原理与接口技术
单项选择题(本大题共 15 小题,每小题 1 分,共 15 分)在每小题列出的四个备选项中只有一个选项是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
第一单元
(C C 语言程序设计)
1.以下集成块型号中不属于单片机型号的是( D
). A. 8051AH
B.83C52JA
C.8096BH
D.80486DX 2.二进制数 11111111 与二进制数 00000000 进行按位“与”,运算的结果是( A
)
A.00000000
B.11111111
C.10000000
D.00000001
3.已知一程序段为:
for(i=1;i<=100;i++)
{ scanf ("%d",&x) ;
if(x<0)continue;
printf("%d",i) ;
} 则该程序段执行的情况是( D
)
A.当经 x<0 时整个循环结束
B. 当 x>0 时什么也不输出
C.printf()函数不可能执行
D. 最多允许输出 100 个非负整数
4.大写字母‘A’的 ASCI I 码为 65,则字母‘E’的 ASCI I 码是( B
)
A. 66
B. 69
C. 70
D. 72
5.若 fp 是指向某文件的指针,且读取文件时已读到文件未尾,则库函数 feof(fp)的返回值是( C )A.EOF
B. 0
C. 非零值
D. NULL
第二 单元
(单片机原理与接口技术)
1.CPU 每取 1 字节的指令操作码后,有一个寄存器的内容自动加 1 ,这寄存器就是( D )
A. ACC
B.SP
C. PSW
D. PC
2.8051 单片机内部具有定时器/计数器的个数和位数
分别是( B
)
A.1 个,16 位
B.2 个,16 位
C.2 个,8 位
D.3 个,8 位
3.80H 是用 8 位二进制补码表示的十六进制数,那么其相应的十进制数是( B
)
A.-0
B.+128
C.-128
D.-127
4.MOVX
A,@DPTR 指令中源操作数的寻址方式是( B
)
A.寄存器寻址
B.寄存器间接寻址
C.直接寻址
D.立即寻址
5.中断服务程序的返回指令必须是( D
)
A.RET
B.SJMP
C.LJMP
D.RETI
6.8031 单片机当允许 CPU 响应外中断 INT1 的中断请求时,其 IE中必须为 1 的位是( C )
I E 寄存器格式:
EA - - ES ET1 EX1 ETO EXO A.EXO 和 EA
B.ES 和 EX1 C.EX1 和 EA D.ET1 和 EA
7.已知累加器(A)= 87H,进位标志(CY)= 0,执行 RRC
A 指令后,(A )和(CY )的内容分别为( D )
A. OEH , 1
B. OFH , 0
C. C3H ,0 0
D.
43H ,1 1
8.PSW.4 位和 PSW.3 位是工作寄存器区的选择位。执行下列指令组后,选择的工作寄存器组是( B )
CLR
PSW.4
SETB
PSW.3
A. 0 组
B. l 组
C. 2 组
D. 3 组
9.8031 单片机的外中断 0 的中断程序入口地址为( B )
A.0000H
B.0003H
C.000BH
D.0013H
10.MCS-51 单片机内 RAM 中字节地址为 0EH 的单元,其对应工作寄存器名为(
)
A.R0
B.R1
C.R6
D.R7
二、填空题(本大题共 2 小题,每小题 3分,共 6 分)请在每小题的空格中填上正确答案。错填、不填均无分。
1.表达式 5/3 的值是
1
。
2.执行了 printf("The tile name is d:data.db");语句,将输出 The tile name is d:data.db
改错题(本大题共 2 小题,每小题 3 分,共 6 分)每小题只有一处错误或不妥,请指出,并将其改正。
1.main()
{
int x,y;
scanf("%d",x);
} 答:错误:
scanf("%d",x);
改正:
scanf("%d",&x); 得分 评卷人 复查人
得分 评卷人 复查人
2.以下程序的功能是:求 30 个学生某门课程的平均成绩
#include<stdio.h>
main()
{ int n=30,i=0,t;
float aver=0;
while(i<n)
{scanf("%d",&t);
aver=aver+t;
}
aver=aver/n;
printf("平均成绩为:%5.1t\n",aver);
} 答:错误:
改正:
四、程序阅读题(本大题共 4 小题,每小题 5 分,共 20 分)请
阅读下列程序,写出程序运行结果。
1.写出程序运行结果
main()
{
int i,j;
tir(i=0;i<5;i++)
{
for(j=5;j-i>0;j--)
printf(" ");
printf("\n");
}
} 运行结果为:
2.#include<stdio.h>
main() {
int a=0,b,c=0,I;
for(i=0;i<f4;i+=2)
{
?得分 评卷人 复查人
***** **** *** ** *
a+=i;
b=i+1
c+=b;
}
printf("a=%d\n",a);
printf("a=%d\n",c);
}
程序运行结果为:
3.#include <stdio.h>
main()
{ int x=1,total=0,y;
while (x<=10)
{ y = x*x;
printf ("%d",y);
total += y;
++x;
}
printf ("\\nTotal
is %d\\n",total);
}
1
4
9
16
25
36
49
64
81
100 Total is 385
程序运行结果为:
4.#include "stdio.h" char*fun(s,c)
char*s,c;
{
char*p=NULL;
while(*s!="\0")
{
p=s;
break;
}
++s;
return p;
}
main ( )
{
char s[100] ="I am a student.",c="t",*p;
p=fun(s,c);
if(p!=NULL)
{
printf("%s\n%s\n",s,p);
} }
程序运行结果为:
五、程序设计题(本大题共 1 小题,共 8分)根据题意编写成完整的程序。
将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数的千位和十位上。b 数的十位和个位数依次放在 c 数的百得分 评卷人 复查人
位和个位上。例如,当 a=45,b=12。调用该函数后,c=4152。
#include "stdio.h" void main() { int a,b,c;
int k1,k2,k3,k4;
scanf("%d",&a);
scanf("%d",&b);
k1=(a/10)*1000;
k2=(b/10)*100;
k3=(a%10)*10;
k4=(b%10);
c=k1+k2+k3+k4;
printf("c=%d\n",c); }
第二单元 (单片机原理与接口技术)
六、填空题(本大题共 5 小题,每小题 3分,共 15 分)请在每小题的空格中填上正确答案。错填、不填均无分。
1.MCS-51 单片机把
CPU
、
存储器
并行口、串行口和定时器/计数器等集成在一个芯片上。
2.片内RAM的位寻址区的地址范围为
20
H~
2F
H。
得分 评卷人 复查人
3.8031单片机外接ROM时,其P2口用来传送 高8位地址
信号。
4.一般说,一条指令由两部分组成即
操作码
和
操作数
。
5.要串行口工作为 10 位异步串行通信,其工作方式应选为
。
七、程序阅读题(本大题共 2 小题,每小题 5 分,共 10 分)请阅读下列程序,写出程序运行结果。
1.已知 8031 单片机时钟频率为 12MHz,则执行子程序:
MOV R7,#199
;1 个机器周期
NOP
;1 个机器周期 LOOP:
NOP
;1 个机器周期
NOP
;1 个机器周期 得分 评卷人 复查人
DJNZ R7,LOOP ;2 个机器周期
RET
;2 个机器周期
所需的时间为
800
μS(精确到 1μS)
子程序返回后,R7=
00H
。
2.已知:(30H)=37H,(31H)=21H,(50H)=75H,(51H)=10H
执行以下子程序:
MOV RO,#30H
NOV R1,#50H
MOV R7,#2
CLR
C
LOOP: NOV A,@R0 ADDC A,@R1
DA
A
MOV @R0,A
INC
R0
INC
R1
DJNZ
R7,LOOP
RET
则结果为:(30H)=
H,(31H)=
H,(R1)=
H,(R7)=
H。
八、程序设计题(本大题共 1 小题,共 10分)根据题意编写成完整的程序。
已知:内部 RAM 的 30H、31H 和 32H 单元中有无符号数 X1、X2 和 X3,试编写程序令其相加,并把和存入R2 和 R3(R3 中为高 8 位)中。
九、应用题(本大题共 1 小题,共 10 分)
得分 评卷人 复查人
1.利用下图编出每分钟采集一遍 IN0~IN7 上模电压,并把采集的数字量存入(或更新)内部 RAM20H 开始的数据区(利用内部定时器)的程序。请将下列程序补充完整。
ORG 0000H
;单片机复位地址
LJMP MAIN
;转入主程序
ORG 000BH
;定时器 R0 中断
LJMP LTO
得分 评卷人 复查人
ORG 0050H
LTO:
MOV THO,#15H
;定时重新开始的初值
MOV TLO,#OAOH
DJNZ R6,BACK
;6s 的时间到了吗?未到重新开始
MOV R6,#100
;100 个 60ms 即 6s
DJNZ R5,BACK
;10 个 6s 即一分钟的延时到了吗?
MOV R5,#10
;10 个 6s 即一分钟
READ:
MOVX @DPTE,A
;启动 A/D HEAD: JB
①
,HERE ;查询转换完否
MOVX A,
②
;读取转换结果
MOV @R1,A
;存放数据
INC
R1
;指向下一个存储单元
INC
DPTE
;指向下一个通道
DJNZ R7,READ
;巡回未完继续
MOV DPTE,#7FF8H ;P2.7=0,且指向 INO
MOV R7,#08H
;置通道数
BACK: RET1
;定时器中断子程序返回
ORG 0100H
;主程序入口
MAIN:
MOV DPTR,#7FF8H ;P2.7=0,且指向 1NO
MOV R1,#20H
;置数据区首地址
MOV R7,#08H
;置通道数
MOV R5,#10 MOV R6,#100
MOV
③
,#1
;TO 方式一非门控定时
MOV THO,#15H
;TO 记录 60000 个 1us
MOV TLO.#0A0H
;即每个 60ms 为一个单位进行延时
SETB EA
;开放 CPU 总中断开关
SETB ETO
;允许 TO 中断
SETB
④
;启动定时器 T0
SJMP $
END
答:①
;②
; ③
;④
。