




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式技术基础与实践(第二版)习题参考答案目录第1章 概述 习题参考答案1第2章 Freescale S08微控制器 习题参考答案3第3章 第一个样例程序及工程组织 习题参考答案5第4章 基于硬件构件的嵌入式系统开发方法 习题参考答案8第5章 串行通信接口SCI 习题参考答案10第6章 GPIO的应用实例键盘、LED与LCD 习题参考答案12第7章 定时器模块 习题参考答案13第8章 串行外设接口SPI 习题参考答案14第9章 Flash存储器在线编程 习题参考答案15第10章 集成电路互连总线I2C 习题参考答案18第11章 模数转换模块A/D 习题参考答案20第12章 系统开发其他模块应用 习题参考答案21第13章 JM60的USB 2.0开发方法 习题参考答案23第14章 DZ60的CAN总线开发方法 习题参考答案28第1章 概述 习题参考答案1嵌入式系统的基本含义是什么?为什么说单片机是典型的嵌入式系统?答:即MCU的含义是:在一块芯片上集成了中央处理单元(CPU)、存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。大部分嵌入式系统以MCU为核心进行设计。MCU从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计的,它能很好地满足应用系统的嵌入、面向测控对象、现场可靠运行等方面的要求。因此以MCU为核心的系统是应用最广的嵌入式系统。 2 简述嵌入式系统的特点以及应用领域。答:嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现;嵌入式系统开发需要专用工具和特殊方法;使用MCU设计嵌入式系统,数据与程序空间采用不同存储介质;开发嵌入式系统涉及软件、硬件及应用领域的知识;嵌入式系统的其他特点,比如紧张的资源,较高稳定性要求,低功耗,低成本等。一般用于工业控制,智能家电,日常电子等领域。 3比较MCU与CPU的区别与联系。答:CPU是一个单独的PC处理器。而MCU,则有微处理器,存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。所以可以这么说,MCU是一个包含微处理器的嵌入式系统,而CPU紧紧是一个处理器而已。4举例说明嵌入式系统在日常生活中的应用。答:日常数码产品:手机,MP3,U盘,相机等。日常工业类:冰箱,空调,微波炉,汽车等。5C语言的那些特性使得它成为嵌入式系统中使用频率最高的高级语言。答:相比底端汇编,更简单易学;与高级语言如(C+,C#,java等)相比,执行效率高,编译后的编码体积小,而且支持好的编译器还支持嵌入汇编代码;对位的操纵能力很强。6阅读光盘中【第01章(概述)阅读资料】中的“嵌入式C语言工程简明规范”,用一页纸给出嵌入式C语言工程简明规范的要点。答:此规范主要针对单片机编程语言和08编译器而言,包括命名、注释、编码规范性等内容。建议在一个工程或者一个项目中尽量遵循相同的代码规范,而不是说你只能拥有一个代码规范。(1)命名规则:命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。即见名知意;命名风格要自始至终保持一致;命名中若使用特殊约定或缩写,要有注释说明;为了代码复用,命名中应避免适用与具体项目相关的前缀;应使用英语命名。(2)注释:注释基本原则就是有助于对程序的阅读理解,说明程序在做什么,解释代码的目的、功能和采用的方法。一般情况源程序有效注释量在30左右。 注释语言必须准确、易懂、简洁。边写代码边注释,修改代码同时修改相应的注释,不再有用的注释要删除。 汇编和C中都用/,取消; 不使用段注释 /* */ (调试时可用)。使用文件注释必须说明文件名、项目名称、函数功能、创建人、创建日期、版本信息等相关信息。修改文件代码时,应在文件注释中记录修改日期、修改人员,并简要说明此次修改的目的。所有修改记录必须保持完整。 文件注释放在文件顶端,用/*/格式包含。 注释文本每行缩进4个空格;每个注释文本分项名称应对齐。 函数头部注释应包括函数名称、函数功能、入口参数、出口参数等内容。如有必要还可增加作者、创建日期、修改记录(备注)等相关项目。 函数头部注释放在每个函数的顶端,用/*/的格式包含。其中函数名称应简写为FunctionName(),不加入、出口参数等信息。代码注释应与被注释的代码紧邻,放在其上方或右方,不可放在下面。如放于上方则需与其上面的代码用空行隔开。一般少量注释应该添加在被注释语句的行尾,一个函数内的多个注释左对齐;较多注释则应加在上方且注释行与被注释的语句左对齐。通常,分支语句(条件分支、循环语句等)必须编写注释。其程序块结束行的右方应加表明该程序块结束的标记end of , 尤其在多重嵌套时。同一类型的标识符应集中定义,并在定义之前一行对其共性加以统一注释。对单个标识符的注释加在定义语句的行尾。 全局变量一定要有详细的注释,包括其功能、取值范围、哪些函数或过程存取它以及存取时的注意事项等。 注释用/的格式。 (3)编码规范性:代码的每一级均往右缩进4个空格的位置;不使用Tab键,建议使用空格代替tab键,这样代码打印不回造成错乱;相对独立的程序块之间要加空行;括号内侧(即左括号后面和右括号前面)不加空格,多重括号间不加空格。如:SetName(GetFunc();函数形参之间应该有且只有一个空格(形参逗号后面加空格),如:CallFunction(para1, para2, para3),而CallFunction(para1,para2,para3) 不符合要求;操作符前后均加一个空格,如: nSum = nNunm1 + nNum2 。而nSum=nNunm1+nNum2 则不符合要求;单目操作符,如!、+、-、&(地址运算符)等,后面不加空格,如:i+ ,pName = &name,bRes = !(x 10);if、else if、else、for、while语句无论其执行体是一条语句还是多条语句都必须加花括号,且左右花括号各独占一行;Switch 语句必须包含default 分支;一个函数不要超过80行代码。7第2章 Freescale S08微控制器 习题参考答案 1给出AW60 存储器映像的简要说明。答:所谓存储器映像,是指地址$0000 $FFFF这个64KB空间,哪些地址被何种存储器所占用,或者说AW60的RAM、Flash、I/O映像寄存器各使用$0000 $FFFF这个64KB空间中的哪些地址。简单地说,就是$0000 $FFFF这个64KB空间是如何分配的。2AW60的引脚主要分为哪几类?简要说明主要引脚的功能。答:(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寻址方式6说明跳转指令BRA和JMP的差别。答:BRA是无条件相对转移指令,转移范围是前127字节、后128字节。而JMP则是绝对地址跳转指令。 7哪些指令影响堆栈指针?如何影响?答:PSH,PUL 。前者是向堆栈中放入,指针减1,向上移;而PUL刚好相反,指针加1,向下移。8说明芯片初始化时堆栈指针的初始化方法。 答:SP是指向下一个栈地址的16位寄存器,堆栈指针SP采用递减的结构,即进栈SP减1,出栈时SP加1。初始化时,SP的初值为$00FF(前置符号$表示十六进制数)。栈指针复位指令(RSP)可将SP的低8位置为$FF,而不影响高8位。 9写出主要汇编伪指令? 答:变量定义(变量声明)数字常数与字符串常数定义常数赋值与文本替代符伪指令指令存储定位伪指令文件包含伪指令宏定义和宏调用伪指令定义存储区域伪指令具体细节请参照2.7.2节 10编写一段延时1000个指令周期的延时子程序。答:DL1000;MOV R7#248DJNZ R7$MOV R7#250DJNZ R74 RET第3章 第一个样例程序及工程组织 习题参考答案1什么叫通用I/O口?答:所谓通用I/O,也记为GPIO(General Purpose I/O),即基本的输入/输出,有时也称并行I/O,或普通I/O,它是I/O的最基本形式。 2 什么叫上拉电阻与下拉电阻?它们的作用是什么?如何选择上拉电阻与下拉电阻的阻值?哪些情况下使用上拉电阻? 哪些情况下使用下拉电阻? 答:通俗地说,若MCU的某个引脚通过一个电阻接到电源(Vcc)上,这个电阻被称为“上拉电阻”。与之相对应,若MCU的某个引脚通过一个电阻接到地(GND)上,则相应的电阻被称为“下拉电阻”;他们使得悬空的芯片引脚被上拉电阻或下拉电阻初始化为高电平或低电平 ;根据实际情况,上拉电阻与下拉电阻可以取值在1K10K之间,其阻值大小与静态电流及系统功耗相关;当某个引脚需要初始化成高电平时可以通过上拉电阻接电源,当某个引脚要初始化低电平时可以通过下拉电阻接地。3什么是OC输出?为什么OC输出的I/O口一定要上拉?答:OC输出,即开漏输出,即集电极开路。 只有接了上拉电阻,才能输出高低电平,否则只能输出低电平了。 4为什么在无操作系统的嵌入式系统软件主程序中使用无限循环?答:由于程序都是顺序执行的。如果不使用无限循环,程序执行一遍代码,就不能在接受其他的任务操作了。在嵌入式系统中,这是致命的,如果一个嵌入式产品每次只能使用一次或只接受一次任务,那是无法想象的。但是使用了无限循环,就可以不停地监听任务,并执行。 5找出样例子工程的机器码文件,解释S19文件的含义。答:源文件经编译、连接后可获得目标码文件(.S19文件),它是Freescale MCU的机器码文件,通过写入程序可将机器码下载到目标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中的变量。初始化堆栈的大小。定义复位向量,即应用程序的默认入口。还包含了启动代码,是硬件复位后的函数入口。 8如何查看一个文件.LST文件,举例分析一个LST文件。答:利用Freescale Codewarrior打开控制小灯闪烁工程文件,通过edit-standard settings-target compiler for HC08-option-output-generate Listing File点击确定编译连接可以生成.LST文件。然后在该工程的bin文件夹中可以找.LST文件,通过Freescale Codewarrior 打开main.lst文件。看下面的一段代码:26:Light_Init(Light_Run_PORT,Light_Run,Light_OFF); /指示灯初始化004c a606 2 LDA #6004e 87 2 PSHA 004f 5f 1 CLRX 0050 4f 1 CLRA 0051 cd0000 6 JSR Light_Init0054 8a 3 PULH 26: Light_Init(Light_Run_PORT,Light_Run,Light_OFF)是C程序代码;004c a606 004e 87 0050 4f 0051 cd0000 004f 5f 0054 8a 是该程序的机器代码;其后面的对应的是汇编程序代码。 9如何能知道一段或一句C语言源程序的汇编代码与机器码,举例之。答:请参考第8题。10给出一个C语言控制三盏小灯的程序,并调试,功能自定。答:请参考课本中3.5及随书光盘。11给出一个S08汇编语言控制三盏小灯的程序,并调试,功能自定。答:请参考课本中3.6及随书光盘。12分析一个map文件,简要说明map文件给了我们什么信息?答:打开工程后,展开“工程设置文件夹”后,再展开“Linker Files” 文件夹,可以看到“Project.map”文件,通常称之为工程的“映像文件”,这个文件告诉我们,源代码被编译连接后的机器码,到底被下载到MCU内存储器中的什么地方,在高级调试时,可能需要用到这些知识。第4章 基于硬件构件的嵌入式系统开发方法 习题参考答案1简要阐述嵌入式硬件构件的基本思想及优点。答:嵌入式硬件构件是指将一个或多个硬件功能模块、支撑电路及其功能描述封装成一个可重用的硬件实体,并提供一系列规范的输入/输出接口。 优点:结构清晰,方便移植。2硬件构件如何分类?给出各类硬件构件的定义及原理图设计要点。答:根据所拥有接口类型的不同,硬件构件分为核心构件、中间构件和终端构件三种类型。核心构件只有提供接口,没有需求接口。也就是说,它只为其它硬件构件提供服务,而不接受服务。在以单MCU为核心的嵌入式系统中,MCU的最小系统就是典型的核心构件。中间构件既有需求接口又有提供接口,即它不仅能够接受其它构件提供的服务,而且也能够为其它构件提供服务。而终端构件只有需求接口,它只接受其它构件提供的服务。 设计核心构件时,需考虑的问题是:“核心构件能为其他构件提供哪些信号?”核心构件设计的目标是:凡是使用该MCU进行硬件系统设计时,核心构件可以直接“组装”到系统中,无须任何改动。为了实现这一目标,在设计核心构件的实体时必须考虑细致、周全,包括稳定性、扩展性等,封装要完整。 设计中间构件时,需考虑的问题是:“中间构件需要接受哪些信号,以及提供哪些信号?”为直观起见,设计中间构件时,将构件的需求接口放置在构件实体的左侧,提供接口放置在右侧。 设计终端构件时,需考虑的问题是:“终端构件需要什么信号才能工作?”。终端构件没有提供接口,它仅有与上一级构件交互的需求接口,因而接口标识均为斜体标注的接口注释。3为什么要将某些寄存器名和寄存器位在头文件中进行宏定义?答:对MCU内的模块寄存器名和端口名进行重定义,在其它的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其它MCU时,只要修改重定义语句就可以了。 4为什么在设计底层硬件驱动构件时,不能使用全局变量?答:应用程序在使用底层构件时,严格禁止通过全局变量来传递参数,所有的数据传递都要通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。5给出设计底层硬件驱动构件的基本原则,并举例说明。答:在对底层构件进行设计时,最关键的工作是要对构件的共性和个性进行分析,抽取出构件的属性和对外接口函数。尽量做到:当一个底层构件应用到不同系统中时,仅需修改构件的头文件,对于构件的源程序文件则不必修改或改动很小。 例如,串行通信模块SCI是大多数MCU都具有的内部模块。仔细分析各种MCU串行通信程序发现:在查询方式下,各种MCU都是根据状态寄存器中的两个标志位来判断是否接收到数据和数据是否发送完毕,这就是SCI模块的共性。对于不同的MCU,该状态寄存器的名称可能不同,这两个标志位的位号也有可能不同。此外,用以设置波特率、通信格式、是否校验、是否允许中断等参数的寄存器也不同,这就是SCI模块的个性。分析出了共性和个性之后,就可以抽取出SCI构件的属性和操作,编制构件头文件和程序文件了。 6什么叫程序复用?什么叫程序移植?怎样才能方便重用与移植。答:复用是指在一个系统中,同一构件可被重复使用多次。移植是指将一个系统中使用到的构件应用到另外一个系统中;在设计时最关键的工作是要对构件的共性和个性进行分析,抽取出构件的属性和对外接口函数,设计是充分考虑这几放面的因素,才能方便重用和移植。7怎样方便驱动程序进行移植?答:首先对外接口函数设计要合理,其次要对MCU内的模块寄存器名和端口名进行重定义,在其它的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其它MCU时,只要修改重定义语句就可以了,这就方便了驱动程序的移植。 8阐述利用硬件构件思想设计嵌入式应用系统时应该遵循的基本原则。答: 应当遵循以下基本规则:(1)构件的头文件和源程序文件的主文件名一致,且为构件名。(2)属性和操作的命名统一以构件名开头。这样做的好处是:当使用底层构件组装软件系统时,避免构件之间出现同名现象。同时,名称要使人有“顾名思义”的效果。(3)对MCU内的模块寄存器名和端口名进行重定义,在其它的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其它MCU时,只要修改重定义语句就可以了。(4)内部函数与外部函数要设计合理,函数参数个数及类型要考虑全面。内部函数仅提供给同一构件中的其它内部函数或外部函数调用,作用域仅限于定义该函数的文件。外部函数是对外接口函数,供上层应用程序调用。在定义外部函数时,应该对函数名、函数功能、入口参数、函数返回值、使用说明、函数适用范围等进行详细描述,以增强程序的可读性。上层应用程序不能直接对构件的属性进行读取或设置,必须借助于该构件提供的接口操作函数来实现。(5)应用程序在使用底层构件时,严格禁止通过全局变量来传递参数,所有的数据传递都要通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。9第5章 串行通信接口SCI 习题参考答案1简要阐述异步串行通信涉及的主要基本概念。答:串行通信至少涉及到以下几个基本概念:第一,每个字节之间是如何区分开的?第二,发送一位的持续时间是多少?第三,怎样知道传输是正确的?第四,可以传输多远?这些问题属于串行通信的基本概念。2表征串行通信速度的物理量是什么?串行通信的传输速度有限制吗?答:位长(Bit Length),也称为位的持续时间(Bit Duration)。其倒数就是单位时间内传送的位数。人们把每秒内传送的位数叫做波特率(Baud Rate)。波特率的单位是:位/秒,记为bps。bps是英文bit per second的缩写,习惯上这个缩写不用大写,而用小写。通常情况下,波特率的单位可以省略。通常使用的波特率有600、900、1200、1800、2400、4800、9600、19200、38400、57600、115200、128000等。有限制。因为随着波特率的提高,位长变小,以至于很容易受到电磁源的干扰,通信就不可靠了。当然,还有通信距离问题,距离小,可以适当提高波特率,但这样毕竟提高的幅度非常有限,达不到大幅度提高的目的。3MCU与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暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。中断的处理过程一般为:关中断(在此中断处理完成前,不处理其它中断)、保护现场、执行中断服务程序、恢复现场、开中断等。6S08系列MCU都有哪些中断源?答:S08系列MCU有26个中断源,按优先级从高到低的顺序分别是:复位中断(1个)、SWI指令中断(1个)、引脚中断(1个)、低电压检测中断(1个)、ICG中断(1个)、定时器中断(10个)、SPI中断(1个)、SCI中断(6个)、键盘输入中断(1个)、ADC转换完成中断(1个)、IIC中断(1个)和实时中断(1个)。26个中断源只有18个中断向量,有的是几个中断源使用同一个中断向量。7S08系列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)之中的函数interrupt void SCI1_Recv(void)的定义。9用一种高级语言实现PC方串行数据收发的通用程序(要求:从PC方发送数据A到MCU,MCU收到后,判断是否是A,若是,回发给PC机,在PC机显示“串行口正常”,若不是,则在PC机显示“通信有误”。)参见随书光盘的习题参考解答程序。10在上一题测试的基础上编写通信程序,实现如下功能:通过PC机发送一个命令以控制接在PTA0PTA7口的8个小灯亮暗状态,各个小灯初始状态都为暗,首先进行通信测试,PC机发送“A”(65),若MCU接收到则8个小灯全亮,并回送字符“A”(65),虽然MCU接收到但有问题,不是“A”(65),说明有误码,则4个小灯全亮,并回送字符“0”(48),否则8个小灯全暗无反应,通信测试成功后进入控制状态,PC机发送字符串“11”,PTA0口灯亮;发送“10”,PTA0口灯暗;发送“21”,PTA1口灯亮;发送“20”,PTA1口灯暗;依此类推,当给PTA口发送“01”,8个小灯全亮,发送“00”,全暗。参见随书光盘的习题参考解答程序。27第6章 GPIO的应用实例键盘、LED与LCD 习题参考答案1为了实现对键盘的编程,至少应该考虑哪几个方面的问题?分别如何解决?答:第一,如何识别键盘上的按键?第二,如何区分按键是否真正地被按下,还是抖动?第三,如何处理重键问题?(1)键的识别如何知道键盘上哪个键被按下就是键的识别问题。若键盘上闭合键的识别由专用硬件实现,称为编码键盘;而靠软件实现的称为未编码键盘。在这里主要讨论未编码键盘的接口技术和键盘输入程序的设计。识别是否有键被按下,主要有查询法、定时扫描法与中断法等。而要识别键盘上哪个键被按下主要有行扫描法与行反转法。(2)抖动问题当键被按下时,会出现所按的键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况,当释放一个按键时也会出现类似的情况,这就是抖动问题。抖动持续的时间因操作者而异,一般为510ms之间,稳定闭合时间一般为十分之几秒几秒,由操作者的按键动作所确定。在软件上,解决抖动的方法通常是延迟等待抖动的消失或多次识别判定。(3)重键问题所谓重键问题就是有两个及两个以上按键同时处于闭合状态的处理问题。在软件上,处理重键问题通常有连锁法与巡回法。2编程:对于键盘程序,样例中使用的是中断法。请用查询法实现键盘功能。答:略。3简述扫描法LED显示编程原理。答:略。具体参见本章6.2.1。4简述字符型液晶显示控制器HD44780的编程结构。答:从编程角度看,HD44780内部主要由指令寄存器(IR)、数据寄存器(DR)、忙标志(BF)、地址计数器(AC)、显示数据寄存器(DD RAM)、字符发生器ROM(CG ROM)、字符发生器RAM(CG RAM)及时序发生电路构成。5编程:在LCD上同步显示PC时间。答:略。第7章 定时器模块 习题参考答案1实现计数与定时的基本方法有哪些?比较它们的优缺点。答:实现计数与定时的基本方法有三种:完全硬件方式、完全软件方式和可编程计数器/定时器方法。其中完全硬件方式速度快,但通用性和灵活性差;完全软件方式的优点是节省硬件。主要缺点是执行延时程序期间,CPU一直被占用,所以降低了CPU的使用效率,也不容易提供多作业环境;可编程计数器/定时器方法的最突出的优点是计数时不占用CPU的时间。2简述AW60定时器模块的定时功能是如何实现的。答:在AW60定时器的内部有状态和控制寄存器,通过对它某些位的设置,就可以确定多少时间计数器加1,即定时间隔。通过对状态和控制寄存器的某位进行设置,可以决定在计数器溢出时,是否允许中断。利用这样的中断,可以编写中断例程,实现预设的功能。在定时器内部还有个预置寄存器,当计数器的值等于预置寄存器的值时,称为计数器溢出,当计数器溢出时,计数器的值被赋0,同时将计数器溢出标志等状态置于状态和控制寄存器中。使用预置计数功能可以得到精确的溢出时间,可以在任何时候暂停或清除计数器的计数(溢出功能是定时器的最基本的功能)。3定时器模块的核心是什么,为什么?答:定时器模块的核心是计数器。计数器装载预置的初始计数值之后,启动会以预设的频率进行加一或者减一的运作,当其值变化到0(溢出到0或者减到0)时,即完成了定时的功能,其定时的时长取决于预置的初始计数值和预设的频率。4设计并编程:仿照本章给出的定时器1通道0输入捕捉中断里程,捕捉两路输入信号,分别用相应的指示灯指示。请参考随书光盘内的习题解答程序。5比较AW60定时器模块实现输出比较功能与PWM功能的异同点。答:PWM产生一个在高电平和低电平之间重复交替的输出信号,这个信号被称为PWM信号,也叫脉宽调制波。通过指定所需的时钟周期和占空比来控制高电平和低电平的持续时间。通常定义占空比为信号处于高电平的时间(或时钟周期数)占整个信号周期的百分比,方波的占空比是50%。脉冲宽度是指脉冲处于高电平的时间。PWM的另一个常见用途是控制输入到某个设备的平均电流或电压。PWM的常见应用是为其他设备产生类似于时钟的信号。因为S08是8位MCUs系列,定时器通道寄存器的设置被缓存起来,以确保连续16位数据更新,并避免出现意外的PWM脉冲宽度。写TPMxCnVH或TPMxCnVL中的任意一个寄存器,也就是写缓冲寄存器。在边沿对齐模式下,只有在一个16位寄存器的两个8位字节都被写入后,且TPMxCNTH:TPMxCNTL计数器中的值为0x0000,计数值被转移至相应的定时器通道寄存器(直到下一个整周期新的占空比才有效)。6综合设计:利用输入捕捉功能,只用定时器的一个通道,测量一路输入,将输入信号的电平(只区分高低)随时间变化的情况以图形方式显示在PC屏幕上。请参考随书光盘内的习题解答程序。第8章 串行外设接口SPI 习题参考答案1简述SPI工作原理。答:可以从SPI工作时序,主机从机,以及如何传输数据等几个方面展开描述,具体参加本章第一节内容。2为什么在SPI通信时序图中会有四种情况?答:先来解释一下SPI通信时所涉及的一时钟相位与时钟极性。时钟相位,表示时钟信号在空闲时是高电平还是低电平。时钟极性,决定数据是在SPSCK的上升沿还是在SPSCK时钟的下降沿采样。从上面的分析我们可以看出来,通讯双方确定SPI通信时选择时序时,一种有四种时序可以选择,使得双方的时钟相位与时钟极性保持一致。3 SPI通信时时钟以那个设备的时钟为基准?为什么?答:SPI主设备的时钟极性和时钟相位是以从设备的时钟极性和时钟相位为基准的,因此在配置SPI接口时,必须先了解从设备的时钟要求。从设备何时接收数据,是在时钟的上升沿还是下降沿?何时输出数据,是在时钟的下降沿还是上升沿?由于主设备的接收引脚与从设备的发送引脚相连,主设备的发送引脚与从设备的接收引脚相连接,即从设备接收的数据时主设备的发送引脚发出的,因此主设备接收数据的极性跟从设备接收数据的极性相反,跟从设备发送数据的极性相同。4SPI与SCI同样都是串行数据传输,为什么SPI协议通信双方多了一个时钟线SPSCK答:正因为SPI数据是一位一位传输的,所以在传输的时候要有SPSCK提供时钟脉冲完成数据的传输,数据通过MOSI,MISO线在始终上升沿或者下降沿时改变,在紧接着的下降沿或上升沿被读取,完成一位数据的读取,输入也使用同样的原理。这样,在至少8次时钟信号的改版(上沿和下沿为一次),就可以完成8为数据传输。5同步通信与异步通信的区别与联系。答:异步通讯在发送字符之前,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接受下来。在每次传输的数据之前要加上起始位跟停止位(结束位),异步传输的好处是通讯设备简单、发送端可以随时发送数据。缺点就是在每次传输时传输的,开始位和停止位的传输给通讯双方带来了额外的传输。同步通信的通信双方必须先建立同步,即双方的时候要调整到一个频率。收发双方不停地发送和接收持续的同步比特流。因此通讯双方必须保持相同的时钟频率,很显然这也是同步通信的缺点所在,而且双发在通信之前必须确定好传输时的时序图,时钟相位、时钟极性都必须保持一致。好处就是不用传输额外的标志比特。6阅读网络光盘中关于AT45DB041D芯片的介绍,在本书给出的参考程序的基础上,完善块擦除,扇区擦除灯驱动函数,并测试。答:略。第9章 Flash存储器在线编程 习题参考答案1简述Flash存储器的特点。答:Flash存储器是一种高密度、真正不挥发的高性能读写存储器,兼有功耗低、可靠性高等优点。与传统的固态存储器相比,Flash存储器的主要特点如下。(1)固有不挥发性:这一特点与磁存储器相似,Flash存储器不需要后备电源来保持数据。所以,它具有与磁存储器一样无需电能保持数据的优点。(2)易更新性:Flash存储器具有电可擦除的特点。相对于EPROM(电可编程只读存储器)的紫外线擦除方式,Flash存储器的电擦除功能为开发者节省了大量时间,也为最终用户更新存储器内容提供了方便条件。(3)成本低、密度高、可靠性好:与EEPROM(电可擦除可编程只读存储器)相比较,Flash存储器的成本更低、密度更高、可靠性更好。2AW60的Flash存储器有什么特点?答:要点主要有以下几条:(1)编程速度快且可靠性高。S08系列MCU的片内Flash存储器的整体擦除时间可以控制在5ms以内,对单字节的编程(写入)时间也在40ns以内。片内Flash存储器的存储数据可以保持10年以上,可擦写次数均在1万次以上。(2)单一电源电压供电。一般的Flash存储器,在正常的只读情况下,只需要用户为其提供普通的工作电压即可,而要对其编程(写入)时还需要同时提供高于正常工作电压的编程电压。正因为Flash的读写电压要求不同,一些公司的内置Flash存储器便放弃了在线擦除写入功能,而仅有通过编程器的写入功能。但是,S08系列MCU通过在片内集成的电荷泵,可由单一工作电压在片内产生出编程电压,这样就实现了单一电源供电的在线编程电压,而不需要为Flash的编程增加额外的编程电压模块,同时也使S08系列MCU兼具了两种编程模式。(3)支持在线编程。S08系列MCU的片内Flash存储器支持在线编程,允许MCU内部运行的程序去改写Flash存储器的内容,这样就可以代替外部电可擦除存储芯片,从而减少了外围部件,增加了嵌入式系统开发的方便性。3AW60的Flash存储器有哪两种编程模式?两种模式有什么区别?答:从Flash存储器的基本特点可以看出,在MCU中可以利用Flash存储器来固化程序,一般情况下通过编程器来完成这种操作,Flash存储器工作于这种情况称为监控模式(Monitor Mode)或写入器模式,这与一般的EPROM、OTP、EEPROM装入程序的方式十分相似。另一方面,由于Flash存储器具有电可擦除的特点,因此在程序运行过程中有可能对Flash存储区的数据或程序进行更新,Flash存储器工作于这种情况叫做用户模式(User Mode)或在线编程模式(In-Circuit Program)。但是,并不是所有类型的MCU的内部Flash存储器都具有在线编程功能。目前有的公司出品的MCU还不支持Flash存储器在线编程模式。Freescale的S08系列MCU的片内Flash均支持这两种编程模式。一般来说,两种模式对Flash存储器的编程操作的程序是一致的,差别在于调用这些程序的方式和环境的不同。4AW60的Flash存储器编程时涉及哪些寄存器,其各自地址是什么?答:在AW60中,与Flash编程有关的寄存器有6个,它们分别是Flash时钟分频寄存器(FCDIV)、Flash选项寄存器(FOPT和NVOPT)、Flash配置寄存器(FCNFG)、Flash保护寄存器(FPROT和NVPROT)、Flash状态寄存器(FSTAT)和Flash命令寄存器(FCMD),其对应的地址分别为$1820、$1821、$1823、$1824、$1825和$1826。5AW60的Flash存储器的编程命令一般执行哪些步骤?答:可以分为以下几步:(1)向Flash地址中写入一个数据。地址和数据信息都会被锁定到Flash接口中。对于空白检测和擦除命令,数据信息是一个任意值;对于页擦除命令,地址信息是擦除页(512字节)地址中的任意一个地址;对于空白检测和整体擦除命令,地址信息是Flash中的任意一个地址。(2)向Flash命令寄存器FCMD中写入需要执行的命令。(3)执行命令。将Flash状态寄存器FSTAT的FCBEF位置1,同时开始执行命令寄存器中的命令。6AW60的Flash存储器的编程命令的执行流程是怎样的?答:在进行Flash擦写编程时,也需要遵循严格的时序流程。批量模式写一个字节命令和其他命令的执行过程有很大差别。批量模式意味着有很多连续数据需要写入Flash,每执行一次写入命令后,向Flash中加入的写入高电压并不撤销,这样就加快了数据写入速度;而对于其他的命令,在命令执行的时候,加高电压,命令执行结束的时候立即撤销高电压。7给出AW60芯片的擦除与写入子程序的编程要点。答:使用Flash在线编程技术可以省去外接EEPROM,不仅简化了电路设计,也提高了系统稳定性。我们将Flash的执行程序编译后存放到Flash中,当需要使用时则将这段代码复制到RAM中,同时需要修改一下执行指令,正是由于这个特殊的过程,根据实际编程调试与项目开发过程中积累的经验,提出以下注意点,供读者参考:(1)RAM中要留有足够的缓冲区,以便存放复制到RAM中的子程序,具体值是取擦除与写入子程序中的大者即可。它们的大小可在编译后的.LST文件中查得。(2)一次擦除后未被写入过的区域可以再次调用写入子程序写入,但写入过的区域,未经擦除不能重写。(3)由于擦除是每次擦除一页(512字节),所以数据应合理安排,避免误擦。(4)页首地址的定义须遵照保护寄存器FLBPR定义的规则。(5)在线编程时使用的Flash存储区域应在程序Flash存储区域之前,因为Flash保护区为FLBPR决定的地址至末尾。8AW60芯片如何加密?如何解除密码?答:1.为了防止Flash中的程序被非法读出,就要将MCU设置为保密状态,下面提供两种加密Flash方法。方法一:通过修改文件isr.c文件中的安全配置域(即修改FOPT寄存器,地址0xFFBF的值和密钥地址0xFFB0 0xFFB7的值)实现加密。例如,若要设置密码0x3132333435363738,则只要将这8字节数据依次写到地址0xFFB00xFFB7处即可,该密码即为字符串“12345678”。方法二:在程序运行中,通过调用自定义函数修改Flash相关地址处的内容来加密Flash。通过修改NVOPT地址的内容,复位后,该寄存器的值将自动载入FOPT中。2. S08系列芯片在加密后,需要重新写入程序,必须先解除密码。这里提供2种解除密码方法。方法一:通过将写入器的BDM接口,对已经加密的芯片进行整体擦除,具体使用方法参见光盘中“S08/S12/ColdFire三合一写入器使用说明”。方法二:在芯片中驻留擦除密码或擦除Flash的操作接口,通过调用Flash_KEY_Match函数实现。用户可以选择一种“后门”机制,假如寄存器NVOPT/FOPT的KEYEN位为0时,后门机制无效,但是如果KEYEN位为1时,用户按照如下的方法取消MCU的保密状态:(1)将FCNFG的KEYACC位置1。(2)向NVBACKKEYNVBACKKEY+7的位置(Flash中$FFB0$FFB7)依次写入8个字节,由于第(1)步的操作,MCU会将该写入操作理解为是密码比较操作,这8个字节被看作是后门的钥匙。(3)将FCNFG的KEYACC位置0,如果用户写入的8个字节和NVBACKKEYNVBACKKEY+7的位置的8个字节是匹配的,MCU会将SEC01:SEC00改写成1:0,从而取消MCU的保密性。这种保密钥匙只能从保密的存储器中写入,所以在没有用户程序的配合下,背景调试命令也不可以进入的。当然如果不知道后门钥匙,使用这种方法也是无法取消MCU的保密态。第10章 集成电路互连总线I2C 习题参考答案1简述I2C总线的特点。答:I2C主要特点总结如下。(1)在硬件上,二线制的I2C串行总线使得各IC只需最简单的连接,而且总线接口都集成在IC中,不需另加总线接口电路。电路的简化省去了电路板上的大量走线,减少了电路板的面积,提高了可靠性,降低了成本。在I2C总线上,各IC除了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025辽宁辽阳市教师进修学院选调研训教师6人备考练习试题及答案解析
- 市政工程项目监理与质量控制方案
- 工地施工资料管理与记录方案
- 2025年健康运动试题及答案
- 超市合作协议范本
- 2025内蒙古第一地质矿产勘查开发有限责任公司招聘3人考试参考试题及答案解析
- 2025浙江金华市义乌市起航小学教师招聘2人(二)备考练习试题及答案解析
- 增加项合同装修工程增加项3篇
- GB/T 46012-2025林草物联网体系结构和接口要求
- 2025河南省中考数学试卷及答案
- 铁路信号基础设备维护(第二版) 课件 项目4-任务8 液压下拉装置维护
- 定额〔2025〕2号文-关于发布2020版电网技术改造及检修工程概预算定额2024年下半年价格
- 幼儿园红色故事:鸡毛信的故事
- 丹毒的健康宣教
- 《柴油机的维护保养》课件
- 两个女儿断绝关系协议书范文
- 多囊卵巢综合征合并胰岛素抵抗诊治专家共识
- 竞选竞选大学心理委员参考课件
- 2024年数控车工技能竞赛理论考试题库500题(含答案)
- 牙体牙髓病学(山东联盟)智慧树知到答案2024年滨州医学院
- 《矿物岩石学》全套教学课件
评论
0/150
提交评论