[嵌入式技术基础与实践]习题参考答案
第1章概述习题参考答案
1.嵌入式系统的基本含义是什么?为什么说单片机是典型的嵌入式系统?
答:即MCU 的含义是:在一块芯片上集成了中央处理单元(CPU )、存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。大部分嵌入式系统以MCU 为核心进行设计。MCU 从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计的,它能很好地满足应用系统的嵌入、面向测控对象、现场可靠运行等方面的要求。因此以MCU 为核心的系统是应用最广的嵌入式系统。
2. 简述嵌入式系统的特点以及应用领域。
答:嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现; 嵌入式系统开发需要专用工具和特殊方法; 使用MCU 设计嵌入式系统,数据与程序空间采用不同存储介质; 开发嵌入式系统涉及软件、硬件及应用领域的知识; 嵌入式系统的其他特点, 比如紧张的资源,较高稳定性要求,低功耗,低成本等。一般用于工业控制,智能家电,日常电子等领域。
4.比较MCU 与CPU 的区别与联系。
答:CPU 是一个单独的PC 处理器。而MCU ,则有微处理器,存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。所以可以这么说,MCU 是一个包含微处理器的嵌入式系统,而CPU 紧紧是一个处理器而已。
第2章FreescaleS08微控制器习题参考答案
1.给出AW60 存储器映像的简要说明。
答:所谓存储器映像,是指地址$0000 ~ $FFFF这个64KB 空间,哪些地址被何种存储器所占用,或者说AW60的RAM 、Flash 、I/O映像寄存器各使用$0000 ~ $FFFF这个64KB 空间中的哪些地址。简单地说,就是$0000 ~ $FFFF这个64KB 空间是如何分配的。
2.AW60的引脚主要分为哪几类?简要说明主要引脚的功能。
答:(1)电源类信号引脚(2)复位信号引脚(3)主要功能模块引脚。比如定时器,IRQ 中断等。(4)其他,比如背景调试BKGD 引脚
主要引脚:AW60最小系统连接的I/O口,以及各具体功能I/O口。
3.嵌入式系统中RAM 和Flash 作用分别是什么?答:一般来说RAM 这个区域安排用户数据(主要是全局变量)和堆栈空间;Flash
要用于存储程序、常数、中断向量等。
4.给出AW60的硬件最小系统。答:AW60芯片的硬件最小系统包括电源及其滤波电路、复位电路、晶振电路及PLL 滤
波电路、写入器接口电路。
5.指出下列指令中的源操作数和目的操作数的寻址方式。
(1) MOV #$80 , $80 (2) MOV $80,$A0
(3) MOV $80 , X+ (4) MOV X+ , $80
(5) LDA $80 , X
答:(1)立即寻址,直接寻址
(2)直接寻址,直接寻址
(3)直接寻址,无偏移量变址、变址加1寻址方式
(4)无偏移量变址、变址加1寻址方式, 直接寻址
(5)直接寻址,无偏移量变址、变址加1寻址方式
8.说明芯片初始化时堆栈指针的初始化方法。
答:SP 是指向下一个栈地址的16位寄存器,堆栈指针SP 采用递减的结构,即进栈
SP 减1,出栈时SP 加1。初始化时,SP 的初值为$00FF(前置符号$表示十六进制数) 。栈指针复位指令(RSP)可将SP 的低8位置为$FF,而不影响高8位。
10.编写一段延时1000个指令周期的延时子程序。
答:DL1000;
MOV R7#248
DJNZ R7$
MOV R7#250
DJNZ R74
RET
第3章第一个样例程序及工程组织习题参考答案
1.什么叫通用I/O口?
答:所谓通用I/O,也记为GPIO (GeneralPurposeI/O),即基本的输入/输出,有时也称并行I/O,或普通I/O,它是I/O的最基本形式。
2.什么叫上拉电阻与下拉电阻?它们的作用是什么?如何选择上拉电阻与下拉电阻的阻值?哪些情况下使用上拉电阻? 哪些情况下使用下拉电阻?
答:通俗地说,若MCU 的某个引脚通过一个电阻接到电源(Vcc )上,这个电阻被称为“上拉电阻”。与之相对应,若MCU 的某个引脚通过一个电阻接到地(GND )上,则相应的电阻被称为“下拉电阻”;他们使得悬空的芯片引脚被上拉电阻或下拉电阻初始化为高电平或低电平;根据实际情况,上拉电阻与下拉电阻可以取值在1KΩ~10KΩ之间,其阻值大小与静态电流及系统功耗相关;当某个引脚需要初始化成高电平时可以通过上拉电阻接电源,当某个引脚要初始化低电平时可以通过下拉电阻接地。
3.什么是OC 输出?为什么OC 输出的I/O口一定要上拉?
答:OC输出, 即开漏输出,即集电极开路。只有接了上拉电阻,才能输出高低电平,否则只能输出低电平了。
4.为什么在无操作系统的嵌入式系统软件主程序中使用无限循环?
答:由于程序都是顺序执行的。如果不使用无限循环,程序执行一遍代码,就不能在接受其他的任务操作了。在嵌入式系统中,这是致命的,如果一个嵌入式产品每次只能使用一次或只接受一次任务,那是无法想象的。但是使用了无限循环,就可以不停地监听任务,并执行。
5.找出样例子工程的机器码文件,解释S19文件的含义。
答:源文件经编译、连接后可获得目标码文件(.S19文件),它是FreescaleMCU 的机器码文件,通过写入程序可将机器码下载到目标MCU 内的Flash 存储器,也可以通过光盘中苏州大学嵌入式系统研发中心开发的独立写入软件SD-Programmer-S08读出写入到Flash 的S19的内容,观察实际写入到Flash 的内容是否和S19的内容相同。该程序也可以擦写Flash 。目标代码文件是以S 记录格式表示的机器码文件。S 记录格式是Freescale 公司的十六进制目标代码文件,它将目标程序和数据以ASCII 码格式表示,可直接显示和打印。目标文件由若干行S 记录构成,每行S 记录可以用CR/LF/NUL结尾。一行S 记录由五部分组成,具体细节请参考书中3.4.4。
6.举例给出CW 环境C 语言工程文件的组织结构图。
答:以下是控制小灯闪烁的CW 环境C 语言工程文件的组织结构图。
7.分析Project.prm 文件的功能。
答:Project.prm 文件主要实现了芯片的RAM 和ROM 的定义,初始化RAM 中的变量。初始化堆栈的大小。定义复位向量,即应用程序的默认入口。还包含了启动代码,是硬件复位后的函数入口
第4章 基于硬件构件的嵌入式系统开发方法
3.为什么要将某些寄存器名和寄存器位在头文件中进行宏定义?
答:对MCU 内的模块寄存器名和端口名进
行重定义,在其它的代码里面都将使用宏名
对模块寄存器和端口进行操作。这样,当底
层驱动程序移植到其它MCU 时,只要修改
重定义语句就可以了。
4.为什么在设计底层硬件驱动构件
时,不能使用全局变量?
答:应用程序在使用底层构件时,严格禁止
通过全局变量来传递参数,所有的数据传递
都要通过函数的形式参数来接收。这样做不
但使得接口简洁,更加避免了全局变量可能
引发的安全隐患。
第5章串行通信接口SCI 习题参考答案
1.简要阐述异步串行通信涉及的主要
基本概念。
答:串行通信至少涉及到以下几个基本概念:第一,每个字节之间是如何区分开的?第二,发送一位的持续时间是多少?第三,怎样知道传输是正确的?第四,可以传输多远?这些问题属于串行通信的基本概念。
2.表征串行通信速度的物理量是什么?串行通信的传输速度有限制吗?
答:位长(BitLength ),也称为位的持续时间(BitDuration )。其倒数就是单位时间内传送的位数。人们把每秒内传送的位数叫做波特率(BaudRate )。波特率的单位是:位/秒,记为bps 。bps 是英文bitpersecond 的缩写,习惯上这个缩写不用大写,而用小写。通常情况下,波特率的单位可以省略。通常使用的波特率有600、900、1200、1800、2400、4800、9600、19200、38400、57600、115200、128000等。
有限制。因为随着波特率的提高,位长变小,以至于很容易受到电磁源的干扰,通信就不可靠了。当然,还有通信距离问题,距离小,可以适当提高波特率,但这样毕竟提高的幅度非常有限,达不到大幅度提高的目的。
3.MCU 与PC 进行通信为什么要进行电平转换?如何进行电平转换?
答:在MCU 中,若用RS-232总线进行串行通信,则需外接电路实现电平转换。在发送端,需要用驱动电路将TTL 电平转换成RS-232电平;在接收端,需要用接收电路将RS-232电平转换为TTL 电平。电平转换器不仅可以由晶体管分立元件构成,也可以直接使用集成电路。目前广泛使用MAX232芯片较多,该芯片使用单一+5V电源供电实现电平转换。
4.给出SCI 编程的通用模型。
答:SCI 具有初始化、接收和发送三种基本操作。按照构件的思想,可将它们封装成三个独立的功能函数,初始化函数完成对SCI 模块的工作属性的设定,接收和发送功能函数则完成实际的通信任务。以SCI 的初始化、接收和发送三种基本操作为例,来说明实现构件化的全过程。
(1)SCI 模块是最底层的构件,它主要向上提供三种服务,分别是SCI 模块的初始化、接收单个字节和发送单个字节,向下则直接访问模块寄存器,实现对硬件的直接操作。另外,从现实使用角度出发,它还需要封装接收N 个字节和发送N 个字节的子功能函数。
(2)SCI 模块在软件上对应1个SCI.c 程序源代码文件和1个SCI.h 头文件,当需要对它进行移植时,大多数情况下只需简单拷贝这两个文件即可,无需对源代码文件和头文件进行修改,只有当实施不同芯片之间的移植时,才需要修改头文件中与硬件相关的宏定义。
(3)上层构件或软件在使用该构件时,严格禁止通过全局变量来传递参数,所有的数据传递都直接通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。
5.简述中断的作用与处理过程。
答中断是MCU 实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,中断系统将迫使CPU 暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。中断的处理过程一般为:关中断(在此中断处理完成前,不处理其它中断)、保护现场、执行中断服务程序、恢复现场、开中断等。
6.S08系列MCU 都有哪些中断源?
答:S08系列MCU 有26个中断源,按优先级从高到低的顺序分别是:复位中断(1个)、SWI 指令中断(1个)、IRQ 引脚中断(1个)、低电压检测中断(1个)、ICG 中断(1个)、定时器中断(10个)、SPI 中断(1个)、SCI 中断(6个)、键盘输入中断(1个)、ADC 转换完成中断(1个)、IIC 中断(1个)和实时中断(1个)。26个中断源只有18个中断向量,有的
是几个中断源使用同一个中断向量。
7.S08系列MCU 的中断执行过程分为哪几个步骤?
答:CPU 每执行完一条指令,若程序有开放某些中断及总中断(使用CLI 指令),则CPU 按照优先级次序查询所有中断标志位,若某个中断已发生,则响应该中断请求。中断响应过程是:(1)CPU 内的寄存器PCL 、PCH 、X 、A 、CCR 依次进栈(注意H 未被保护,这是为了与HC05系列MCU 兼容,所以必要时,H 应由用户中断服务程序保护);
(2)自动关总中断(即相当于自动执行SEI 指令),防止其他中断进入;
(3)从相应的中断向量地址取出中断向量(即中断服务程序的入口地址)送给PC ;
(4)执行中断服务程序,直到执行中断返回指令RTI 。RTI 指令从堆栈中依次弹出CCR 、
A 、X 、PCH 、PCL ,使CPU 返回原来中断处继续执行;
(5)若中断过程也允许响应新的中断,可在中断服务程序中用CLI 指令开放中断。一般不建议这样做,可用其他编程技巧处理相关问题。
8.给出AW60中断编程框架与基本步骤。
答:在CW 环境下使用AW60芯片中断步骤是:在main.c 中,依照“关总中断→开模块中断→开总中断”的顺序打开模块中断;在isr.c 文件中,编写中断服务程序,修改中断向量表;按照这种思路,编程的基本步骤可以概括为3步:
(1)新建(或者复制)一个isr.c 文件,并加入工程中。
(2)定义中断向量表(复制isr.c 的应修改中断向量表)。
(3)定义ISR 并在中断向量表中填入相应ISR 的名称。如中断处理函数文件(isr.c )之中的函数interruptvoidSCI1_Recv(void)的定义。
第6章GPIO 的应用实例—键盘、LED 与LCD
1.为了实现对键盘的编程,至少应该考虑哪几个方面的问题?分别如何解决?
答:课本141
4.简述字符型液晶显示控制器HD44780的编程结构。
答:从编程角度看,HD44780内部主要由指令寄存器(IR )、数据寄存器(DR )、忙标志(BF )、地址计数器(AC )、显示数据寄存器(DDRAM )、字符发生器ROM (CGROM )、字符发生器RAM (CGRAM )及时序发生电路构成。