单片机应用技术项目教程C语言版习题答案.docx
《单片机应用技术项目教程C语言版习题答案.docx》由会员分享,可在线阅读,更多相关《单片机应用技术项目教程C语言版习题答案.docx(28页珍藏版)》请在冰豆网上搜索。
![单片机应用技术项目教程C语言版习题答案.docx](https://file1.bdocx.com/fileroot1/2022-12/7/9de8ea12-885a-4744-902c-4f18b3bfff09/9de8ea12-885a-4744-902c-4f18b3bfff091.gif)
单片机应用技术项目教程C语言版习题答案
单片机应用技术项目教程(C语言版)习题答案
项目一
1-1填空题
(1)8031,8751
(2)存储器,定时器/计数器,输入/输出接口电路
(3)上电自动复位,手动复位
(4)12,1μs,1,4
(5)1
(6)4,1,2,5
1-2选择题
(1)A
(2)C
(3)D
(4)C
(5)A
1-3
(1)KeilC51软件的主要功能
KeilC51软件提供了丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
μVision2集成开发环境可以完成工程建立和管理、编译、连接、目标代码的生成、软件仿真和硬件仿真等完整的开发流程。
(2)PROTEUS软件的主要功能
Proteus不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,也是目前较先进的单片机和嵌入式系统的设计与仿真平台。
在计算机上,能完成从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。
1-4简叙单片机的发展及发展趋势。
单片机的发展主要有以下几个方面:
(1)增加字长,提高数据精度和处理的速度;
(2)改进制作工艺,提高单片机的整体性能;
(3)由复杂指令集CISC转向简单指令集RISC的技术;
(4)多功能模块集成技术,使一块“嵌入式”芯片具有多种功能;
(5)微处理器与DSP技术相结合;
(6)融入高级语言的编译程序;
(7)低电压、宽电压、低功耗。
目前,国际市场上8位、16位单片机系列已有很多,32位的单片机也已经进入了实用阶段。
随着单片机技术的不断发展,新型单片机还将不断涌现,单片机技术正以惊人的速度向前发展。
1-5简叙单片机的主要应用领域。
单片机的主要应用领域:
工业控制、智能仪表、外设控制、家用电器、机器人、军事装置等。
1-6简叙单片机的主要特点。
(1)体积小、重量轻,价格低、功能强,电源单一、功耗低,可靠性高、抗干扰能力强。
(2)使用方便灵活、通用性强。
(3)大多数单片机采用哈佛(Harvard)结构体系,单片机的数据存储器空间和程序存储器空间相互独立。
(4)突出控制功能的指令系统。
(5)较低的处理速度和较小的存储容量。
1-7如果只使用片外ROM,
引脚应该如何接?
为什么?
(1)
引脚应该接地
(2)当
为高电平时,访问内部程序存储器,当超过内部程序存储器地址范围后,自动转向外部程序存储器;当
为低电平时,则访问外部程序存储器。
1-8在工作模块2中,如果把LED闪烁程序的延时函数Delay()写在main()后面,程序应该如何修改?
要在main()函数前面,对Delay()函数的原型进行声明,代码如下:
voidDelay();
1-9单片机最小系统由哪几部分组成?
现要求LED的阳极接在P1.0引脚上,请完成LED点亮电路和C语言程序设计。
(1)最小系统就是指由单片机和一些基本的外围电路所组成的一个可以工作的单片机系统。
一般来说,它包括单片机、晶振电路和复位电路。
(2)电路如下:
(3)程序如下:
#include//包含AT89X52.H头文件
sbitLED=P1^0;//定义LED为P1.0引脚
voidmain(void)
{
LED=1;//P1.0引脚输出高电平,点亮LED
while
(1);
}
1-10请完成用开关控制LED闪烁快和慢两种效果的电路和C语言程序设计。
(1)电路如图1-20所示
(2)程序如下:
#include//包含AT89X52.H头文件
sbitSW=P3^0;//定义SW是P3.0位对应的引用符号
sbitLED=P1^0;//定义LED是P1.0位对应的引用符号
voidDelay()//延时函数
{
unsignedchari,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
voidmain(void)
{
while
(1)
{
if(SW==0)//开关闭合SW=0:
LED闪烁快
{
LED=0;//P1.0=0,LED点亮
Delay();//延时
LED=1;//P1.0=1,LED熄灭
Delay();
}
Else//开关断开SW=1:
LED闪烁慢
{
LED=0;//P1.0=0,LED点亮
Delay();Delay();//延时时间变长
LED=1;//P1.0=1,LED熄灭
Delay();Delay();
}
}
}
项目二
2-1填空题
(1)20H,2FH,21H
(2)确定工作寄存器组
(3)00H,1FH,4
(4)P0,P2
(5)07H,0000H,00H,0FFH
(6)3,18H~1FH
(7)bit,20H~2FH
(8)0~255,0~65535
2-2选择题
(1)B,A
(2)B
(3)C
(4)C
(5)B
(6)D
2-3P0口、P1口、P2口和P3口的负载能力是多少?
它们是否具有位寻址功能?
(1)P0口负载能力为8个TTL门电路,P1口、P2口和P3口负载能力为4个TTL门电路。
(2)具有位寻址功能
2-4在输出时,P0口为什么要外接上拉电阻才能有高电平输出?
由于P0口的输出电路是漏极开路电路,所以必须外接上拉电阻才能有高电平输出。
2-5MCS-51单片机有哪几个存储空间?
是如何分布的?
(1)MCS-51单片机有程序存储器和数据存储器2个存储空间。
(2)MCS-51单片机存储器在物理结构上可分为4个存储空间:
内部数据存储器、内部程序存储器、外部数据存储器和外部程序存储器。
从逻辑上分,即从用户使用的角度看,MCS-51单片机存储器分为3个逻辑空间:
片内外统一编址的程序存储器地址空间、内部数据存储器地址空间和外部数据存储器地址空间。
2-6MCS-51单片机内部RAM分成几个不同区域及地址范围?
内部数据存储器在物理上和逻辑上都分为两个地址空间:
00H~7FH单元组成的低128字节数据存储器空间和80H~FFH单元组成的高128字节特殊功能寄存器空间。
2-7PSW的作用是什么?
常用的状态标志有哪几位?
其作用是什么?
能否位寻址?
PSW是一个8位特殊功能寄存器,用于存放程序运行中的各种状态信息,可以位寻址。
(1)CY(PSW.7):
高位进位标志位。
(2)AC(PSW.6):
辅助进位标志位。
(3)F0(PSW.5):
用户标志位。
(4)RS1(PSW.4)、RS0(PSW.3):
寄存器组选择位。
(5)OV(PSW.2):
溢出标志位。
(6)-(PSW.1):
保留位,无定义。
(7)P(PSW.0):
奇偶校验位。
2-8bit和sbit有什么区别?
bit声明的是位变量,必须定位在MCS-51单片机内部RAM的位寻址空间中。
sbit声明的是可寻址位,用于定义某些特殊位,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。
2-9在C语言里,sbitP1_0=0x90语句作用是什么?
能不能直接使用P1.0(说明原因)?
(1)sbitP1_0=0x90语句作用是声明P1_0为P1中的P1.0引脚。
(2)由于C语言规定标识符是由字母、数字和下划线组成,所以不能直接使用P1.0作为标识符。
2-10试一试能否将工作模块3的LED循环点亮改为LED双向循环点亮。
LED双向循环点亮代码如下:
#include//包含AT89X52.H头文件
voidDelay()//延时函数
{
unsignedchari,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
voidmain()
{
unsignedchari;
unsignedchartemp;
P1=0xff;//十六进制全1,熄灭所有LED
while
(1)
{
temp=0x01;//正方向,初始控制码为0x01
for(i=0;i<8;i++)
{
P1=~temp;//temp值取反送P1口
Delay();
temp=temp<<1;//temp值左移一位,获得下一个控制码
}
temp=0x80;//反方向,初始控制码为0x80
for(i=0;i<8;i++)
{
P1=~temp;//temp值取反送P1口
Delay();
temp=temp>>1;//temp值右移一位,获得下一个控制码
}
}
}
2-11设计用开关控制步进电机转向的AT89S52单片机控制系统,功能要求:
开关闭合,正转;开关断开,反转。
(1)电路如下:
(2)程序如下:
#include
sbitSW=P3^0;//符号SW表示P3.0引脚
//由delay参数确定延迟时间
voidmDelay(unsignedintdelay)
{
unsignedinti;
for(;delay>0;delay--)
for(i=0;i<124;i++);
}
voidmain()
{
while
(1)
{
if(SW==0)//SW闭合,正转
{
P1=0x03;//A、B绕组励磁
mDelay(50);
P1=0x06;//B、C绕组励磁
mDelay(50);
P1=0x0C;//C、D绕组励磁
mDelay(50);
P1=0x09;//D、A绕组励磁
mDelay(50);
}
else//SW断开,反转
{
P1=0x03;//A、B绕组励磁
mDelay(50);
P1=0x09;//D、A绕组励磁
mDelay(50);
P1=0x0C;//C、D绕组励磁
mDelay(50);
P1=0x06;//B、C绕组励磁
mDelay(50);
}
}
}
2-12设计开关控制电灯点亮的AT89S52单片机控制系统,驱动电路采用ULN2003A和继电器。
功能要求:
开关闭合,电灯点亮;开关断开,电灯熄灭。
提示:
参考【技能训练2-2】单片机驱动继电器电路设计。
项目三
3-1填空题
(1)if,switch
(2)无限
(3)1000
(4)\0
(5)该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位
(6)code
(7)动态,静态
(8)C0H
3-2选择题
(1)A
(2)A
(3)D
(4)A
(5)A
(6)C(因为使用的是汉字状态下的双引号)
(7)C
(8)B
3-3LED数码管有哪两种结构?
是如何实现的?
(1)LED数码管有共阴极和共阳极两种结构。
(2)共阴极结构:
是把所有发光二极管的阴极作为公共端(com)连起来。
共阳极结构:
是把所有发光二极管的阳极作为公共端(com)连起来。
3-4请简要说明LED数码管静态显示和动态显示的特点,实际设计时应如何选择?
(1)采用静态显示方式,较小的电流就可以获得较高的亮度,且占用CPU时间较少,编程简单,显示便于检测和控制,但其占用的I/O口线较多,硬件电路复杂,成本高,只适合显示位数较少的场合。
(2)当显示位数较多时,采用动态扫描方式可以节省I/O端口资源,硬件电路也较简单;但其稳定度不如静态显示方式;由于CPU要轮番扫描,将占用更多的CPU时间。
3-5动态显示的过程是什么?
动态扫描过程如下:
(1)首先从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管都处于熄灭状态,持续1.5ms时间,然后关闭所有显示;
(2)接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上;
(3)直到每一位数码管都扫描完为止.
动态扫描显示,数码管其实是轮流依次点亮的,但由于人的视觉驻留效应,因此当每个数码管点亮的时间小到一定程度时,人就感觉不出字符的移动或闪烁,觉得每位数码管都一直在显示,达到一种稳定的视觉效果。
3-6在用共阳极数码管显示的电路中,如果直接将共阳极数码管换成共阴极数码管,能否正常显示?
为什么?
应采取什么措施?
(1)不能显示。
(2)由于在共阳极数码管显示的电路中,其公共端(com)是接电源(+5V)的,而共阴极数码管的公共端(com)必须接地。
(3)把接电源的公共端,改接为地。
3-7工作模块八中,如果轻触开关改接P1.7,并且要求实现0~59循环计数,程序应如何修改?
(1)把“P1_0==0”都修改为“P1_7==0”
(2)把“if(Count==100)”修改为“if(Count==60)”
3-8工作模块七,数码管动态显示程序设计时如果把延时时间改为1s,会出现什么情况?
(1)6个数码管轮流依次显示“1、2、3、4、5、6”,每个数码管显示时间是1s;
(2)在6个数码管轮流依次显示“123456”的6个数字之间,6个数码管会熄灭1s。
3-9如何设计0~999的计数器。
(1)采用动态扫描显示
(2)在工作模块七的基础上,使用高3位数码管。
(3)程序如下:
#include//包含AT89X52.H头文件
/*定义0~9十个数字的字型码表*/
unsignedcharcodeTab[]=
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsignedcharcodeCol[]={0xfe,0xfd,0xfb};//位码
unsignedintCount;//定义变量放置计数数值
unsignedcharbuf[]={0,0,0};
voidDelay()
{
unsignedchari;
for(i=0;i<250;i++);
}
voidmain()//同时显示123456
{
unsignedcharj;
Count=0;//计数变量初始为0
while
(1)
{
buf[0]=[Count/100];//获得百位数
buf[1]=[Count/10%10];//获得十位数
buf[2]=[Count%10];//获得个位数
for(j=0;j<3;j++)
{
P0=Tab[buf[j]];
P1=Col[j-1];//开(共阴)数码管
Delay();
P1=0xff;//关数码管
Delay();
}
Count++;//计数加1
if(Count==1000)//判断计数是否到1000
{
Count=0;//到1000,计数器清0
}
}
}
项目四
4-1填空题
(1)10ms
(2)5,2,外部中断0(
),中断允许寄存器IE,中断优先级寄存器IP
(3)0003H,001BH
(4)电平触发方式,边沿触发方式
4-2选择题
(1)C
(2)A
(3)B
(4)C
(5)B
4-3什么叫中断?
中断有什么优点?
(1)当CPU正在执行某个程序时,由计算机内部或外部的原因引起的紧急事件向CPU发出请求处理的信号,CPU在允许的情况下响应请求处理信号,暂时停止正在执行的程序,保护好断点处的现场,转向执行一个用于处理该紧急事件的程序,处理完后又返回被中止的程序断点处,继续执行原程序,这一过程就称为中断。
(2)能大大地提高计算机处理事件的能力,提高效率,增强实时性。
4-4什么叫中断源?
MCS-51系列单片机有几个中断源,各中断标志是如何产生的,又如何清0的?
CPU响应中断时,它们的中断矢量地址分别是多少?
(1)向CPU发出中断请求的来源,或引起中断的原因称为中断源。
(2)MCS-51系列单片机有5个中断源,它们的中断标志是由硬件自动置“1”,其中只有串口的发送中断标志位TI(串口的接收中断标志位RI)是由软件清0的,其它中断标志是由硬件自动清0。
(3)CPU响应中断时,它们的中断矢量地址如下表所示:
中断源
中断入口地址
外部中断0
0003H
定时器T0中断
000BH
外部中断1
0013H
定时器T1中断
001BH
串行口中断
0023H
4-5外部中断有哪两种触发方式?
对触发脉冲或电平有什么要求?
如何选择和设定?
(1)外部中断有电平触发方式和边沿触发方式两种触发方式。
(2)在电平触发方式下,CPU响应中断后硬件不能自动使IE1清0,也不能由软件使IE1清0,所以在中断返回前必须撤消
引脚上的低电平,使IE1置0,否则将产生另一次中断请求,造成出错;在边沿触发方式下,为保证CPU在两个机器周期内检测到先高后低的负跳变,输入高低电平的持续时间至少要保持12个时钟周期。
(3)设置IT0(IT1)为0时,表示外部中断为电平触发方式;设置IT0(IT1)为1时,表示外部中断为边沿触发方式。
4-6MCS-51系列单片机的中断系统中有几个优先级?
如何设定?
(1)MCS-51系列单片机的中断系统中有2个优先级,分别为高优先级和低优先级。
(2)中断优先级寄存器IP的作用是设定各中断源的优先级别,IP的每一位均可以由软件来置1或清0,置1是高优先级,清0是低优先级。
4-7CPU响应中断有哪些条件?
在什么情况下中断响应会受阻?
(1)CPU并非在任何时刻都响应中断请求,而是在条件满足之后才会响应。
响应中断的条件是:
1)有中断源发出中断请求。
2)总中断开启,即中断总允许位EA=1。
3)申请中断的中断源的中断允许位为1。
在满足以上条件的基础上,CPU一般会响应中断。
(2)有下列任何一种情况存在,中断响应都会受到阻断:
1)CPU正在响应一个同级或更高优先级的中断。
2)当前指令尚未执行完。
3)正在执行中断返回或访问专用寄存器IE、IP的指令。
CPU在执行完上述指令之后,要再执行一条指令才能响应中断请求。
4-8MCS-51单片机中断处理的过程如何描述?
中断处理过程可以分为三个阶段:
中断响应、中断处理、中断返回。
(1)中断响应是CPU对中断源发出的中断请求进行的响应,包括保护断点和把程序转向中断服务函数的入口地址。
(2)中断处理就是执行中断服务函数。
中断服务函数从中断入口地址开始执行,直到函数结束为止。
(3)中断返回是指中断服务完成后,CPU返回到原来程序的断点(即原来断开的位置),继续执行原来的程序。
4-9机械式按键组成的键盘,如何消除按键抖动?
独立式按键和矩阵式按键分别有什么特点?
实用于什么场合?
(1)消除抖动常用的方法有下列两种:
硬件去抖和软件去抖。
在键数较少时,可采用硬件去抖;当键数较多时,采用软件去抖。
(2)独立式按键的特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其他I/O线的状态;矩阵式按键的特点是由行线和列线组成,按键位于行、列的交叉点上,节省了很多I/O口。
(3)在键数较少时,可采用独立式按键;在在键数较少时,可采用矩阵式按键。
4-10如何使用C语言书写定时器1中断的中断服务程序的首部?
要求使用寄存器组2
代码如下:
voidt1(void)interrupt3using2
项目五
5-1填空题
(1)机器周期,外部的事件
(2)定时器
(3)工作方式控制寄存器TMOD,控制寄存器TCON
(4)10H,15H
5-2选择题
(1)C
(2)C
(3)B
(4)D
5-3定时器/计数器有哪几种工作方式?
各有什么特点?
(1)定时器/计数器有方式0、方式1、方式2和方式3四种工作方式。
(2)方式0是13位计数器;方式1是16位计数器;方式2是自动重装初值8位计数器;方式3的定时器0分为两个独立的8位计数器,方式3的定时器1无中断的计数器。
5-4控制寄存器TMOD和TCON各位的定义是什么?
怎样确定各定时器/计数器的工作方式?
(1)TMOD(地址为89H)的作用是设置T0、T1的工作方式。
低4位用于控制T0,高4位用于控制T1;TCON(地址为88H)的作用是控制定时器的启动与停止,并保存T0、T1的溢出和中断标志。
(2)是通过工作方式控制位M0和M1,来确定各定时器/计数器工作方式的,如下表所示:
M1M0
工作方式
00
方式0
01
方式1
10
方式2
11
方式3
5-5在工作方式3中,定时器/计数器T0和T1的应用有什么不同?
定时器0分为两个独立的8位加1计数器TH0和TL0。
TL0既可用于定时,也能用于计数;TH0只能用于定时。
定时器1不能工作在方式3下。
5-6定时器/计数器作定时器用时,其定时时间与哪些因素有关?
作计数器时,对外界计数频率有何限制?
(1)定时器的定时时间与系统的时钟频率有关。
因一个机器周期等于12个时钟周期,所以计数频率应为系统时钟频率的1/12(即机器周期)。
如晶振频率为12MHz,则机器周期为1s。
通过改变定时器的定时初值,并适当选择定时器的长度(8位、13位或16位),以调整定时时间长短。
(2)外部计数脉冲的频率不能高于晶振频率的1/24。
5-7当定时器T0工作于方式3时,如何使运行中的定时器T1停止下来?
当定时器T0工作于方式3时,T1的控制位TR1、TF1和中断源都被T0占用了。
这时若要使运行中的定时器T1停止下来,可将T1设为方式3。
5-8晶振fosc=6MHZ,T0工作在方式1,最大定时等于多少?
最大定时时间等于131.072ms。
5-9已知单片机时钟频率fosc=12MHZ,当要求定时时间为50ms和25ms时,试编写定时器/计数器的初始化程序。
(1)定时时间为50ms时,定时器/计数器的初始化程序:
TMOD=0x01;//T0方式1计时50ms
TH0=(65536-50000)/256;//定时器T0的高8位
TL0=(65536-50000)%256;
EA=1;//允许所有中断
ET0=1;//允许T0中断
TR0=1;
(2)定时时间为25ms时,定时器/计数器的初始化程序:
TMOD=0x01;//T0方式1计时25ms
TH0=(65536-25000)/256;//定时器T0的高8位
TL0=(65536-25000)%256;
EA=1;//允许所有中断
ET0=1;//允许T0中断
TR0=1;
5-10已知AT89C51时钟频率fosc=6MHZ,试利用定时器编写程序,使P1.0输出一个占空比为1