1、单片机技术及c5程序设计第2版答案唐颖阮越单片机技术及C51程序设计(第2版)习题解 (注:问答题略) 习题1部分习题解1-1 给出下列有符号数的原码、反码和补码(设计算机字长为8位)。+37 -86 -105 +112 -79 解:+37: 原码=00100101B;反码=00100101B;补码=00100101B -86: 原码=11010110B;反码=10101001B;补码=10101010B -105:原码=11101001B;反码=10010110B;补码=10010111B +112:原码=01110000B;反码=01110000B;补码=01110000B -79: 原码
2、=11001111B;反码=10110000B;补码=10110001B1-2 8位补码表示的定点整数的范围是多少? 解:-128+1271-3 已知X、Y是两个有符号数的定点整数,它们的补码为:X补=00010011B,y补=11111001B,求X+Y补等于多少? 解:X+Y补=X补+y补=00001100B1-4 请选择正确答案填在括号中:将-33以补码形式存入8位寄存器中,寄存器中的内容为(A)ADFH BA1H C5FH DDEH1-5 请选择正确答案填在括号中: 如果X为负数,由X补求-X补是将( D )AX补各值保持不变 BX补符号位变反,其他各位不变CX补除了符号位外,各位变反
3、,末位加1DX补连同符号位一起各位变反,末位加11-6 请选择正确答案填在括号中:设有二进制数X=-1101110,若采用8位二进制数表示,则X补的结果是( D )。A11101101 B10010011 C00010011 D100100101-7 8051与8751的区别是(C)A内部数据存储数目的不同 B内部数据存储器的类型不同C内部程序存储器的类型不同 D内部寄存器的数目不同1-8 单片机与普通计算机的不同之处在于其将(CPU)(存储器)和(I/O接口)三部分集成于一块芯片上(的单片微机)1-9 MCS-51单片机内部提供了哪些资源?略1-10 单片机有哪些应用特点?主要应用在哪些领域
4、?略1-11 MCS-51单片机如何进行分类?各类有哪些主要特性?略习题2部分习题解2-1 填空题1MCS-51单片机中P3端口的第5位(P3.5)的位地址是(B5H)。2堆栈指针SP的字节地址是(81H),MCS-51单片机复位后,堆栈指针SP的值为(07H)。3MCS-51系列单片机的一个机器周期包含(6)个时钟周期。4MCS-51单片机复位后,PC的内容是(0000H),CPU使用的当前工作寄存器是第(0)组,此时R0R7对应的地址范围是(00H)(07H)。5设(PSW)=88,则Cy=(1),P =(0)。选择的是第(1)组通用寄存器,该组寄存器在片内RAM中的地址为(08H0FH)
5、。6单片机的特殊功能寄存器只能采用(直接)寻址方式。7如果8051单片机采用6MHz的晶振,那么该系统一个机器周期为(2)微秒(s),一个状态周期(或称时钟周期)为(2/6)微秒(s)。88051单片机采用12MHz的晶振频率,设无外扩存储器,单片机运行时ALE引脚输出的正脉冲的频率是(2)MHz。 2-2 选择题1若RS0=0,RS1=0,则当前使用的工作寄存器组为(A)。A第0组 B第1组 C第2组 D第3组2若Fosc=12MHz,则8051的机器周期为(B)。A0.5s B1s C2s D4s3堆栈遵循的原则是(B)。 A先进先出,后进先出 B先进后出,后进先出C先进先出,后进后出 D
6、先进后出,后进后出48051有(B)个可编程的16位定时/计数器。A1 B2 C3 D45MCS-5l单片机中不是准双向I/O接口的是(A)。AP0 BP1 CP2 DP36在MCS-51系统中扩展一片2732(EPROM存储芯片,容量4K8)需要(C)根地址线。A10 B11 C12 D1378051单片机有(C)个中断源。A3 B4 C5 D68片内RAM的20H2FH为位寻址区,所包含的位地址是( B)。A00H20H B00H7FH C20H2FH D00HFFH108051单片机复位后的P0P3的值为(D)。A00H B0FH CF0H DFFH2-3 简答题(略)1简述在MCS-5
7、1系列单片机中哪些地址单元具有位地址?2MCS-51系列单片机的P0P3口有何使用特点?各自的第二功能是哪些?3决定程序执行顺序的寄存器是哪个?它是多少位的寄存器?是不是特殊功能寄存器?4MCS-51系列单片机的PSW寄存器各位标志的意义是什么?若PSW=91H,请问其包含的信息是什么?5MCS-51系列单片机由哪几个功能部件组成?6MCS-51系列单片机的存储器结构有何特点?存储器的空间如何划分?各地址空间的寻址范围是多少?7MCS-51系列单片机的控制总线主要信号有哪些?各信号的作用如何?8MCS-51系列单片机有哪几种低功耗工作模式?简述这几种低功耗工作模式特点及退出该低功耗模式的方法。
8、9MCS-51系列单片机在存储器组织上分为四个物理上相互独立的空间,单片机是如何实现对这四个空间进行访问的?习题4部分习题解4-1 C语言有哪些特点?略4-2 有哪些数据类型是MCS-51单片机直接支持的?略4-3 C51特有的数据结构类型有哪些?略4-4 C51中存储类型有几种,它们分别表示的存储器区域是什么?略4-5 C51中,bit位与sbit位有什么区别?略4-6 在C51中,通过绝对地址来访问存储器的有几种?略4-7 在C51中,中断函数与一般函数有什么不同?略4-8 按给定存储器类型和数据类型,写出下列变量的说明形式。(1)在data区定义字符变量va11。解:char data
9、val1;(2)在idata区定义整型变量va12。 解:int idata val2;(3)在xdata区定义无符号字符数组va134。 解:extern char xdata va134;(4)在xdata区定义一个指向类型的指针px。 解:uint xdata *px;(5)定义可寻址位变量flag。 解:bit bdata flag;(6)定义特殊功能寄存器变量p3。 解:sfr P3=0xB0;(7)定义特殊功能寄存器变量SCON。 解:sfr SCON=0xB8;(8)定义16位的特殊功能寄存器T0。 解:sfr16 T0=0x8C8A;4-9 写出下列关系表达式或逻辑表达式的结果
10、,设a=3,b=4,c=5。(1)a+bc&b=c 解:a+bc&b=c 不成立,结果为假(0)(2)ab+c&b-c解:ab+c&b-c表达式为非零,逻辑结果为1(3)!(ab)&!c1解: !(ab)&!c1表达式为非零,逻辑结果为1(4)!(a+b)+c-1&b+c/2解:!(a+b)+c-1&b+c/2表达式为非零,逻辑结果为14-10 在C51语言中,设变量a,b都为unsigned char类型,a=78(十进制),b=209(十进制),用十六进制表示以下表达式的计算结果:a&b= ox40 ;ab= 0xdf ;b2= 0x34 ;a = 0xb1 ;(ab)?a:b= 0xd1
11、 。4-11 C51程序是基于MCS-51系列单片机的C程序,在C51程序中,int型数据所能表示的数值范围是多少?。解:-32768+327674-13 用分支结构编程实现,当输入“1”显示“A”,输入“2”显示“B”,输入“3”显示“C”,输入“4”显示“D”,输入“5”结束。解:switch(grade) case 1:printf(An);break;case 2:printf(Bn);break;case 3:printf(Cn);break;case 4:printf(Dn);break;case 5:printf(ENDn);break;default:printf(errorn
12、)4-14 输入三个无符号字符数据,要求按由大到小的顺序输出。解:#include /包含特殊功能寄存器库#include /包含I/O函数库void main(void) /主函数 int a,b,c,t; /定义整型变量a,b,c,t SCON=0x52; /串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf (input a,b,c:n); /输出提示信息 scanf(%d,%d,%d,&a,&b,&c); /输入a,b和c的值,无符号数据。 printf(n); /输出换行 if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; i
13、f(bc) t=b;b=c;c=t; printf(%d,%d,%d,c,b,a); while(1); /结束4-15 用三种循环结构编写程序实现输出1到10的平方之和。解:1、通过while语句实现计算并输出1到10的平方之和。#include /包含特殊功能寄存器库#include /包含I/O函数库void main(void) /主函数 int i,s=0; /定义整型变量i和s i=1; SCON=0x52; /串口初始化 TMOD=0x20; TH1=0Xf3; TR1=1; while (i=10) /累加110的平方之和在s中 s=s+i*i; i+; printf(%dn,
14、s);while(1);2、通过do.while语句实现计算并输出1到10的平方之和。#include /包含特殊功能寄存器库#include /包含I/O函数库void main(void) /主函数 int i,s=0; /定义整型变量i和s i=1;SCON=0x52; /串口初始化TMOD=0x20;TH1=0Xf3;TR1=1;do s=s+i*i; /累加110的平方之和在s中 i+;while (i10); printf(%dn,s);while(1);3、用for语句实现计算,并输出1到10的平方之和。#include /包含特殊功能寄存器库#include /包含I/O函数库
15、void main(void) /主函数 int i,s=0; /定义整型变量i和s i=1;SCON=0x52; /串口初始化TMOD=0x20;TH1=0Xf3;TR1=1; for(i=1;i10;i+) s=s+i*i; /累加110的平方之和在s中printf(dn,s);while(1); 4-16 对一个5个元素的无符号字符数组按由小到大顺序排序。解:#include /包含特殊功能寄存器库#include /包含I/O函数库void main(void) /主函数 int i,j,min,temp,a5; /定义整型变量x和y SCON=0x52; /串口初始化 TMOD=0x
16、20; TH1=0XF3; TR1=1; printf (input :n); /输出提示信息 for(i=0;i5;i+) printf (a%d=,i); scanf(%d,&ai); for(i=0;i5-1;i+) /排序 min=i; for(j=i;jaj) min=j; temp=aj; aj=amin; amin=temp; for(i=0;i5;i+) /输出printf (%5d,ai );4-17 用指针实现,输入3个无符号字符数据,按由大到小的顺序输出。解:#include /包含特殊功能寄存器库#include /包含I/O函数库void main(void) /主函
17、数 int a,b,c,t; /定义整型变量a,b,c,t int *p,*p1,*p2,*p3; /定义指针变量 SCON=0x52; /串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf (input a,b,c:n); /输出提示信息 scanf(%d,%d,%d,&a,&b,&c); /输入a,b和c的值,无符号数据。 printf(n); /输出换行 p1=&a;p2=&b;p3=&c; if(ab) p=p1;p1=p2;p2=p; if(ac) p=p1;p1=p3;p3=p; if(bc) p=p2;p2=p3;p3=p; printf(%d,%d
18、,%d,*p3,*p2,*p1); while(1); /结束4-18 有3个学生,每个学生包括学号、姓名、成绩,要求找出成绩最高的学生的姓名和成绩。 解:#include /包含特殊功能寄存器库#include /包含I/O函数库Struct studentchar num6;char name8;int score4;stu3;void main(void) /主函数 int i,tem,max,maxi; printf(input 3 student information:n); /提示输入信息for(i=0;i3;i+) printf(name:); /提示输入姓名 scanf(%s
19、,stui.name); printf(student id:); /提示输入学号 scanf(%s,stui.num); printf(score:); /提示输入分数 scanf(%d,stui.score); max=0;maxi=0; for(i=0;imax) max=tem; maxi=i; printf( student %s,max score: %d.,stumaxi.name.num,max); /打印习题5部分习题解5-15 单片机用内部定时方法产生频率为10kHz方波,设单片机晶振频率fosc为12MHz,请编程实现。解:频率10kHz的方波,其周期为:T=1/10k=
20、100us, 定时时间为50 us。设选用定时器0,方式2,10kHz方波从P1.0口输出。C51参考程序:# include /包含特殊功能寄存器库sbit P1_0=P10;void main() TMOD=0x02; /使用定时器T0的模式2 TH0=256-50; /定时器T0的高8位赋初值 TL0=256-50; /定时器T0的低8位赋初值 EA=1; /开总中断 ET0=1; /定时器T0中断允许 TR0=1; /启动定时器T0 while(1);void time0_int(void) interrupt 1 /中断服务程序P1_0=!P1_0; /取反 5-16 使用定时器0以
21、定时方法在P1.0输出周期为400s,占空比为20%的矩形脉冲,设单片机晶振频率fosc为12MHz,编程实现。解:其周期为400s,占空比为20%的矩形脉冲,即定时时间分别为输出高电平80s,输出低电平320s(是输出高电平的4倍)。根据题意,选用定时器0,方式1,从P1.0口输出。C51参考程序:# include /包含特殊功能寄存器库sbit P1_0=P10;sbit f;sbit i;void main() TMOD=0x02; /使用定时器T0的模式1 TH0=256-80; /定时器T0的高8位赋初值 TL0=256-80; /定时器T0的低8位赋初值 EA=1; /开总中断
22、ET0=1; /定时器T0中断允许 TR0=1; /启动定时器T0 f=1; while(1);void time0_int(void) interrupt 1 /中断服务程序if(f=1)(P1_0=0;F=0; )else(i+;if(i=4)(P1_0=1; f-1;)5-23 参照图5-2电路图,编程实现灯亮移位程序,要求8只发光二极管每次点亮一个,点亮时间为250ms,顺序是从下到上一个一个地循环点亮。设fosc=6MHz。解:fosc=6MHz,每个机器周期=2us。C51参考程序:# include unsigned char code table=0xfe,0xfd,0xfb,
23、0xf7, 0xef,0xdf,0xbf,0x7f; unsigned char i,j;void main(void) TMOD=0x01;TH0 = (65536-25000)/256; TL0 = (65536-25000)%256; EA=1;ET0=1;i=0;j=0;TR0=1;while(1); void time0_int(void) interrupt 1 TH0 = (65536-25000)/256;TL0 = (65536-25000)%256;j+;if (j= =5) j=0; if(i!=7) P1=tablei; i+; else P1=tablei; i=0;
24、 5-24 利用单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,请画出电路图且编程实现。解:电路图如下所示:C51参考程序:# include /包含特殊功能寄存器库#include /包含函数_nop_()定义的头文件 sbit P1_7=P17;unsigned char code table=0x01,0x00,0x02, 0x00,0x04, 0x00,0x08, 0x00, 0x00,0x10, 0x00,0x20, 0x00,0x40, 0x00,0x80;void main() unsigned char j,i; SCON=0x00; j=0; for (; ;
25、) P1_7=0; _nop_(); /延时一个机器周期 _nop_(); /延时一个机器周期,保证清0完成 P1_7=1; SBUF= tablej; j+; while (!TI) ; TI=0;SBUF= tablej;j+; while (!TI) ; TI=0; for (i=0;i=3000;i+) ; /延时 if (j= =16) j=0; 习题7部分习题解7-5 修改本章例7-8的程序,用数组表的方式编程实现在图7-18所示电路上动态显示“1234”。解:C51参考程序:#include #define uchar unsigned char#define uint unsi
26、gned intuchar code4=0xfe,0xfd,0xfb,0xf7; /位选码表uchar tel4=0x06,0x5b,0x4f,0x66; /共阴极1,2,3,4字段吗void delay(void) /延时函数,延时一段时间 uchar i,j; for(i=0;i250;i+) for(j=0;j250;j+); void main(void) uchar k,d; while(1) /无限循环 for(k=0; k4; k+) P2=codek; /送出位选码 P0=telk; delay(); /延时 7-6 参照图7-18动态显示接口电路,试编写一段程序,在6个数码管上从右到左依次显示一个“3”字,直至出现6个“3”字为止。解:设数码管增至6个,为共阴极。C51参考程序:#include #define uchar unsigned char#define uint unsigned int uchar code6=0xfe,0x
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1