1、微型计算机原理与接口技术-5 及答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:16,分数:16.00)1.在堆栈操作中,当进栈数据全部弹出后,这时 SP 指向( )(分数:1.00)A.栈底单元地址B.7FH 单元C.栈底单元地址加 1D.栈底单元地址减 12.C 语言中最基本的数据类型是( )(分数:1.00)A.整型、实型、逻辑型B.整型、实型、逻辑型、字符型C.整型、字符型、逻辑型D.整型、实型、字符型3.下面不是中断响应条件的是( )(分数:1.00)A.CPU 处于开中断状态B.低级中断源C.高级中断源D.一条指令执行完毕4.MCS-51 单片机在
2、访问外部数据存储器时,地址指针是( )(分数:1.00)A.DPTRB.PCC.PSWD.SP5.执行 intx=2,y=3;后表达式 x=(y=3)的值是( )(分数:1.00)A.1B.0C.2D.36.以下不属于单片机集成块型号的是( )(分数:1.00)A.80486DXB.83C51FAC.8097BHD.80517.从地址 2132H 开始有一条绝对转移指令 AJMP addr11,指令可能实现的转移范围是( )(分数:1.00)A.2000H27FFHB.2132H2832HC.2100H28FFHD.2000H3FFFH8.以下所列的 C 语言常量中,错误的是( )(分数:1.
3、00)A.0xFFB.2LC.1.2e0.5D./729.MCS-51 单片机在正常运行程序时 RST 引脚是( )(分数:1.00)A.高电平B.低电平C.脉冲输入D.高阻态10.下列程序段执行后,a 的值是( ) int*p,a=10,b=1; p=a;a=*p+b;(分数:1.00)A.12B.13C.10D.1111.C 语言函数返回值的类型是( )(分数:1.00)A.return 语句中表达式类型B.调用该函数时主调函数的类型C.定义该函数时函数的类型D.调用函数时系统临时决定12.8051 定时器/计数器 T0 工作方式 0 和方式 1 的区别是( )(分数:1.00)A.前者是
4、 16 位后者是 13 位B.前者是 16 位后者是 8 位C.前者是 13 位后者是 8 位D.前者是 13 位后者是 16 位13.协调 CPU 与外围设备之间的数据传送的是( )(分数:1.00)A.三态门B.锁存器C.缓冲器D.寄存器14.MCS-51 内部 RAM 字节数是( )(分数:1.00)A.128B.256C.107D.4K15.带进位的循环移位指令是( )(分数:1.00)A.RLB.RRC.CLRD.RLC16.下列程序段的执行结果是( ) MOV R0,#30H SETB C CLR A ADDC A,#00H MOV R0,A(分数:1.00)A.(30=00HB.
5、(30=01HC.(00=00HD.(00=01H二、B填空题/B(总题数:4,分数:8.00)17.inta,b;则表达式(a=2,b=5,a+,b+,a+b)的值是 1。(分数:2.00)填空项 1:_18.当 a=3,b=2,c=1 时,表达式 f=abc 的值是 1。(分数:2.00)填空项 1:_19.从键盘上输入若干个学生成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。 main() float s,gmax,gmin; scanf(“%f,“s); gmax=s;gmin=s; while(s=0) if(sgmax)gmax=s; if(_)gmin=s; s
6、canf(“%f“,s); printf(“gmax=%f/ngmin=%f/n“gmax,gmin);(分数:2.00)填空项 1:_20.以下程序是用来统计正整数的每位数字中零的个数,并求每位数字中最大者。请填空。 main() unsigned long num,max,t; int count; count=max=0: scanf(“%ld“,num); do t=_; if(t=0)+count; else if(maxt)max=t; num/=10; while(num); printf(“count=%d,max=%ld/n“,count,max);(分数:2.00)填空项
7、1:_三、B改错题/B(总题数:4,分数:8.00)21.#include“stdio.h“ void fact(int k) int i,s; s=s*i: return(s); 错误:_ 改正:_(分数:2.00)填空项 1:_22.运行以下程序的结果是 321。 main() int x; x=3; do printf(“%d“,x-); while(!x); 错误:_ 改正:_(分数:2.00)填空项 1:_23.程序输入 1,输出 One,输入其他,输出 Other。 main() scanf(“%d“,a); if(a=1)printf(“One/n“); else printf(
8、“Other/n“); 错误:_ 改正:_(分数:2.00)填空项 1:_24.main() int n; float s=1.0; for(n=10;n1;n-) s=s+1/n; printf(“%6.1f/n“,s); 错误:_ 改正:_(分数:2.00)填空项 1:_四、B程序阅读题/B(总题数:4,分数:16.00)25.#includestdio.h main() int i,j; inta5=2,4,6,9,12,b6=2,3,4,6,8,9;for(i=0;i5;i+) for(j=0;j6;j+) if(*(a+i)=*(b+j)printf(“%d“,*(a+i); pri
9、ntf(“/n“); 程序运行结果是:_(分数:4.00)填空项 1:_26.#includestdio.h main() int c; while(c=getchar()!=/n) switch(c-2) case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); case 4:putchar(c+2);break; printf(“/n“); 程序运行时,输入 2743CR,则运行结果是:_(分数:4.00)填空项 1:_27.main() int i=3,*p1; int a3=15,30,45
10、,*p2; pl=i;p2=a; pl=p2+2: printf(“%d,%d/n“,*p1,*p2); 程序运行结果是:_(分数:4.00)填空项 1:_28.#includestdio.h int f(int x,int y) return(xy)?x:y); main() int a,b; scanf(“%d,%d“,a,b); printf(“%d/n“,f(a,b); 程序运行时,从键盘输入 9,8回车,则运行结果是:_(分数:4.00)填空项 1:_五、B程序设计题/B(总题数:1,分数:8.00)29.从键盘上输入 20 个元素的值存入一维数组 a 中,然后将下标为(1、3、5、
11、7、9)的元素值赋值给数组 b,输出数组 b 的内容。(分数:8.00)_六、B填空题-单片机原理与接口技术(总题数:8,分数:16.00)30.8279 有_条命令,用命令字_位来表示。(分数:2.00)填空项 1:_31.若只需要开串行口中断,则 IE 的值应设置为_,若需要将外部中断 0 设置为下降沿触发,则执行的语句为_。(分数:2.00)填空项 1:_32.外围扩展芯片的选择方法有两种,它们分别是_和_。(分数:2.00)填空项 1:_33.MCS-51 单片机中,在 IP=0x00 时,优先级最高的中断是_,最低的是_。(分数:2.00)填空项 1:_34.执行下列指令组后,标志位
12、(OV)=_(P)=_。 MOV A,#0B4H ADD A,#00H SUBB A,#51H(分数:2.00)填空项 1:_35.当 MCS-51 引脚 1 信号有效时,表示从 P0 口稳定地送出了低 8 位地址。(分数:2.00)填空项 1:_36.MCS-51 的定时器用作定时,其定时时间与时钟频率和计数初值有关。用作计数时,最高计数频率的 1。(分数:2.00)填空项 1:_37.MCS-51 的特殊功能寄存器分布在 1 地址范围内。(分数:2.00)填空项 1:_七、B改错题-单片机原理与接口技术(总题数:2,分数:4.00)38.下面程序段是将外部 RAM30H 单元的内容送到 R
13、0。 MOV R0,#30H MOV A,R0 MOV R0,A 错误:_ 改正:_(分数:2.00)填空项 1:_39.下面程序段是将外部 RAM1000H 单元的内容送内部 RAM20H 单元。 MOVX DPTR,#1000H MOVX A,DPTR MOV 20H,A 错误:_ 改正:_(分数:2.00)填空项 1:_八、B程序阅读题-单片机原理与接口技(总题数:2,分数:8.00)40.下面子程序的功能是从串行接口接受一个字符,其定时器 T1 工作模式_,波特率为_。(时钟为 11.059MHz) START:MOV TMOD,#20H MOV TH1,#0E8H MOV TL1,#
14、0E8H SETB TR1 MOV SCON,#50H L1: JNB RI,L1 CLR RI MOV A,SBUF RET(分数:4.00)填空项 1:_41.下面是 8031 扩展 8255A 初始化程序,其 PA 口设置成_,PB 口和 PC 口设置成_。 MOV A,#90H MOV DPTR,#7FFFH MOVX DPTR,A MOV DPTR,#7FFCH MOVX A,DPTR MOV DPTR,#TFFDH MOVX DPTR,A(分数:4.00)填空项 1:_九、B程序设计题-单片机原理与接口技(总题数:1,分数:8.00)42.将 4 个单字节数放片内 30H39H,它
15、们求和结果放在片内 50H,51H 单元。(分数:8.00)_十、B十、应用题/B(总题数:1,分数:8.00)使用 89C51 和 ADC0809 的接口,采集 2 通道 10 个数据,存入内部 RAM 的 50H59H 单元,下面是查询方式程序段。请完成填空。(IN2 的地址为 7FFAH,P1.0 查询转换结束信号) ORG 0100H MOV R7,U /U MOV R0,#50H MOV U /U,#7FFAH NEXT:MOVX DPTR,U /U JB U /U,$ MOVX A,U /U MOV U /U,A INC U /U DJNZ RTU /U SJMP $ 答:_;_;
16、_;_; _;_;_;_。(分数:8.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_微型计算机原理与接口技术-5 答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:16,分数:16.00)1.在堆栈操作中,当进栈数据全部弹出后,这时 SP 指向( )(分数:1.00)A.栈底单元地址 B.7FH 单元C.栈底单元地址加 1D.栈底单元地址减 1解析:解析 SP 的内容就是栈底。2.C 语言中最基本的数据类型是( )(分数:1.00)A.整型、实型、逻辑型B.整型、实型、逻辑型、字
17、符型C.整型、字符型、逻辑型D.整型、实型、字符型 解析:3.下面不是中断响应条件的是( )(分数:1.00)A.CPU 处于开中断状态B.低级中断源 C.高级中断源D.一条指令执行完毕解析:解析 当系统在响应中断时不响应低级中断源的中断请求。4.MCS-51 单片机在访问外部数据存储器时,地址指针是( )(分数:1.00)A.DPTR B.PCC.PSWD.SP解析:解析 因为有地址重叠,所以用 DPTR 作为外部数据地址指针。5.执行 intx=2,y=3;后表达式 x=(y=3)的值是( )(分数:1.00)A.1 B.0C.2D.3解析:解析 y=3,由于 y=3 所以(y=3)=1,
18、因此 x=1。6.以下不属于单片机集成块型号的是( )(分数:1.00)A.80486DX B.83C51FAC.8097BHD.8051解析:7.从地址 2132H 开始有一条绝对转移指令 AJMP addr11,指令可能实现的转移范围是( )(分数:1.00)A.2000H27FFH B.2132H2832HC.2100H28FFHD.2000H3FFFH解析:解析 addr11=00000000000111111lllll(共 11 位),PC=2132H+2H=00100130100110100,注意当addr11=00000000000 时(填入 PC 后 11 位),PC=0010
19、00000000000000000=2000H,当 addr11=11111111111时(填入 PC 后 11 位),PC=0010011111111111=27FF。8.以下所列的 C 语言常量中,错误的是( )(分数:1.00)A.0xFFB.2LC.1.2e0.5 D./72解析:2e0.5,e 后面是整型常量。9.MCS-51 单片机在正常运行程序时 RST 引脚是( )(分数:1.00)A.高电平B.低电平 C.脉冲输入D.高阻态解析:10.下列程序段执行后,a 的值是( ) int*p,a=10,b=1; p=a;a=*p+b;(分数:1.00)A.12B.13C.10D.11
20、解析:解析 p 指针指向变量 a,因此*p=10,所以 a=*p+b=10+1=11。11.C 语言函数返回值的类型是( )(分数:1.00)A.return 语句中表达式类型B.调用该函数时主调函数的类型C.定义该函数时函数的类型 D.调用函数时系统临时决定解析:12.8051 定时器/计数器 T0 工作方式 0 和方式 1 的区别是( )(分数:1.00)A.前者是 16 位后者是 13 位B.前者是 16 位后者是 8 位C.前者是 13 位后者是 8 位D.前者是 13 位后者是 16 位 解析:13.协调 CPU 与外围设备之间的数据传送的是( )(分数:1.00)A.三态门B.锁存
21、器C.缓冲器 D.寄存器解析:14.MCS-51 内部 RAM 字节数是( )(分数:1.00)A.128B.256 C.107D.4K解析:15.带进位的循环移位指令是( )(分数:1.00)A.RLB.RRC.CLRD.RLC 解析:16.下列程序段的执行结果是( ) MOV R0,#30H SETB C CLR A ADDC A,#00H MOV R0,A(分数:1.00)A.(30=00HB.(30=01H C.(00=00HD.(00=01H解析:解析 ADDC A,#00H 将进位标志加进结果。二、B填空题/B(总题数:4,分数:8.00)17.inta,b;则表达式(a=2,b=
22、5,a+,b+,a+b)的值是 1。(分数:2.00)填空项 1:_ (正确答案:9)解析:解析 逗号表达式的结果是最后一个表达式的结果,因此 a+b=3+6。18.当 a=3,b=2,c=1 时,表达式 f=abc 的值是 1。(分数:2.00)填空项 1:_ (正确答案:0)解析:解析 ab=1,1c=0,所以 f=0。19.从键盘上输入若干个学生成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。 main() float s,gmax,gmin; scanf(“%f,“s); gmax=s;gmin=s; while(s=0) if(sgmax)gmax=s; if(_)
23、gmin=s; scanf(“%f“,s); printf(“gmax=%f/ngmin=%f/n“gmax,gmin);(分数:2.00)填空项 1:_ (正确答案:sgmin)解析:解析 根据上下文分析,显然要判断 s 的内容是否为最小。20.以下程序是用来统计正整数的每位数字中零的个数,并求每位数字中最大者。请填空。 main() unsigned long num,max,t; int count; count=max=0: scanf(“%ld“,num); do t=_; if(t=0)+count; else if(maxt)max=t; num/=10; while(num);
24、 printf(“count=%d,max=%ld/n“,count,max);(分数:2.00)填空项 1:_ (正确答案:num%10)解析:解析 根据上下文可以看出 t 中存放的是每位数字,因此取出每位数字的表达式为 num%10。三、B改错题/B(总题数:4,分数:8.00)21.#include“stdio.h“ void fact(int k) int i,s; s=s*i: return(s); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:int i,s;)解析:改正:将其修改为 int i,s=0; 解析 s 变量没有初值。22.运行以下程序的结果是
25、321。 main() int x; x=3; do printf(“%d“,x-); while(!x); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:while(!x))解析:改正:将其修改为 while(x!=0) 解析 while 循环条件逻辑错误。23.程序输入 1,输出 One,输入其他,输出 Other。 main() scanf(“%d“,a); if(a=1)printf(“One/n“); else printf(“Other/n“); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:if(a=1))解析:改正:将其修改为 i
26、f(a=1) 解析 if 语句条件表达式错误。24.main() int n; float s=1.0; for(n=10;n1;n-) s=s+1/n; printf(“%6.1f/n“,s); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:s=s+1/n;)解析:改正:将其修改为 s=s+1.0/n; 解析 表达式中类型错误。四、B程序阅读题/B(总题数:4,分数:16.00)25.#includestdio.h main() int i,j; inta5=2,4,6,9,12,b6=2,3,4,6,8,9;for(i=0;i5;i+) for(j=0;j6;j+)
27、 if(*(a+i)=*(b+j)printf(“%d“,*(a+i); printf(“/n“); 程序运行结果是:_(分数:4.00)填空项 1:_ (正确答案:2469)解析:解析 找出 a 和 b 数组中相同的元素,并输出,即 2,4,6,9。26.#includestdio.h main() int c; while(c=getchar()!=/n) switch(c-2) case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); case 4:putchar(c+2);break; pr
28、intf(“/n“); 程序运行时,输入 2743CR,则运行结果是:_(分数:4.00)填空项 1:_ (正确答案:66877)解析:解析 输入 2743 是字符,2 对应输出 66,7 没有输出,4 对应输出 8,3 对应输出 77,所以输出66877。27.main() int i=3,*p1; int a3=15,30,45,*p2; pl=i;p2=a; pl=p2+2: printf(“%d,%d/n“,*p1,*p2); 程序运行结果是:_(分数:4.00)填空项 1:_ (正确答案:45,15)解析:解析 p1 最后指向元素 45,p2 指向元素 15,所以输出 45,15。2
29、8.#includestdio.h int f(int x,int y) return(xy)?x:y); main() int a,b; scanf(“%d,%d“,a,b); printf(“%d/n“,f(a,b); 程序运行时,从键盘输入 9,8回车,则运行结果是:_(分数:4.00)填空项 1:_ (正确答案:9)解析:解析 f 函数的功能是返回一个较大的数,因此是 9。五、B程序设计题/B(总题数:1,分数:8.00)29.从键盘上输入 20 个元素的值存入一维数组 a 中,然后将下标为(1、3、5、7、9)的元素值赋值给数组 b,输出数组 b 的内容。(分数:8.00)_正确答案
30、:()解析:main() int m 20,n10; int a,b=0; for(a=0;a20;a+) scanf(“%d“,ma); if(a%2=1)nb=ma;b+; for(b=0;b10;b+) printf(“%d“,nb); 六、B填空题-单片机原理与接口技术(总题数:8,分数:16.00)30.8279 有_条命令,用命令字_位来表示。(分数:2.00)填空项 1:_ (正确答案:8 D7D5)解析:解析 8279 的命令如下: (1)键盘/显示器方式设置,命令代码:0 0 0 D D K K K (2)程序时钟,命令代码:0 0 1 P P P P P (3)读 FIF0
31、/传感器 RAM,命令代码:0 1 0 AI X A A A X=任意 (4)读显示器 RAM,命令代码:0 1 1 AI A A A A (5)写显示器 RAM,命令代码:1 0 0 AI A A A A (6)显示器写入禁止/空格,命令代码:1 0 1 X IW IW BL BL X=任意 (7)消除,命令代码:1 1 0 CD CD CD CF CA (8)中断结束/出错方式设置,命令代码:1 1 1 E X X X X X=任意 因此共有 8 条命令,观察命令代码可以发现 D7,D6,D5 是命令关键位。31.若只需要开串行口中断,则 IE 的值应设置为_,若需要将外部中断 0 设置为
32、下降沿触发,则执行的语句为_。(分数:2.00)填空项 1:_ (正确答案:90H SETB TCON.0)解析:解析 ES=1 串口中断允许,EA=1 中断允许,所以 IE=10010000B=90H。IT0=1。32.外围扩展芯片的选择方法有两种,它们分别是_和_。(分数:2.00)填空项 1:_ (正确答案:线选法 译码法)解析:33.MCS-51 单片机中,在 IP=0x00 时,优先级最高的中断是_,最低的是_。(分数:2.00)填空项 1:_ (正确答案:外部中断 0 串行口中断)解析:34.执行下列指令组后,标志位(OV)=_(P)=_。 MOV A,#0B4H ADD A,#0
33、0H SUBB A,#51H(分数:2.00)填空项 1:_ (正确答案:0 0)解析:解析 因为没有溢出 OV=0,因为 A=1O110100B-01010001B=01100011B 结果 A 中 1 的个数为偶数,所以 p=0。35.当 MCS-51 引脚 1 信号有效时,表示从 P0 口稳定地送出了低 8 位地址。(分数:2.00)填空项 1:_ (正确答案:ALE)解析:36.MCS-51 的定时器用作定时,其定时时间与时钟频率和计数初值有关。用作计数时,最高计数频率的 1。(分数:2.00)填空项 1:_ (正确答案:1/12)解析:解析 因为 12 时钟为一个机器周期,所以为 1
34、/12。37.MCS-51 的特殊功能寄存器分布在 1 地址范围内。(分数:2.00)填空项 1:_ (正确答案:80HFOH)解析:七、B改错题-单片机原理与接口技术(总题数:2,分数:4.00)38.下面程序段是将外部 RAM30H 单元的内容送到 R0。 MOV R0,#30H MOV A,R0 MOV R0,A 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:MOV A,RO)解析:改正:MOVX A,R0 解析 片内传送指令不能到外部 ROM 中39.下面程序段是将外部 RAM1000H 单元的内容送内部 RAM20H 单元。 MOVX DPTR,#1000H
35、MOVX A,DPTR MOV 20H,A 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:MOVX DPTR,#1000H)解析:改正:MOV DPTR,#1000H 解析 DPTR 是内部存储单元八、B程序阅读题-单片机原理与接口技(总题数:2,分数:8.00)40.下面子程序的功能是从串行接口接受一个字符,其定时器 T1 工作模式_,波特率为_。(时钟为 11.059MHz) START:MOV TMOD,#20H MOV TH1,#0E8H MOV TL1,#0E8H SETB TR1 MOV SCON,#50H L1: JNB RI,L1 CLR RI MOV
36、A,SBUF RET(分数:4.00)填空项 1:_ (正确答案:2 1200b/s)解析:解析 因为 TMOD=00100000B,所以是方式 2。串口 SCON=50H=01010000B,工作方式 1,计数初值为E8H=232,代入公式:波特率=2SMODf osc/(3212(256-232),SMOD=0,所以:波特率=11.059106/(38424)=1199.97b/s=1200b/s。41.下面是 8031 扩展 8255A 初始化程序,其 PA 口设置成_,PB 口和 PC 口设置成_。 MOV A,#90H MOV DPTR,#7FFFH MOVX DPTR,A MOV
37、DPTR,#7FFCH MOVX A,DPTR MOV DPTR,#TFFDH MOVX DPTR,A(分数:4.00)填空项 1:_ (正确答案:输入方式 输出方式)解析:解析 98H=10010000B,对应 D7,D6,D5,D4,D3,D2,D1,D0。D7=1 特征位。D6D5=00,A 口方式 0。D4=1,A 口输入方式。D3=0,C 口高 4 位输出方式。D2=0,B 口方式 0。D1=0,B 口输出方式。D0=0,C 口低 4 位输出方式。九、B程序设计题-单片机原理与接口技(总题数:1,分数:8.00)42.将 4 个单字节数放片内 30H39H,它们求和结果放在片内 50
38、H,51H 单元。(分数:8.00)_正确答案:()解析:ORG 1000H MOV R7,#0AH MOV R0,#30H CLR A MOV 51H,A LOOP: ADD A,R0 JNC NEXT INC 51H NEXT: INC R0 DJNZ R7,LOOP MOV 50H,A SJMP $ END十、B十、应用题/B(总题数:1,分数:8.00)使用 89C51 和 ADC0809 的接口,采集 2 通道 10 个数据,存入内部 RAM 的 50H59H 单元,下面是查询方式程序段。请完成填空。(IN2 的地址为 7FFAH,P1.0 查询转换结束信号) ORG 0100H M
39、OV R7,U /U MOV R0,#50H MOV U /U,#7FFAH NEXT:MOVX DPTR,U /U JB U /U,$ MOVX A,U /U MOV U /U,A INC U /U DJNZ RTU /U SJMP $ 答:_;_;_;_; _;_;_;_。(分数:8.00)(1).(分数:1.00)解析:填空项 1:_ (正确答案:DPTR)解析:填空项 1:_ (正确答案:A)解析:填空项 1:_ (正确答案:P1.0)解析:填空项 1:_ (正确答案: DPTR)解析:填空项 1:_ (正确答案: R0)解析:填空项 1:_ (正确答案:R0)解析:填空项 1:_ (正确答案:NEXT)解析: