1、微型计算机原理与接口技术-8 及答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:16,分数:16.00)1.若 inti,j;则 for(i=j=0;i10j8;i+,j+ =3)控制的循环体执行的次数是( )(分数:1.00)A.9B.8C.2D.32.MCS-51 的程序计数器 PC 为 16 位计数器,因此其寻址范围是( )(分数:1.00)A.8KB.16KC.32KD.64K3.在扩展系统中,能够提供地址信号的高 8 位的端口是( )(分数:1.00)A.P0 口B.P1 口C.P2 口D.P3 口4.8051 定时器/计数器 T0 工作方式 0 和
2、方式 1 的区别是( )(分数:1.00)A.前者是 16 位后者是 13 位B.前者是 16 位后者是 8 位C.前者是 13 位后者是 8 位D.前者是 13 位后者是 16 位5.在堆栈中压入一个数据时( )(分数:1.00)A.先压栈,再令 SP+1B.先令 SP+1,再压栈C.先压栈,再令 SP-1D.先令 SP-1,再压栈6.MCS-51 内部 RAM 字节数是( )(分数:1.00)A.128B.256C.107D.4K7.8031 的外部程序存储器常采用的芯片是( )(分数:1.00)A.2764B.8255C.74LS06D.21148.共阴极 LED 数码管显示字符”2”的
3、段码是( )(分数:1.00)A.02HB.FEHC.5BHD.A4H9.下面不是中断响应条件的是( )(分数:1.00)A.CPU 处于开中断状态B.低级中断源C.高级中断源D.一条指令执行完毕10.用 8 位(bit)二进制能够表示的无符号数的范围是( )(分数:1.00)A.253B.254C.255D.25611.若定义 char s10;不表示 s1的地址的是( )(分数:1.00)A.s+1B.s+C.s0+1D.s112.协调 CPU 与外围设备之间的数据传送的是( )(分数:1.00)A.三态门B.锁存器C.缓冲器D.寄存器13.当 x 为大于 1 的奇数时,值为 0 的表达式
4、是( )(分数:1.00)A.x%2=1B.x%2=0C.x%2!=0D.x/214.以下集成块型号中不属于 MCS-96 系列单片机型号的是( )(分数:1.00)A.8095BHB.83C51FBC.80C198D.80C196KB15.对以下定义的表述中,正确的是( ) struct node int num;char name10;stud;(分数:1.00)A.stud 是一个结构体变量B.stud 是一个结构体类型C.node 是一个结构体数据D.node 是一个结构体变量16.带进位的循环移位指令是( )(分数:1.00)A.RLB.RRC.CLRD.RLC二、B填空题/B(总题
5、数:4,分数:8.00)17.若 int s=6;则表达式 s%2+(s+1)%2 的值是 1。(分数:2.00)填空项 1:_18.若 a=5,b=2,c=1,则表达式 a-bc|b=c 的值是 1。(分数:2.00)填空项 1:_19.鸡兔共有 30 只,脚共有 90 个,下面程序是计算鸡兔各有多少只。请填空。 main() int x,y; for(x=1:x=29:x+) y=30-x; if(_)printf(“%d,%d/n“,x,y); (分数:2.00)填空项 1:_20.输入两个整数,n1,n2(要求 n1n2),统计两整数范围内的素数的个数。请填空。 #include“ma
6、thh“ #include“stdioh“ 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(“/n 请输入两个数:“); scanf(“%d,%d“,a,b); if(ab)_ for(j=a;j=b,j+) if(prime(j)n+; printf(“a=%4d,b=%4d,n=%4d/n“a,b,n);(分数:2.00)填空项 1:_三、B改错题/B(总题数:4,分数:8.00)21.main() int x=1;y; y=x+
7、: printf(“y=%d“,y); int z; z=+x: printf(“z=%d/n“,z); 错误:_ 改正:_(分数:2.00)填空项 1:_22.main() int s,i; for(s=0,i=1;i3;i+,s+ =i) printf(“%d/n“,s); 错误:_ 改正:_(分数:2.00)填空项 1:_23.int ff(int n) static int f=1; f=f*n: return f; main() int i; for(i=1;i=5;i+);printf(“%d/n“,ff(i); 错误:_ 改正:_(分数:2.00)填空项 1:_24.下面程序的输
8、入数据的形式是 Input number:4.5 2回车 main() int a;float f; printf(“/nInput number:“); scanf(“%f,%d“,f,a); printf(“/nf=%f,a=%d/n”,f,a); 错误:_ 改正:_(分数:2.00)填空项 1:_四、B程序阅读题/B(总题数:4,分数:16.00)25.#includestdio.h main() int y; for(y=5;y0;y-) if(y%2=0)continue; printf(“%d“,y); 程序运行结果是:_(分数:4.00)填空项 1:_26.#includestd
9、io.h int main() int i,n; double fact; scanf(“%d“,n); fact=1; for(i=1;i=n;i+) fact* =i: printf(“%.0f/n“,fact); 程序运行时输入 5回车,则程序运行结果是:_(分数:4.00)填空项 1:_27.#includestdio.h main() float a,b scanf(“%f“,a); if(a10.0)b=1.0/2; elseif(a0.5)(a!=2.0)b=1.0/(a+2.0); else if(a10.0)b=1.0/2; else b=10.0; printf(“%f/n
10、“,a); 程序运行时输入 2.0回车,则程序的输出结果是:_(分数:4.00)填空项 1:_28.#includestdio.h main() char c; int v0=0,v1=0,v2=0; do switch(c=getchar() casea: casee: casei: caseo: caseu:v1+ =1: default:v0+ =1;v2+ =1; while(c!=/n); printf(“v0=%d,v1=%d,v2=%d/n”,v0,v1,v2); 程序运行时,从键盘输入ADescriptor回车,则程序的运行结果是:_(分数:4.00)填空项 1:_五、B程序设
11、计题/B(总题数:1,分数:8.00)29.编制程序,输入 n 个整数(n 从键盘输入,n0),输出它们的偶数和。(分数:8.00)_六、B填空题-单片机原理与接口技术(总题数:8,分数:16.00)30.MCS-51 堆栈寄存器 SP 是_位寄存器,存放_。(分数:2.00)填空项 1:_31.MCS-51 的 P0P3 口中,_为真正的双向口,_为准双向口。(分数:2.00)填空项 1:_32.执行完下列段指令后(A)=_,(B)=_ MOV A,#08H MOV B,#45H PUSH A PUSH B POP A POP B(分数:2.00)填空项 1:_33.下列程序段执行后,(7E
12、H)=_,(7FH)=_。 MOV R0,#7EH MOV 7EH,#0FFH MOV 7FH,#40H INC R0 INC R0 INC R0(分数:2.00)填空项 1:_34.若 IT1=0,当引脚 1 为低电平的时候,INT0 的中断标志位 2 才能复位。(分数:2.00)填空项 1:_填空项 1:_35.片内 RAM 可进行位寻址的空间位地址范围是 1。(分数:2.00)填空项 1:_36.MCS-51 指令系统中 direct 表示的含义是: 1。(分数:2.00)填空项 1:_37.如果(P 0)=65H,当执行下列程序段后执行后(P 0)=_。 CPL P0.2 SETB C
13、 MOV P0.4,C(分数:2.00)填空项 1:_七、B改错题-单片机原理与接口技术(总题数:2,分数:4.00)38.下面程序将片内 40H-46H 单元内容的高位清零,保持低位不变。 ORG 1000H MOV R7,#07H MOV R0,40H L00P: MOV A,R0 ANL A,0FH MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ END 错误:_ 改正:_(分数:2.00)填空项 1:_39.已知:(R0)=4BH,(A)=84H,片内 RAM(4BH)=7FH,(40)=20H,执行程序后,(R0)=35H,(A)=7FH,(4BH)=20H,
14、(40H)=7FH MOV A,R0 MOV R0,40H MOV 40H,ACC MOV R0,#35H 错误:_ 改正:_(分数:2.00)填空项 1:_八、B程序阅读题-单片机原理与接口技(总题数:2,分数:8.00)40.下面程序是将片内 RAM_开始的单元中有_字节的二进制数求它们之和(和256)。 ADDIO: MOV R0,30H MOV R7,#0AH MOV A,RO LOOP: INC R0 ADD A,R0 DJNZ R7,LOOP MOV 30H,A RET(分数:4.00)填空项 1:_41.下面程序将片内 RAM30H 单元开始的_字节数据传送到片外 RAM_开始的
15、单元中去。 START: MOV RO,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R7,LOOP RET(分数:4.00)填空项 1:_九、B程序设计题-单片机原理与接口技(总题数:1,分数:8.00)42.编程实现数据块传送,将片内 RAM 从 30H 开始的连续 32 个单元的内容传递给片内 RAM 从 60H 开始的连续 32 个单元。(分数:8.00)_十、B十、应用题/B(总题数:1,分数:8.00)下面程序段利用 D/A 转换器产生三角波,请完成程序段。 MOV
16、U /U,#7FFFH MOV U /U,#00H UP: MOVX U /U,A INC A JNZ U /U MOV A,U /U DOWN: MOVX U /U,A DEC U /U JNZ U /U SJMP UP 答:_;_;_;_; _;_;_;_。(分数:8.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_微型计算机原理与接口技术-8 答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:16,分数:16.00)1.若 inti,j;则 for(i=j=0;i10j8;i
17、+,j+ =3)控制的循环体执行的次数是( )(分数:1.00)A.9B.8C.2D.3 解析:解析 j=0,3,6 时进入循环。2.MCS-51 的程序计数器 PC 为 16 位计数器,因此其寻址范围是( )(分数:1.00)A.8KB.16KC.32KD.64K 解析:解析 216/1024=64K。3.在扩展系统中,能够提供地址信号的高 8 位的端口是( )(分数:1.00)A.P0 口B.P1 口C.P2 口 D.P3 口解析:4.8051 定时器/计数器 T0 工作方式 0 和方式 1 的区别是( )(分数:1.00)A.前者是 16 位后者是 13 位B.前者是 16 位后者是 8
18、 位C.前者是 13 位后者是 8 位D.前者是 13 位后者是 16 位 解析:5.在堆栈中压入一个数据时( )(分数:1.00)A.先压栈,再令 SP+1B.先令 SP+1,再压栈 C.先压栈,再令 SP-1D.先令 SP-1,再压栈解析:6.MCS-51 内部 RAM 字节数是( )(分数:1.00)A.128B.256 C.107D.4K解析:7.8031 的外部程序存储器常采用的芯片是( )(分数:1.00)A.2764 B.8255C.74LS06D.2114解析:8.共阴极 LED 数码管显示字符”2”的段码是( )(分数:1.00)A.02HB.FEHC.5BH D.A4H解析
19、:9.下面不是中断响应条件的是( )(分数:1.00)A.CPU 处于开中断状态B.低级中断源 C.高级中断源D.一条指令执行完毕解析:解析 当系统中断时不响应低级中断源。10.用 8 位(bit)二进制能够表示的无符号数的范围是( )(分数:1.00)A.253B.254C.255D.256 解析:解析 2 8=256。11.若定义 char s10;不表示 s1的地址的是( )(分数:1.00)A.s+1B.s+ C.s0+1D.s1解析:解析 数组名是常量,不能 s+。12.协调 CPU 与外围设备之间的数据传送的是( )(分数:1.00)A.三态门B.锁存器C.缓冲器 D.寄存器解析:
20、13.当 x 为大于 1 的奇数时,值为 0 的表达式是( )(分数:1.00)A.x%2=1B.x%2=0 C.x%2!=0D.x/2解析:解析 x 为奇数除 2 等于 1,不等于 0,所以 x%2=0 为 0。14.以下集成块型号中不属于 MCS-96 系列单片机型号的是( )(分数:1.00)A.8095BHB.83C51FB C.80C198D.80C196KB解析:15.对以下定义的表述中,正确的是( ) struct node int num;char name10;stud;(分数:1.00)A.stud 是一个结构体变量 B.stud 是一个结构体类型C.node 是一个结构体
21、数据D.node 是一个结构体变量解析:解析 node 结构体变量。16.带进位的循环移位指令是( )(分数:1.00)A.RLB.RRC.CLRD.RLC 解析:二、B填空题/B(总题数:4,分数:8.00)17.若 int s=6;则表达式 s%2+(s+1)%2 的值是 1。(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 6 除 2 余 0,7 除 2 余 1,0+1=1。18.若 a=5,b=2,c=1,则表达式 a-bc|b=c 的值是 1。(分数:2.00)填空项 1:_ (正确答案:0)解析:解析 先算术,后逻辑,再比较运算。19.鸡兔共有 30 只,脚共有 90
22、个,下面程序是计算鸡兔各有多少只。请填空。 main() int x,y; for(x=1:x=29:x+) y=30-x; if(_)printf(“%d,%d/n“,x,y); (分数:2.00)填空项 1:_ (正确答案:2*x+4*y= =90)解析:20.输入两个整数,n1,n2(要求 n1n2),统计两整数范围内的素数的个数。请填空。 #include“mathh“ #include“stdioh“ 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
23、,n=0; printf(“/n 请输入两个数:“); scanf(“%d,%d“,a,b); if(ab)_ for(j=a;j=b,j+) if(prime(j)n+; printf(“a=%4d,b=%4d,n=%4d/n“a,b,n);(分数:2.00)填空项 1:_ (正确答案:j=a;a=b;b=j)解析:解析 注意循环条件。三、B改错题/B(总题数:4,分数:8.00)21.main() int x=1;y; y=x+: printf(“y=%d“,y); int z; z=+x: printf(“z=%d/n“,z); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确
24、答案:错误:int x=1;y;)解析:改正:int x=1,y; 解析 申明变量时同类型变量名间用,隔开。22.main() int s,i; for(s=0,i=1;i3;i+,s+ =i) printf(“%d/n“,s); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:printf(“%d/n“,s);)解析:改正:将其修改为 printf(“%d/n“,s); 解析 printf 函数的一般形式:printf(“格式控制字符串“,输出数据表列);而“s“为对象地址。23.int ff(int n) static int f=1; f=f*n: return f
25、; main() int i; for(i=1;i=5;i+);printf(“%d/n“,ff(i); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:for(i=1;i=5;i+);)解析:改正:将其修改为 for(i=1;i=5;i+) 解析 for 语句形式:for(表达式 1;表达式 2;表达式 3)循环语句 s;24.下面程序的输入数据的形式是 Input number:4.5 2回车 main() int a;float f; printf(“/nInput number:“); scanf(“%f,%d“,f,a); printf(“/nf=%f,a=%d
26、/n”,f,a); 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:scanf(“%f,%d“,f,a);)解析:改正:将其修改为 scanf(“%f%d“,f,a); 解析 scanf 函数的一般形式为:scanf(“格式控制字符串“,输入对象地址表列);四、B程序阅读题/B(总题数:4,分数:16.00)25.#includestdio.h main() int y; for(y=5;y0;y-) if(y%2=0)continue; printf(“%d“,y); 程序运行结果是:_(分数:4.00)填空项 1:_ (正确答案:531)解析:解析 y=5,3,1 时
27、循环输出。continue;语句结束本次循环。26.#includestdio.h int main() int i,n; double fact; scanf(“%d“,n); fact=1; for(i=1;i=n;i+) fact* =i: printf(“%.0f/n“,fact); 程序运行时输入 5回车,则程序运行结果是:_(分数:4.00)填空项 1:_ (正确答案:120)解析:解析 12345=12027.#includestdio.h main() float a,b scanf(“%f“,a); if(a10.0)b=1.0/2; elseif(a0.5)(a!=2.0)
28、b=1.0/(a+2.0); else if(a10.0)b=1.0/2; else b=10.0; printf(“%f/n“,a); 程序运行时输入 2.0回车,则程序的输出结果是:_(分数:4.00)填空项 1:_ (正确答案:0.500000)解析:解析 注意嵌套条件语句。28.#includestdio.h main() char c; int v0=0,v1=0,v2=0; do switch(c=getchar() casea: casee: casei: caseo: caseu:v1+ =1: default:v0+ =1;v2+ =1; while(c!=/n); prin
29、tf(“v0=%d,v1=%d,v2=%d/n”,v0,v1,v2); 程序运行时,从键盘输入ADescriptor回车,则程序的运行结果是:_(分数:4.00)填空项 1:_ (正确答案:v0=12,v1=3,v2=12)解析:解析 当 c=A,D,s,c,r,p,t,r,/n 时,v0 和 v2 共加 9 次,对应 c=e,i,o 时 v1 加 3 次,v0 和 v2 加 3 次。所以,v0=9+3=12,v2=9+3=12,v1=3。五、B程序设计题/B(总题数:1,分数:8.00)29.编制程序,输入 n 个整数(n 从键盘输入,n0),输出它们的偶数和。(分数:8.00)_正确答案:
30、()解析:#includestdio.h void main() int i,n,x,sum=0; scanf(“%d“,n); for(i=1;i=n;i+) scanf(“%d“,x); if(x%2= =0)sum+=x; pfintf(“%d/n“,sum); 六、B填空题-单片机原理与接口技术(总题数:8,分数:16.00)30.MCS-51 堆栈寄存器 SP 是_位寄存器,存放_。(分数:2.00)填空项 1:_ (正确答案:8 堆栈栈顶的地址)解析:31.MCS-51 的 P0P3 口中,_为真正的双向口,_为准双向口。(分数:2.00)填空项 1:_ (正确答案:P0 P1P3
31、)解析:32.执行完下列段指令后(A)=_,(B)=_ MOV A,#08H MOV B,#45H PUSH A PUSH B POP A POP B(分数:2.00)填空项 1:_ (正确答案:45H 08H)解析:解析 堆栈后进先出。33.下列程序段执行后,(7EH)=_,(7FH)=_。 MOV R0,#7EH MOV 7EH,#0FFH MOV 7FH,#40H INC R0 INC R0 INC R0(分数:2.00)填空项 1:_ (正确答案:00H 41H)解析:34.若 IT1=0,当引脚 1 为低电平的时候,INT0 的中断标志位 2 才能复位。(分数:2.00)填空项 1:
32、_ (正确答案:P3.3)填空项 1:_ (正确答案:IEO)解析:35.片内 RAM 可进行位寻址的空间位地址范围是 1。(分数:2.00)填空项 1:_ (正确答案:00H7FH)解析:36.MCS-51 指令系统中 direct 表示的含义是: 1。(分数:2.00)填空项 1:_ (正确答案:片内存储器地址)解析:37.如果(P 0)=65H,当执行下列程序段后执行后(P 0)=_。 CPL P0.2 SETB C MOV P0.4,C(分数:2.00)填空项 1:_ (正确答案:71H)解析:解析 65H=01100101B,执行程序段后为:01110001B=71H。七、B改错题-
33、单片机原理与接口技术(总题数:2,分数:4.00)38.下面程序将片内 40H-46H 单元内容的高位清零,保持低位不变。 ORG 1000H MOV R7,#07H MOV R0,40H L00P: MOV A,R0 ANL A,0FH MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ END 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:MOV R0,40H)解析:改正:MOV R0,#40H 解析 立即数表达错误。39.已知:(R0)=4BH,(A)=84H,片内 RAM(4BH)=7FH,(40)=20H,执行程序后,(R0)=35H,(A
34、)=7FH,(4BH)=20H,(40H)=7FH MOV A,R0 MOV R0,40H MOV 40H,ACC MOV R0,#35H 错误:_ 改正:_(分数:2.00)填空项 1:_ (正确答案:错误:MOV 40H,ACC)解析:改正:MOV 40H,A 解析 前面用 A,后面要一致。八、B程序阅读题-单片机原理与接口技(总题数:2,分数:8.00)40.下面程序是将片内 RAM_开始的单元中有_字节的二进制数求它们之和(和256)。 ADDIO: MOV R0,30H MOV R7,#0AH MOV A,RO LOOP: INC R0 ADD A,R0 DJNZ R7,LOOP M
35、OV 30H,A RET(分数:4.00)填空项 1:_ (正确答案:30H 10)解析:解析 MOV R0,30H 指令说明是片内 30H 单元开始,NOV R7,#0AH 指令说明计数指针为十,ADD A,R0 和 DJNZ R7,LOOP 配合进行十和数相加。41.下面程序将片内 RAM30H 单元开始的_字节数据传送到片外 RAM_开始的单元中去。 START: MOV RO,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R7,LOOP RET(分数:4.00)填空项 1
36、:_ (正确答案:15 3000H)解析:解析 STRAT: MOV R0,#30H ;片内开始存储单元 MOV R7,#0FH ;指针为十五个字节 MOV DPTR,#3000H ;片外开始存储单元 LOOP: MOV A,R0 MOVX DPTR,A ;传送开始 INC R0 ;片内地址加一 INC DPTR ;片外地址加一 DJNZ R7,LOOP ;指针为 0 传送结束 RET九、B程序设计题-单片机原理与接口技(总题数:1,分数:8.00)42.编程实现数据块传送,将片内 RAM 从 30H 开始的连续 32 个单元的内容传递给片内 RAM 从 60H 开始的连续 32 个单元。(分
37、数:8.00)_正确答案:()解析:ORG 1000H MOV R7,#20H MOV R0,#30H MOV R1,#60H LOOP: MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R7,LOOP SJMP $ END十、B十、应用题/B(总题数:1,分数:8.00)下面程序段利用 D/A 转换器产生三角波,请完成程序段。 MOV U /U,#7FFFH MOV U /U,#00H UP: MOVX U /U,A INC A JNZ U /U MOV A,U /U DOWN: MOVX U /U,A DEC U /U JNZ U /U SJMP UP 答:_;_;_;_; _;_;_;_。(分数:8.00)(1).(分数:1.00)解析:填空项 1:_ (正确答案:A)解析:填空项 1:_ (正确答案: DPTR)解析:填空项 1:_ (正确答案:UP)解析:填空项 1:_ (正确答案:#0FEH)解析:填空项 1:_ (正确答案: DPTR)解析:填空项 1:_ (正确答案:A)解析:填空项 1:_ (正确答案:DOWN)解析: