您的当前位置:首页微型计算机原理与接口技术复习题

微型计算机原理与接口技术复习题

2024-04-15 来源:乌哈旅游
C语言程序设计

一、单项选择题:在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号。错选、多选或未选均无分。 1. 若有代数式

3ae:,则不正确的C语言表达式为 【 C 】 bc A. a/b/c*e*3 B. 3*a*e/b/c C. 3*a*e/b*c D. a*e/c/b*3

2. 通常使用后缀表明数的各种进制,以下叙述不正确的是 A. 后缀B:二进制 B. 后缀H:十六进制 C. 后缀D:十进制 D. 后缀A:八进制

3. 设float x,由键盘输入:12.45, 能正确读入数据的输入语句是 A.scanf(\"%5f\ B. scanf(\"%5d\C.scanf(\"%f\

D. scanf(\"%s\

4. 完成C源程序编辑后,到生成执行文件,C语言处理系统必须执行的步骤依次为: A. 连接、编译 B. 编译、连接 C. 连接、运行 D. 运行5. 以下关于运算符优先级的描述中,正确的是 A.!(逻辑非)>算术运算>关系运算>&&(逻辑与)>‖(逻辑或)>赋值运算 B. &&(逻辑与)>算术运算>关系运算>‖(逻辑或)>赋值运算 C. 关系运算>算术运算>&&(逻辑与)>‖(逻辑或)>赋值运算

D. 赋值运算>算术运算>关系运算>&&(逻辑与)>‖(逻辑或)

6. 下面函数调用语句含有实参的个数为

func((exp1,exp2),(exp3,exp4,exp5));

A. 1 B. 2 C. 4 D. 5

4. 和十进制数255相等的二进制数是 A. 1101110 B.11111110 C. 10000000 D.11111111 D.11111111

7. 一个C程序的执行是从 A. 本程序的main函数开始,到main函数结束

B. 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C. 本程序的main函数开始,到本程序文件的最后一个函数结束 D. 本程序文件的第一个函数开始,到本程序main函数结束

8. 已知字母A的ASCII码为十进制的65,则下面程序的输出是 main()

【 D 】 【A 】 【 B 】 【 A 】 B 】 D 】 A 】 A 】

【【【【{ char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';

printf(\"%d,%c\n\}

A. 67,D B. B,C C. C,D D.不确定的值

9. C语言规定,函数返回值的类型是由 【 D 】 A. return语句中的表达式类型所决定 B. 调用该函数时的主调函数类型所决定 C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定 10.16位二进制所表示的无符号整数,其相应的十进制数围是 【 D 】 A.0~65536

B.1~65536

C.1~65535

D.0~65535

11. 下列说法中正确的是 【C 】 A.在执行C程序时不是从main()函数开始 B.C程序书写格式限制严格,一行必须写一个语句 C.C程序书写格式比较自由,一个语句可以分写在多行上 D.C程序书写格式严格,要求一行必须写一个语句,并要有行号

12. 若有定义int a[lO];,则对a数组元素的正确引用是 【C 】 A.a[lO] B.a(10) C.a[10—10] D.a[10.0]

13. 下面函数调用语句含有实参的个数为 【B 】

func(a+b,(x,y), exp((exp1,exp2),(exp3,exp4,exp5)));

A. 7 B. 3 C. 4 D. 5

14. 下列叙述中正确的是 【 A】 A.指令由操作数和操作码两部分组成 B.常用参数xxMB表示计算机的速度 C.计算机的一个字长总是等于两个字节 D.计算机语言是完成某一任务的指令集

15.在计算机系统中,可执行程序是 【C】 A.源代码 B.汇编语言代码 C.机器语言代码 D.ASCIl码

16. 下列说法中错误的是 【 C 】 A. 程序的执行总是从主函数开始。 B. 主函数可以调用任何非主函数的其它函数 C. 程序可以从任何非主函数开始执行 D. 任何非主函数可以调用其它任何非主函数 二、填空题:请在每小题的空格中填上正确答案。错填、不填均无分。

1. 微处理器是微型计算机的核心芯片,是将计算机中的运算器和控制器集成在一个很小的硅片上制

成的集成电路,通常用英文字母简写为 CPU 。

2. 程序三种最基本的结构是顺序结构、 选择结构 、 循环结构 。 3. 在C语言中,一个函数一般由两个部分组成,他们是 函数名 和 函数体 。 4. 设int x=3,y=5; 则执行printf(“%d\\n”,x&&y);后输出 1 。 5. 以下程序是求100以能被5和被7同时整除的所有数之和。 main()

{ int i=0,s=0;

while(i<100)

if( i%5= =0&&i%7= =0 ) s=s+i++;

printf(\"s=%d\n\",s); }

6. 已知x=5,y=6,执表达式x>2‖y<5的值为 1 。 7.若函数调用语句为f(a,b,f(a+b,a-b,b));,则函数f的参数个数是____3___。 8.设int x=7,y=3,则表达式x%y+x/y的值是_____3___。

9. 十进制数—127用8位二进制数补码表示时,应为____81H ____H。

10. 任何一个数组的数组元素具有相同的名字和 数据类型 。 三、改错题:每小题只有一个错误或不妥,请指出,并将其改正。 1. 下面程序的功能是求数组中最大元素的下标。 main( )

{ int s[100],i,k; for(i=0;i<100;i++) scanf(\"%d\ for(i=0,k=0;i<100;i++) if(s[i]>s[k]) k=i; printf(\"k=%d\\n\ }

错误: scanf(\"%d\改正: scanf(\"%d\2. 下面程序的功能是计算30个数的平均值。

void main( ) { int n=30,i=1,t; float sum=0; while(i<30) { scanf(\"%d\

sum=sum+t;

i++; }

aver=sum/n;

printf(\"aver=%5.1f\\n\}

错误: while(i<30) 改正: while(i<=30) 3.下面add函数的功能是求两个参数的和,并将和值返回调用函数。

void add(float a,float b) { }

错误: void add(float a,float b) 改正: float add(float a,float b) 4.下面的程序是要打印出1到10的十个整数值。

main( ) { int n=1; while(n<10)

{

printf(“%d”,n); n++; } }

错误: while(n<10) 改正: while(n<=10) 5. 下面程序的功能是计算圆的面积。

main( ) { float r; float s;

printf(\"Enter a value of radius:\\n\"); scanf(\"%f\s=3.14*r*r; float c; c=a+b; return c;

printf(\"The area of circle is %d \\n\}

错误: printf(\"s=%d \\n\

改正: printf(\"s=%f \\n\

6. 程序功能:输入的学生成绩如果不在0~100之间,则显示出错信息。 main( ) { int s;

scanf(\"%d\if(0<=s<=100)

printf(\"Input score is=%d \\n\else

printf(\"Input score is wrong! \");

}

错误: if(0<=s<=100) 改正: if(s >=0&&s <=100)

7. 以下程序是计算s=1*2*3*4*5的值

main( ) { int k,s=1; for(k=1;k<5;k++) s=s*k;

printf(“s=%d\\n”,s); }

错误: for(k=1;k<5;k++) 改正: for(k=1;k<6;k++)或for(k=1;k<=5;k++)

四、程序阅读题:请阅读下列程序,写出程序运行结果。 1. main()

{ int numl,num2,x;

scanf(\"%d%d\",&numl,&num2); if(numl>num2)

x=numl;numl=num2;num2=x; printf(\"%d,%d\\n\",num1,num2); )

程序运行时输入:51,32

程序运行结果为: 32,51 2. main()

{ int a,b,c;

printf (\"请输入3个整数:\"); scanf (\"%d,%d,%d\",&a,&b,&c); if(aif(belse if(a程序运行时输入的3个数为: 31,62,49 程序运行结果为: max=62 3. main() { int x,i; for(i=1;i<=5;i++) { scanf(\"%d \",&x);

if(x%2= =0) printf(\"x=%d\\n\",x); } }

程序运行时输入的5个数为:13 14 15 16 17 程序运行结果为: x=14

x=16

4. #include

void main( ) {

int i,j,m,n; i=3; j=5; m=++i; n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n); }

程序运行结果为: 4,6,4,5

5. #include

void main( )

{ int x=1,total=0,y;

while(x<=10) {

y=x*x;

printf(“%d”,y); total+=y; x ++; }

printf(“\\n total is %d\\n”,total); }

程序运行结果为: 1 4 9 16 25 36 49 64 81 100 total is 385

6. #include

void main( ) { int a[5],s,i;

for(i=0,s=0;i<5;i++) {

scanf(“%d”,&a[i]); s=s+a[i] } s=s/5;

for(i=0,s=0;i<5;i++) if(a[i]>s)

printf(“%6d”,a[i]); }

程序运行时输入的5个数为: 55 60 65 70 75 程序运行结果为: 70 75

7. main() { int x,y; x=y=1; y=++x;

printf(\"x=%d,y=%d\\n\",x,y); }

程序运行结果为: 2, 2 8. main() { int x=10; while(x>7) {x--

printf(\"%d, \",x); } }

程序运行结果是: 9 8 7 9. main() { int x,y; x=y=1; y=++x;

printf(\"x=%d,y=%d\\n\",x,y); }

程序运行结果为: 2,2 10. main() { int x=11; while(x>8) {x--

printf(\"%d, \",x); } }

程序运行结果是: 10.,9,8

五、程序设计题:根据题意,将下列程序补充完整。

1. 给一个百分制成绩,要求输出等级A、B、C、D、E。90分以上为A,80~90分为B,70~79分为C,

60~69分为D,60分以下为E。

main() { float score; char grade;

printf (\"请输入学生成绩:\"); scanf (\"%f\",&score); while( ① )

{ printf (\"\\n输入有误,请重新输入:\"); scanf ( ② ); }

switch((int)( ③ )) { case 10:

case 9: grade='A';break; case 8: grade='B';break; case 7: grade='C';break;

case 6: grade='D';break; ④ ; }

printf(\"成绩是%5.1f,相应的等级是%c\\n\",score,grade); }

答:①score>100||score<0 ②\"%f\

③score/10 ④default: grade='E'

单片机原理与接口技术

一、单项选择题:在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号。错选、多选或未选均无分。

1. 8031单片机外部中断0请求信号输入的引脚是 【 B】 A. RXD B. INT0 C. T0 D. WR

2. 对程序存储区数据传送,应采用助记符为 【 C 】 A. MOV B. MOVX C. MOVC D. PUSH

3. 8031单片机所用的电源是 【 C】 A. ±15V

B. +15V

C. +5V

D. ±5V

4. 十进制数215转换成二进制数表示,是 【 A 】 A. 11010111B

B. 10001101B

C. 11011111B

D. 11110101B

5. 16位二进制所表示的无符号整数,其相应的十进制数围是 【 D 】 A.0~65536 C.1~65535

B.1~65536 D.0~65535

6. 8031单片机有_________定时器/计数器。 【 B】 A. 2个13位

B. 2个16位

C. 1个13位,1个8位 D. 2个8位

7. 8031单片机外接ROM时,使用 引脚来选通74LS373芯片。 【A】 A. ALE B.PSEN C.EA D.WR

8. PC中存放的是 【 A 】 A.下一条要执行的指令的地址 B.当前正在执行的指令 C.当前正在执行指令的地址 D.下一条要执行的指令

9. 某半导体存储器有8根数据线,13根地址线,则它的存储容量是 【A】 A.8K×8位 B.16K×8位 C.32K×8位 D.64K×8位

10. 单片机上电或按手动复位键,都可复位,使PC和大多数特殊功能寄存器(SFR)的初值为零。但

有一个SFR为07H,它是 【 B 】 A.ACC B.SP C.B D.PSW

11. 8031单片机访问片外存储器时,其地址总线由并行口提供,分别为 【 B 】 A.P0口——低8位地址,Pl 口——高8位地址 B.P0口——低8位地址,P2口——高8位地址 C.P0口——高8位地址,P1口——低8位地址 D.P0口——高8位地址,P2口——低8位地址

12. 执行长调用指令LCALL addrl6,它的操作是 【 C 】 A.将断点地址进栈保存(保护断点) B.将子程序地址送PC(构成目的地址) C.保护断点和构成目的地址

D.保护断点、保护现场(即所用到的寄存器容入堆栈)及构成目的地址

13. 2764是容量为8KB的EPROM,该芯片的地址线为 根。 【 D 】 A. 8

B. 12

C. 10

D. 13

14. 下列指令中属于直接寻址方式的指令是 【 A】 A. MOV 68H, A B. MOV A, #68H C. MOV A,R5 D. MOV A, R1

15. 当串行口向单片机的CPU发出中断请求时,若CPU允许并接受中断请求时,程序计数器PC的容

将被自动修改为 【C 】 A.0003H B.000B C.0013H D.001BH E.0023H

16. 主频为12MHz的单片机的机器周期为 【C 】 A. 1/12µs B. 0.5µs C.1µs D.2µs

17. MCS-51单片机选用的晶体振荡频率围,一般在 【C 】 A.4KHz~12KHz B.10KHz~100KHZ C.4MHz~12MHz D.4MHz~100MHZ

18. 已知累加器(A)=87H,进位标志(CY)=0,执行RRC A指令后,(A)和(CY)的容分别为 【 D 】 A. 0EH,l B. 0FH,0 C. C3H,0 D. 43H,1

19. 外部中断0的入口地址是 【A】 A.0003H B.000BH C.0013H D.0023H

20. 总线是微处理器、存储器和I/O接口之间相互交换信息的公共通路。总线中的控制总线作用是

的信息通路。 【D】

A.处理器向存储器传送命令信号 B.处理器向I/0接口传送命令信号

C.外界向处理器传送状态信号 D.上述三种信号

21. MCS-51单片机P0口的第二功能是作分时复用口,可作为 【B】 A.高8位地址总线/数据总线分时复用 B.低8位地址总线/数据总线分时复用 C.高8位地址总线/低8位地址总线分时复用 D.控制信号线/数据总线分时复用

二、填空题:请在每小题的空格中填上正确答案。错填、不填均无分。

1. 87H是用8位二进制原码表示的十六进制数,其相应的十进制数是 -7 。

2. 8031.单片机有 P1 个并行输入/输出口,其中______5___口可以直接应用于I/O口。 3. MCS-51单片机系列有 5 个中断源,可分为 2 个优先级。

4. MOV A,Ri 属于 寄存器间接寻址 寻址方式,MOV A, 41H 属于 直接寻址 寻址方式。 5. LED数码显示有 动态 显示 和 静态 显示两种显示形式。 6. 8031单片机使用RD和WR来读写片外 RAM 的容。 7. 堆栈数据的存取遵守 先进后出或后进先出 的原则。 8. 若某存储芯片地址线为12根,那么它的存储容量为 4kB 。

9. 执行下列指令组后,累加器(A)=_CCH____________,进位标志(CY)=_____0____。

SETB C

MOV A, #25H ADDC A, #0A6H

10. 在计算机中,一般用 字长 来区分是8位机、16位机还是32位计算机。

11. 执行下列指令组后,累加器(A)= 0F9H 。它与Rl中容的关系是: 是(R1)的补码 。

MOV R1,#87H MOV A,R1 CPL A INC A

SETB ACC.7

12. MCS-51单片机系列有5个中断源,在同一个优先级的情况下, INT0(外部中断0) 优先权最高, 串行中断 优先权最低。

13. 在 MCS-51单片机中,如采用6MHZ晶振,一个机器周期为 2μs 。 14. 8031.单片机部数据RAM中的位寻址区的地址围是 20H~2FH 。 15. 执行下列指令组后,(A)= 63H ,标志位(OV)=_____1____。 MOV A,#0B4H ADD A,#00H

SUBB A,#51H

16. 在 MCS-51单片机中,如采用6MHZ晶振,一个机器周期为 0.5μs 。

三、改错题:每小题只有一个错误或不妥,请指出,并将其改正。

1. 下列指令组要完成,当(A)≤80H时,转去执行2800H开始的程序,当(A)>80H时,执行3700H

开始的程序。请找出错误,并改正之。

CJNE A, #80H, NEXT

TEN: LJMP 2800H NEXT: JNC TEN

LJMP 3700H

错误: JNC TEN

改正: JC TEN 2. 下面程序是用查表法将存放在R0寄存器的BCD码转换为ASCII码。

MAIN: MOV A,R0

MOV DPTR,#TAB

MOVX A,A+DPTR

MOV R0,A RET

TAB : DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H 错误: OVX A,A+DPTR 改正: MOVC A,A+DPTR

3. MCS-51单片机读部ROM时使用的是“MOV”指令,读外部RAM时使用的是“MOVX”指令。

错误: 部ROM 改正:部RAM

4. 采用下面指令将外部RAM2000H单元中的数据送入A。 MOV DPTR,2000H MOVX A,DPTR

错误:MOV A,2000H 改正:MOV A,#2000H

四、程序阅读题:请阅读下列程序,写出程序运行结果。 1. 执行下列程序段后,(A)= 8AH ,(CY)= 1 。 CLR C

MOV A,#C5H RLC A

2. 下面的指令执行后,(R1)= 48H ,(A)= OAAH 。 MOV R1,#48H MOV 48H,#51 CJNE R1,51H,00H JNC NEXT1 MOV A, #0FFH SJMP NEXT2

NEXT1:MOV A, #0AAH

NEXT2:SJMP NEXT2

3. 已知(2000H)=3FH,(2001H)=06H,(2002H)=5BH,(2003H)=4FH,片RAM中(20H)=01H,下面的指令执行后,(30H)= 0A4H 。 MOV A,20H INC A

MOV DPTR,#2000H MOVC A,A+DPTR CPL A MOV 30H,A

4. 已知(40H)=11H,(41H)=22H,(R0)=40H,(R1)=41H试问,下面的指令执行后,

(A)=11H , (40H)=11H , (41H)=11H , (42H)=11H MOV A,R0 MOV R1,A MOV 42H,R1

五、程序设计题:根据题意,将下列程序补充完整。

1. 将以表格形式存放在从TABLE开始的部单元中的8个单字节正数求平均值。

MOV R0,#TABLE MOV R2,#8 MOV A,#0

LOOP1: ① A,R0 ;求和 ② R0

DJNZ ③

MOV B,#8

④ ;求平均值

RET

答:① ADD ;② INC ;

③ R2, LOOP1 ;④ DIV AB ; ;

2. 编程将片RAM30H单元开始的15个字节数据传送到片外RAM3000H开始的单元中去。

STRAT:MOV R0,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: ① ② ③ ④ DJNZ R7,LOOP RET

答:① MOV A,R; ;② MOVX DPTR,A ;

③ INC R0 ;④ INC DPTR ;

42. 片RAM40H开始的单元有10B二进制数,编程找出其中最大值并存于50H单元中。 START: ① ;数据块首地址送R0 MOV R7,#09H ;比较次数送R7 MOV A,R0 ;取数送A LOOP: INC R0

MOV 30H,R0 ;取数送30H

② ;(A)与(30H)相比 NEXT: ③ ; (A)≥(30H)转BIE1 MOV A,30H ;(A)<(30H),大数送A

BIE1: ④ ;比较次数减1,不为0,继续比较 MOV 50H,A ;比较结束,大数送50H RET

答:① MOV R0,#40H ; ②CJNE A,30H,NEHT; ③JNC BIE1; ④DJNZ R7,LOOP;

六、应用题: (本大题共1小题,共8分)

1. 利用单片机实现数码管循环显示0-F的硬件连线图如下图所示,补充完善控制程序。

AJMP START ORG 30H

START: MOV DPTR , ① ;指定表格起始地址 INIT: CLR A ;初始化A,清零

MOV R1,#0

题43图 ABC: MOV A , R1

MOVC A , ② ;查表,获得对应数字的字型码 MOV P1 , A ;送至P1口,显示

ACALL ③ ;延时 INC R1 ;加1使指针指向下一个字型码 CJNE R1 , ④ , ABC

AJMP ⑤ ;重新初始化,开始新的循环 DLY: MOV R4 , #10 ; R4=10时,延时约1秒 D1: MOV R5 , #200 D2: MOV R6 , #248 NOP

DJNZ R6 , $ DJNZ R5 , D2 DJNZ R4 , D1 ⑥

TAB: DB 0C0H,0F9H,0A4H, ⑦ ,99H,92H,82H,0F8H

80H,90H,88H,83H,0C6H,0A1H,86H, ⑧

END

答:① #TAB ;② A+DPTR ;③ DLY ;④ #10H ;

⑤ INIT ;⑥ RET ;⑦ 0B0H ;⑧ 8EH 。

2. 利用单片机实现8个发光二极管循环闪烁显示,某个灯闪烁点亮10次后,转到下一个闪烁10次,

循环不止。硬件连线图如下图所示,补充完善控制程序。

ORG 30H

START: MOV A,#01H ;灯亮初值

SHIFT: LCAIL FLASH ;调闪亮10次子程序

① A ;右移一位 ② SHIFT ;循环 FLASH: MOV R2, ③ ;闪烁计数 FLASH1: MOV ④ ;点亮

LCALL DELAY ;延时 MOV ⑤ ;灯熄灭 LCALL DELAY ;延时 题43图

⑥ R2,FLASH1 ;循环

RET

DELAY: MOV R4 , #10 ; R4=10时,延时约1秒 D1: MOV R5 , #200 D2: MOV R6 , #248 NOP

DJNZ R6 , $ DJNZ ⑦ DJNZ ⑧ RET END

答:① RR A ; ② SJMP ; ③ #0AH ; ④ P1,A ;

⑤ P1,#00H ;⑥ DJNZ ;⑦ R5,D2 ; ⑧ R4,D1 。

因篇幅问题不能全部显示,请点此查看更多更全内容