单片机毕业设计论文.doc_第1页
单片机毕业设计论文.doc_第2页
单片机毕业设计论文.doc_第3页
单片机毕业设计论文.doc_第4页
单片机毕业设计论文.doc_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 概述第1章 概 述1.1 凌阳十六位单片机简介 随着单片机功能集成化的发展,其应用领域也逐渐地由传统的机制,扩展为控制处理、数据处理以及数字信号处理(dsp,digital signalprocessing)等领域。凌阳的16位单片机就是为适应这种发展而设计的。它的cpu内核采用凌阳最新推出的nsp(microcontroller and signal processor)16位微处理器芯片(以下简称nsp)。围绕nsp所形成的16位nsp系列单片机(以下简称nsp家族)采用的是模块式集成结构,它以nsp内核为中心集成不同规模的rom、ram和功能丰富的各种外设接口部件,如图所示。 nsp内核是一个通用的核结构。除此之外的其它功能模块均为可选结构,亦即这种结构可大可小或可有可无。借助这种通用结构附加可选结构的积木式的构成,便可形成各种不同系列派生产品,以适合不同的应用场合。这样做无疑会使每一种派生产品具有更强的功能和更低的成本。nsp家族有以下特点:1体积小、集成度高、可靠性好且易于扩展 nsp家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减少了各功能部件之间的连线,提高了其可靠性和抗干扰能力。另外,模块化的结构易于系统扩展,以适应不同用户的需求。2具有较强的中断处理能力 nsp家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。3高性能价格比 nsp家族片内带有高寻址能力的rom、静态ram和多功能的i/o口。另外,nsp的指令系统提供具有较高运算速度的16位16位的乘法运算指令和内积运算指令,为其应用增添了dsp功能,使得nsp家族运用在复杂的数字信号处理方面既很便利,又比专用的dsp芯片廉价。4功能强、效率高的指令系统 nsp指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。5低功耗、低电压nsp家族采用cmos制造工艺,同时增加了软件激发的弱振方式、空闲方式和掉电方式,极大地降低了其功耗。另外,nsp家族的工作电压范围大,能在低电压供电时正常工作,且能用电池供电。这对于其在野外作业等领域中的应用具有特殊的意义。1.2 总述 spce061a 是继nsp系列产品spce500a等之后凌阳科技推出的又一款16位结构的微控制器。与spce500a不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,spce061a里只内嵌32k字的闪存(flash)。较高的处理速度使nsp能够非常容易地、快速地处理复杂的数字信号。因此,与spce500a相比,以nsp为核心的spce061a微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。 1.2.1 性能 16位nsp微处理器; 工作电压(cpu) vdd为2.43.6v (i/o) vddh为2.45.5v cpu时钟:0.32mhz49.152mhz ; 内置2k字sram; 内置32k flash; 可编程音频处理; 晶体振荡器; 系统处于备用状态下(时钟处于停止状态),耗电仅为2a3.6v; 2个16位可编程定时器/计数器(可自动预置初始计数值); 2个10位dac(数-模转换)输出通道; 32位通用可编程输入/输出端口; 14个中断源可来自定时器a / b,时基,2个外部时钟源输入,键唤醒; 具备触键唤醒的功能; 使用凌阳音频编码sacm_s240方式(2.4k位/秒),能容纳210秒的语音数据; 锁相环pll振荡器提供系统时钟信号; 32768hz实时时钟; 7通道10位电压模-数转换器(adc)和单通道声音模-数转换器; 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(agc)功能; 具备串行设备接口; 具有低电压复位(lvr)功能和低电压监测(lvd)功能; 内置在线仿真电路ice(in- circuit emulator)接口; 具有保密能力; 具有watchdog功能。1.2.2 结构概览 spce061a的结构如图1.2所示:1.2.3 芯片的引脚排列和说明 spce061a有两种封装片,一种为84个引脚,plcc84封装形式;它的排列如图1.4所示;另一种为80个引脚,lqfp80封装。他3的排列如图所示。 在plcc84封装中,有15个空余脚,用户使用时这15个空余脚悬浮。在lqfp80封装中有9个空余脚,用户使用时这9个空余脚接地。此处以lqfp80封装管脚功能介绍。【1】可将pfuse接5v, pvin接gnd并维持1s以上即可将内部保险丝熔化,此后就无法读取和向闪存加载数据。1.2.4 特性 spce061a系统的特性参数如表1.2所示。1.2.5 spce061a最小系统 最小系统接线如图1.6所示,在osc0、osc1端接上晶振及谐振电容,在锁相环压控振荡器的阻容输入vcp端接上相应的电容电阻后即可工作。其它不用的电源端和地端接上0.1f的去藕电容提高抗干扰能力。1.2.6 spce061a开发方法 spce061a的开发是通过在线调试器probe实现的。它既是一个编程器(即程序烧写器),又是一个实时在线调试器。用它可以替代在单片机应用项目的开发过程中常用的软件工具硬件在线实时仿真器和程序烧写器。它利用了spce061a片内置的在线仿真电路ice(in- circuit emulator)接口和凌阳公司的在线串行编程技术。probe工作于凌阳ide集成开发环境软件包下,其5芯的仿真头直接连接到目标电路板上spce061a相应管脚,直接在目标电路板上的cpu-spce061a调试、运行用户编制的程序。probe的另一头是标准25针打印机接口,直接连接到计算机打印口与上位机通讯,在计算机ide集成开发环境软件包下,完成在线调试功能。图1.7是计算机、probe、用户目标板三者之间的连接示意图,图1.8是实物连接图。71第二章spce061a的硬件结构第二章.spce061a的硬件结构spce061a 芯片内部集成了ice (在线实时仿真/除错器)、flash (闪存)、sram (静态内存)、通用i/o 端口、定时器/计数器、中断控制、cpu时钟锁相环(pll)、adc (模拟数字转换器)、dac (数字模拟转换器)输出、uart (通用异步串行输入输出接口)、sio (串行输入输出接口)、低电压监测/低电压复位等模块。在本章中我们将详细介绍各个模块的结构及应用。 nsp的核心由总线、alu算术逻辑运算单元、寄存器组、中断系统及堆栈等部分组成。其结构如图2.1所示。2.1 alu 算术逻辑运算单元 nsp的alu 非常有特色,除了一般基本的16 位算术逻辑运算,还提供了结合算术逻辑的16 位移位运算。在数字信号处理方面,提供了高速的16 位16 位乘法运算和内积(乘加)运算。2.1.1 16 位算术逻辑运算 nsp与大多数cpu 一样,提供了基本的算术运算与逻辑操作指令,加法、减法、比较、补码、异或、或、与、测试、写入、读出等16 位算术逻辑运算及数据传送操作。2.1.2 结合算术逻辑的16 位移位运算 nsp的移位运算包括:算术右移asr、逻辑左移lsl、逻辑右移lsr、旋转左移rol 及旋转右移ror。 nsp的移位器shifter 就串接在alu 的前面,也就是说,操作数在经过移位处理后,马上会进入alu 进行算数逻辑运算。所以,nsp的移位指令都是复合式指令,一个指令会同时完成移位和算术逻辑运算。程序设计者可利用这些复合式的指令,撰写更精简的程序代码,进而增加程序代码密集度(code density)。在微控制器应用中,如何增加程序代码密集度是非常重要的问题;提高程序代码密集度可以减少程序代码的大小,进而减少rom 或flash 的需求,以降低系统成本与增加执行效能。2.1.3 16 位 16 位的乘法运算和内积(乘加)运算 除了普通的16 位算数逻辑运算指令外,nsp还提供了高速的16 位 16 位乘法运算指令mul, 和16 位内积运算指令muls 。二者都可以用于有符号数相乘(signed signed) 或无符号数与有符号数相乘(unsigned signed)的运算。在nspisa1.1 指令集下,mul 指令只需花费12 个时钟周期,muls 指令花费10n+6 个时钟周期,其中n 为乘加的项数。例如:“mr=r2*r1 ,4”表示求4 项乘积的和,muls指令只需花费46(104+6=46)个时钟周期。这两条指令大大的提升了nsp的数字信号处理能力。2.2寄存器组 nsp cpu 的寄存器组一共有8 个16 位寄存器,可分为通用寄存器和专用寄存器两大类别。通用寄存器包括:r1r4,作为算术逻辑运算的来源及目标寄存器。专用寄存器包括sp、bp、sr、pc,是与cpu 特定用途相关的寄存器。2.2.1 通用寄存器r1r4 (general-purpose registers) 可用于数据运算或传送的来源及目标寄存器。寄存器r4、r3 配对使用,还可组成一个32 位的乘法结果寄存器mr;其中r4 为mr 的高字符组,r3 为mr 的低字符组,用于存放乘法运算或内积运算结果。2.2.2 堆栈指针寄存器sp (stack pointer) sp 是用来纪录堆栈地址的寄存器,sp 会指向堆栈的顶端。堆栈是一个先进后出的内存结构,nsp的堆栈结构是由高地址往低地址的方向来储存的。cpu 执行push、子程序调用call、以及进入中断服务子程序(isr,interrupt service routine) 时,会在堆栈里储存寄存器内容,这时sp 会递减以反映堆栈用量的增加。当cpu 执行pop 时、子程序返回ret、以及从isr 返回reti 时,sp 会递增以反映堆栈用量的减少。nsp堆栈的大小限制在2k 字的sram 内,即地址为0x0000000x0007ff 的内存范围中。2.2.3 基址指针寄存器bp (base pointer) nsp提供了一种方便的寻址方式,即基址寻址方式bp+im6;程序设计者可通过bp 来存取rom 与ram 中的数据,包括:局部变量(local variable)、函数参数(functionparameter)、返回地址(return address)等等。bp 除了上述用途外,也可做为通用寄存器r5,用于数据运算传送的来源及目标寄存器。因此,在本书或程序中,bp 与r5 是共享的,均代表基址指针寄存器。2.2.4 程序计数器pc (program counter) 它的作用与一般微控制器中的pc 相同,是用来纪录程序目前执行位置的寄存器,以控制程序走向。cpu 每执行完一个指令,就会改变pc 的值,使其指向下一条指令的地址。在nsp里,16 位的pc 寄存器与sr 寄存器的cs 字段,共同组成一个22 位的程序代码地址。2.2.5 状态寄存器sr (status pointer) sr内含许多字段,每个字段都有特别的用途,如图2.1所示。其中包含两个6 位的区段选择字段: cs (code segment),ds (data segment),它们可与其它16 位的寄存器结合在一起形成一个22 位的地址,用来寻址4m字容量的内存。spce061a只有32k字的闪存,只占用一页的存储空间,所以cs和ds字段在spce061a中都是设为0。 算数逻辑运算的结果会影响cpu 内的标志(flag),标志的内容可以作为条件判断的依据。nsp有四个1 位的标志: n、z、s、c,即sr 寄存器中间的4 个位(b6b9)。cpu 在执行条件跳转指令时,会先测试这些标志位,以控制程序的流向。这些标志的详细说明如下:1 进位标志c c=0 时表示运算过程中无进位或是有借位情况产生;而c=1 表示运算过程中有进位或是无借位情况产生。在无符号数运算中,16 位可以表示的数值范围是0x00000xffff,即065535。如果运算结果大于65535(0xffff),则标志位c 被置为1。请注意:进位标志c 一般用于无符号数运算的进、借位判断。2 零标志z z=0 时表示运算结果不为0,z=1 时表示运算结果为0。3 负标志n 负标志n 是用来判断运算结果的最高位(b15)是否为1。b15=0 则n=0; b15=1则n=1。4 符号标志s s=0 时表示运算结果为正数或是0,s=1 时则表示运算结果(在二进制补码的规则下)为负。对于有符号数运算,16 位所能表示的数值范围是0x80000x7fff,即-3276832767。若运算结果小于零,则符号标志s 被置为1。有符号数运算的运算结果可能会大于0x7fff 或小于0x8000。比如:0x7fff+0x7fff=0xfffe(65534),运算结果为正(s=0),且无进位(c=0)发生;在此情况下,负标志n 被置为1(因为最高位为1)。若标志n 与s 不同,则说明了有溢出(overflow)发生,即:s=0,n=1 或s=1,n=0。符号标志s 可用来判断有符号数的正负。而jvc(n=s),jvs(n!=s)则可用来判断溢出。请注意:n,s 的组合用于有符号数溢出的判断。特别需要注意:在运算操作过程中,若目标寄存器是pc,则所有标志位均不会受到影响。总结: 1由于补码可以把有符号数与无符号数的运算统一起来,所以对于同一条加法或减法指令,既可以认为是有符号数运算又可以认为是无符号数运算,只是观察的角度、判断的标准不同而已。 2进位标志c 一般用于无符号数运算的进、借位判断。 3n,s 的组合用于有符号数溢出的判断。 4有符号数的范围为-3276832767,无符号数的范围为065535。若为有符号数,运算前数值的正负应利用负标志n 来判断;运算后结果的正负应利用符号标志s来判断。 2.3 数据总线和地址总线 nsp是16 位单片机,它具有16 位的数据线和22 位地址线。由此决定其基本数据类型是16 位的“字”型,而不是8 位的“字节”型;因此内存都是按“字”操作的,22位的地址线最多可寻址到4m 字的内存空间。地址线中的高6 位a16a21 来自sr 寄存器中的6 位的cs 字段或是6 位的ds 字段,低16 位a0a15 则来自内部寄存器。通常,地址线的高6 位称为内存地址的page selector,简称为页码(page);而低16 位则称为内存地址的偏移量(offset)。nsp通过对区段(segment)的编码来实现内存分页的检索,即是说segment的含义与page的含义是相等的。因而,通过segment与offset的配合即可产生22 位地址,如图2.1中addrgen所示。(注意: spce061a只有32k字闪存flash,仅占一页存储空间,所以cs字段和ds字段在spce061a用不到,都设为0)。2.4 spce064a片内存储器结构spce061a 的内存地址映像如图2.2 所示。芯片内的内存有2k 字的sram(包括堆栈区)和32k 字闪存(flash)。2.4.1 ramspce061a 有2k 字的sram(包括堆栈区),其地址范围从0x0000 到0x07ff。前64 个字,即0x00000x003f 地址范围内,可采用6 位地址直接地址寻址方法,存取速度为2 个cpu 时钟周期;其余范围内(0x00400x07ff)内存的存取速度则为3 个cpu时钟周期。2.4.2 堆栈 sp 是用来记录堆栈地址的寄存器,sp 会指向堆栈的顶端。堆栈是一个先进后出的内存结构,nsp的堆栈结构是由高地址往低地址的方向来储存的。cpu 执行push、子程序呼叫call、以及进入中断服务子程序(isr,interrupt service routine) 时,会储存寄存器内容在堆栈里,这时sp 会递减以反映堆栈用量的增加。当cpu 执行pop、子程序返回ret、以及从isr 返回reti 时,sp 会递增以反映堆栈用量的减少。 nsp堆栈的大小限制在2k 字的sram 内,即地址为0x0000000x0007ff 的内存范围中。spce061a 系统复位后,sp 初始化为0x07ff,每执行push 指令一次,sp 指针减一。2.4.3 闪存flash spce061a 是一个用闪存替代mask rom 的mtp(multi-time-programmable)芯片,闪存可以进行多次的擦除与写入,可用来存储程序与数据。spce061a 具有32k 字(32k16 位)闪存容量,这32k 字的内嵌闪存被划分为128 个页,每个页存储容量为256 个字。它们在cpu 正常运行状态下均可通过程序擦除或写入。全部32k 字闪存均可在ice 工作方式下被写入或被擦除。为了安全起见,不对用户开放整体擦除功能。 用户必须通过向p_flash_ctrl (写) ($7555h)单元写入0xaaaa,来启用闪存的存取功能。然后,向p_flash_ctrl (写) ($7555h)单元写入0x5511,来擦除页的内容。写入0x5533,对闪存写入。这些指令不能被任何其它的操作打断,包括中断、ice 的单步跟踪动作。这是因为闪存控制器必须保证闪存处于写入状态。如果其它的操作打乱了这个顺序,闪存的状态将发生改变,擦除页和写入的操作不能再继续进行。 此外,为保证数据的正确写入,用户必须在写入之前擦除页的内容。页大小为0x100。第一页地址范围:0x80000x80ff,最后一页的地址范围:0xff000xffff。0xfc000xffff范围内的地址由系统保留,用户最好不要用本范围内的地址。1 读取操作 在芯片上电后,闪存就处于读取状态,读取的操作与sram 相同。2 擦除操作 在对闪存写入数据前,必须对闪存进行擦除操作。由于闪存采用分页的数组结构,使得各个存储页可以被独立地擦除。当用户向闪存控制接口发出页擦除命令以后,只要向某个地址写入任意的数据,对应到这个地址的的记忆页就被擦除。要保证擦除操作的正确完成,必须考虑以下几个参数: 1. 该闪存的内部分页结构。 2. 每个页分区的擦除时间。3 写入操作 闪存芯片的写入操作是自动字节写入, 既可以循序写入,也可指定地址写入。闪存的地址空间为0x80000xffff,闪存控制接口的地址为0x7555 。第一页范围是0x80000x80ff,最后一页范围是0xff000xffff。 1. 擦除一页的流程是:先对命令用户接口地址0x7555 送出0xaaaa,然后再对命令用户接口地址0x7555 送出0x5511,再来对要擦除的记忆页地址写入任意数据,约20ms 即可完成擦除操作,之后就可以再进行其它操作。例如擦除第6 页0x85000x85ff流程如下:(1)0x7555 0xaaaa (2) 0x7555 0x5511(3)0x85xx0xxxxx (其中x 为任意值)。 2. 写入一个字的流程是:先对命令用户接口地址0x7555 送出0xaaaa,然后再对命令用户接口地址0x7555 送出0x5533,再来对要写入字的地址写入数据,约40us 即可完成写入操作,之后就可以再进行其它操作。例如向0x8000记忆地址写入0xffff 流程如下:(1)0x7555 0xaaaa (2) 0x7555 0x5533 (3) 0x80000xffff 3. 连续写入多个字的流程是:先对命令用户接口地址0x7555 送出0xaaaa,然后再对命令用户接口地址0x7555 送出0x5544,再给要连续写入字的起始地址写入字数据,约40us 即可完成1 个字的写入操作。再对命令用户接口地址0x7555 送出0x5544,再对后续要写入的字地址写入字数据,等待40us,循环操作即可完成连续字的写入。 *上面所提到延时等待是由硬件完成,不需要软件延时,闪存的擦写过程如图2.4 所示, 以上所介绍的闪存擦除及写入操作,一般用于执行中数据的储存。例如,当我们把一小段程序写入闪存后,假设程序代码占用的空间不大(例如5 字k 字),我们就可以在程序代码后面的空间(5k32k)存储一些数据,这样就需要对这一段闪存空间(5k32k)进行上述的写入或擦除操作。前提条件是,必须计算出程序代码所占用的空间。 2.5 spce061a的输入/输出接口输入/输出接口(也可简称为i/o 端口)是单片机与外设交换信息的通道。输入端口负责从外界接收检测信号、键盘信号等各种开关量信号。输出端口负责向外界传送由内部电路产生的处理结果、显示信息、控制命令、驱动信号等。nsp内有并行和串行两种方式的i/o 口。并行口线路成本较高,但是传输速率也较高;与并行口相比,串行端口的传输速率较低但可以节省大量的线路成本。spce061a 有两个16 位的通用并行i/o 口:a口和b 口。这两个端口的每一位都可通过编程单独定义成输入或输出口。 a 口的ioa0ioa7 作为输入端口时,具有唤醒功能,即当输入电平发生变化时,会触发cpu 中断。在电池供电、追求低耗电的应用场合,可以让cpu 进入睡眠模式(利用软件控制)以降低功耗,需要时才以按键来唤醒cpu,使其进入工作状态。例如:手持遥控器、电子字典、pda、计算器、无线电话等。2.5.1 i/o 端口结构 spce061a 提供了位控制结构的i/o 端口,每一位都可以单独用于数据输入或输出。每个独立的位可通过以下3 种控制向量来作设定: 1. 数据向量data 2. 属性向量attribution 3. 方向控制向量direction 每3 个对应的控制向量组合在一起,形成一个控制字,用来定义相对应i/o 端口位的输入输出状态和方式。例如,假设需要ioa0 是下拉输入引脚,则相对应的data、attribution和direction 的值均被设为“0”。如果需要ioa1 是带唤醒功能的悬浮式输入引脚,则data、attribution 和direction 的值被设为“010”。与其它的单片机相比,spce061a 除了每个i/o 口可以单独定义其状态外,每个对应状态下的i/o 端口性质电路都是内置的,在实际的电路中不需要再外接。例:设a 口为带下拉电阻的输入端口,在连接硬件时不用再外接下拉电路。 a 口和b 口的data、attribution 和direction 的设定值均在不同的寄存器里,用户在进行i/o 端口设置时要特别注意这一点。i/o 端口的组合控制设置如表2.1 所示: 注: *:端口位预设为带下拉电阻的输入引脚; * *:只有当ioa 70内位的控制字为000,001 和010 时, 相对应位才具有唤醒的功能。 *:悬浮输入作为adc ioa60 的输入p_ioa_data(读/写)(7000h)a 端口的数据单元,用于向a 口写入或从a 端口读出数据。当a 口处于输入状 态时,读出是读a 口引脚电平状态; 写入是将数据写入a 端口的数据寄存器。当a 口处于输出状态时,写入输出数据到a 端口的数据寄存器。p_ioa_buffer (读/写) (7001h)a 端口的数据向量单元,用于向数据向量寄存器写入或从该寄存器读出数据。当a 口处于输入状态时,写入是将a 端口的数据向量写入a 端口的数据寄存器;读出则是从a 端口数据寄存器内读其数值。当a 口处于输出状态时,写入输出数据到a 端口的数据寄存器。对输出而言,p_ioa_data 与p_ioa_buffer 是一样的.但对输入而言,p_ioa_data 读的是io 的值,p_ioa_buffer 读的是buffer 内的值。假设ioa0作为输出,并去接led阳极(led 阴极接地)。若p_ioa_data 的ioa0为1。在某些需要较大驱动能力的led而言,led 会亮,但ioa0会被拉到一个很低的值。此时从p_ioa_data 读回为0,但p_ioa_buffer 则为1。读回的意义是是方便做其它的io 运算。p_ioa_dir(读/写)(7002h)a 端口的方向向量单元,用于用来设置a 口是输入还是输出,该方向控制向量寄存器可以写入或从该寄存器内读出方向控制向量。dir 位决定了端口位的输入/输出方向:即0为输入,1为输出。p_ioa_attrib(读/写)(7003h)a 端口的属性向量单元,用于a 端口属性向量的设置。p_ioa_latch(读)(7004h)读该单元以锁存a端口上的输入数据,用于进入睡眠状态前的触键唤醒功能的启动(参见睡眠/唤醒部分)。2.5.2 并行i/o 端口的控制向量组合方向向量_dir、属性向量_attrib 和数据向量_data 分别代表三个控制口。这三个端口中每个对应的字节合在一起,形成一个控制字,来定义相对应i/o 端口位的输入/输出状态和方式。 2.1 具体表示了如何通过对i/o 口的_dir、_attrib 以及_data 进行编程,来设定端口位的输入/输出状态和方式。由2.1 可以得出以下一些结论: 1. _dir 位决定了端口位的输入/输出方向:即0为输入,1为输出。 2. _attrib 位决定了在端口位的输入状态下是为悬浮式输入还是非悬浮式输入:即0为带上拉或下拉电阻式输入,而1则为悬浮式输入。在端口位的输出状态下则决定其输出是反相的还是同相的;0为反相输出,1则为同相输出。 3. _data 位在端口位的输入状态下被写入时,与_attrib 字节合在一起形成输入方式的控制字00、01、10、11,以决定输入端口是带唤醒功能的上拉电阻式、下拉电阻式或悬浮式以及不带唤醒功能的悬浮式输入。_data 位在端口位的输出状态下被写入的是输出数据,不过,数据是经过反相器输出还是经过同相寄存器输出要由_attrib位来决定。 例如,假设要把a 口的b0 定义成下拉电阻式的输入口,则a 口_dir、_attrib 和_data三个向量对应的b0 组合应设为000。如果想把a 口的b1 定义成具有唤醒功能的悬浮式输入口,只需将_dir、_attrib 和_data 向量对应的b1 组合设置为010即可。 a 口的ioa0ioa7 作为唤醒来源,常用于键盘输入。要启用ioa0ioa7 的唤醒功能,必须先读取p_ioa_latch 单元,以此来锁存ioa0ioa7 引脚上的按键状态。随后,系统才可通过指令进入低功耗的睡眠状态。当有按键按下时,ioa0ioa7 的输入状态会与其在进入睡眠前被锁存时的状态不同,从而引起系统的唤醒。各端口位对应的向量设置如下表2.2:从上面的分析我们可以看出,当作为输入口时所读到的数值来自不同的地方,由p_ioa_data 所读到是a 口引脚上的当前状态,由p_ioa_buffer 所读到的值来自数据寄存器(见例2.6);当a 端口作为输出端口时,数据都是写到a 端口的数据寄存器。对于某些i/o 口的应用,这种读写方式可以省下许多存放端口数据的ram 空间。详细如图2.6。p_iob_data(读/写)(7005h)b 端口的数据单元,用于向b 口写入或从b 端口读出数据。当b 口处于输入状态时,读出是读b 口引脚电平状态; 写入是将数据写入b 端口的数据寄存器。当b 口处于输出状态时,写入输出数据到b 端口的数据寄存器。p_iob_buffer(读/写)(7006h)b 端口的数据向量单元,用于向数据寄存器写入或从该寄存器内读出数据。当b 口处于输入状态时,写入是将数据写入b 端口的数据寄存器;读出则是从b 端口数据寄存器里读其数值。当b 口处于输出状态时,写入数据到b 端口的数据寄存器。p_iob_dir(读/写)(7007h)b 端口的方向向量单元,用于设置iob 口的状态。0为输入,1为输出。p_iob_attrib(读/写)(7008h)b 端口的属性向量单元,用于设置iob 端口的属性。a 端口低8 位的属性设置及对应的端口位状态如表2.3 所示:(不考虑高8 位)b 端口低8 位的属性设置及对应的端口位状态如下表2.4 所示:(不考虑高8 位)硬件原理如图2.7 所示:2.5.3 b端口的特殊功能正如前面提到的,b 口除了具有常规的输入/输出端口功能外,还有一些特殊的功能,如下表2.5所示: 注: 1端口位预设为带下拉电阻的输入引脚 2pwm:脉宽调制(pulse width modulation)。p_feedback(写)(7009h) b 端口工作方式的控制单元,用于决定b 口的iob2 (iob3)和iob4 (iob5)是用来作为普通i/o 端口,或是作为特殊功能端口。其特殊功能包括以下两个部分:(1).单个iob2或iob3 口可设置为外部中断的输入口。(2).设置p_feedback 单元,再将iob2(iob3)和iob4(iob5)之间连接一个电阻和电容(电路连接如图2.8)形成反馈电路以产生振荡信号,此信号可作为外部中断源输入ext1 或ext2。当然此时所得到的中断频率与rc 振荡器的频率是一致的。由于该频率较高,所以通常情况下都是通过(1)获得外部中断信号。此特殊功能仅运用于:当外部电路需要用到一定频率的振荡信号时,可以在iob2(iob3)端获得。p_feedback 的设置的如表2.6所示。图2.8 为iob2,iob3,iob4 及iob5 的反馈结构示意图。通过在iob2 (iob3)和iob4(iob5)之间增加一个rc 电路形成反馈回路,即可在iob2(iob3)端得到振荡源频率信号。为使反馈回路正常工作,必须将iob2 (iob3) 设置成反相输出口,且将iob4 (iob5)设置成悬浮式输入口。2.5.4 iob8 和iob10 的控制向量设置iob8 和iob10 的应用由控制向量taon 和txpinen 来控制。图2.9 向量控制 第三章系统各模块工作原理3.1 单片机单片机也称单片微控制器,它集成度高、运算速度快、体积小、运行可靠、价格低廉,在过程控制、数据采集、机电一体化、智能仪器仪表、家用电器以及网络技术等方面得到广泛应用。的组成主要如下图所示,下面将就各部分与他们外围的器件进行简要的原理分析3.2 电源61板采用3节5号电池进行供电,由j10接入,如原理图所示。其中的前面两组电容用来去耦滤波,使其供给芯片的电源更加干净平滑。为了获得标准的3.3v电压,在板子上加入=两个二极管,是为防止误将电源接反造成不必要损失而设置的,在操作过程中千万不要将电源接反,因为反向电压超过一定的值,二极管将会被损坏,达不到保护的目的。后面的零电阻及其电源、地分成不同的几路为了减少电磁干扰设置的。图3.1 电源部分原理图3.3 程序下载区ice基本运行方式是通过控制clock及通过ice喂入指令方式,来控制cpu的运行及缓存器资料和内存资料的存取,因此必须透过控制缓存器值的设定来控制cpu目前的动作。每个相连接的不同ice模块都拥有自己的3-bitid,当pc在发送control信号时都会先传送3-bitid,只有ice本身的id和control信号的id相同时才会执行该命令或回传资料。61板上的74hc244主要在我们选用下载线的时候起作用,主要起缓存的作用和完成sda是作为数据回送还是数据下传的选择。第三章 系统各模块工作原理图3.2 下载区原理图3.4音频输入部分如下图所示电路,micp和micn将随着mic产生的波形变化,并在两个端口处形成两路反向的波形,在经过两极运放放大,把放大的语音信号交给acd转换为数字量,这个时候我们就可以通过单片机编程对这些数据进行处理,比如说语音数据压缩、语音识别样本处理。图3.3 音频输入外围电路3.5 音频输出部分spy0030是凌阳公司开发的专门用于语音放大的芯片.它的增益如下所示: gain=2*5000/(5000+r1)3.5.1按键部分按键是通过同断控制来实现它的功能,61板上的按键在没按下时,它的1、3脚是断开的,当按下时这两个脚是连通的。若此时我们在一脚接一个高电平,把第三个脚连到一个i/o口上。这就形成了一个人机操作界面,通过编程对i/o口扫描,单片机就能识别到我们的按键命令。 第四章 焊接第 四 章 焊 接在焊接前请同学们认真对照原理图,仔细查看印刷电路板,找到对应元件的功能区后,开始准备元件和工具。此电路板焊接要求使用25w左右尖烙铁,下面详细叙述焊接步骤:4.161裸板检测目的:检测61板裸板电源部分是否短路方法:利用万用表检测61板上是否u3的第一脚和第三脚之间是否短路,无短路则说明61板电源部分正常。2端口部分:目的:检测61板裸板相邻端口部分是否短路方法:用万用表测量相邻端口是否短路,无短路则说明端口部分正常。4.2 检测元器件、并做器件整形1用万用表检测12个电容、16个独石104、3个独石224是否短路,短路的器件需要换(有条件的可以采用电容表逐个测试)。2 利用万用表检测4个按键,按键按下后看1、3脚是否接通,是则说明按键正常。3 先将单排插针掰开,分别为10pin 4个、3pin 3个和2pin 2个、1pin 1个。4 将所有检测过的电阻、电容、二极管按电路板间距把引脚折弯,以便插到电路板上。注意:绝不能在元件引脚跟部反复折弯,因为这样引起的元件内部接触不良造成的故障是很难维修的。5 查看芯片座所有引脚是否偏移原位,若有偏移整形后插在塑料泡沫上待用。4.3 元件分类1 小个子元器件(20个): spy0029(1个)、电阻(18个)、晶振(1个)、二极管(3个)。2 中间个子元器件(45个): 瓷片电容(5个)、独石电容(19个)、按键(4个)、发光二极管(2个)、电解电容(12个)、芯片座(3个)。3 大个子元器件(13个): 排针(9个)、接座(3个)、电位器(1个)。4.4 焊接61板的步骤焊接原则从低到高,为确保焊接一次成功,请根据我们的18个步骤来焊接。step 1:焊接spy0029(数量1个)元件u3(spy0029-先将焊盘上的焊点上少量焊锡,再元件相应引脚镀少量锡,用镊子夹住元件放置在焊盘上,迅速将该引脚焊好。注意拿镊子要稳,不能抖。焊接速度要快,加热时间要短。然后将其它引脚焊好。 注意:千万注意spy0029管脚的焊锡不要过多,否则容易造成spy0029底下有连焊,很难发现,会误以为spt0029坏掉。step 2:焊接电阻(数量18个)step 3:焊接二极管(数量3个)请注意方向,有白色短线的那一端为负极,按照排序分别焊接1、2、3二极管,以免遗漏;step 4:焊接晶振(数量1个)注意时间不宜太长,晶振位置要正确。step 5:焊接独石电容(数量19个)step 6:焊接瓷片电容(数量5个)step 7:焊接电解电容(数量2个)焊接电解电容(已卧倒的)-请注意焊接方向,有白色线的一端为负极与pcb板上的白线相对应:在电源部分,先把电容焊好,这时候我们不着急往后焊,先来一个小小的测试,因为到这一步电源部分已经可以开始工作了,这时查由于没受后面电路的影响,比较好查 ;step 8:检查电源部分是否错误先用万用表查j10 两管脚,若短路则查清短路原因,可能是因为二极管坏掉或者电源部分电容有问题,请排除错误再往下执行。step 9:检查pcb板上的spy0029三个管脚是否短路用万用表查spy0029的三个管脚之间是否短路;可能是因为第二个二极管坏掉或者spy0029没焊好,请排除错误再往下执行。step 10:焊接剩余电解电容(数量10个)完成所有电解电容的焊接。step 11:焊接按键和电位器(数量各一个)step 12:焊接发光二极管(数量1个)焊接发光二极管-二极管部平口端为负极,与pcb板上平口端相对应插入;step 13:焊接电源座(数量1个):焊接电源座,电源座位置要正确。焊接完电源座,电源部分已全部焊完,这时我们可以上电,会看见电源指示灯点亮,如没亮请立刻断电并查清原因,还是电源部分的原因,依照电流走向,应该很快就能查到原因。step14:焊接单排插针(数量9个)单排插针的焊接,要一部分一部分焊接,以免遗漏。step15:5针座焊接(数量2个)在焊接5针座的同时一定要了解他们的作用;step16:焊接麦克风(数量1个)注意:麦克风的焊接一定要注意正极和负极。麦克风要正确的插入到板子中,需要自己要了解一下,具体步骤如下:第一步:获得两节剪断的裸露导线或是被剪断焊接元件多余的引脚,长度大于1cm;第二步:镊子把两根导线分别折成“l”形,短边的长度小于5 mm,分别给“l”的短脚抹上一点焊锡,便于焊接;第三步:利用烙铁分别把制作好的 “l”形导线焊接到合适的位置,目的就是给麦克风做两个引脚;第四步:对应正、负极把引脚插入61板的正、负极焊接完成。step17:焊接u2、u4芯片座 焊接u2、u4的座,注意座子的凹进的表示与电路板子上的凹口一致焊接u1spce061ad的座子,注意座子的斜切口与电路板子上的斜切口一致。step18:管脚修整剪断已焊接元件多余的引脚,(长度大概1cm左右)并检查是否所有的器件均焊接完成。第五章 测试记录和分析在做测试的时候一定要先检测电源部分(因为电源部分相当重要,若没焊好可造成很大破坏性)。再按以下的顺序测试并一步步做好检测记录,出现问题的时候请勿心急,慌乱中可能会制造更多的问题,而是要认真检测电路,并按实验步骤完成检查,这样有利于培养自己的动手能力和分析问题的能力。整体测试流程图如下:图5.1 测试流程图51电源部分5.1.1电源测试步骤第五章 测试记录和分析 如果在焊接中按照步骤焊接了,并且其中的两个测试都通过了,那么这里的检测可轻而易举的通过。电源部分在板子左上角。以下就采用万用表分别测试以下12个点的电压,注意数字万用表的使用方式(黑色的表笔接电源“-”端,红色的表接电源“+”端),此时请勿将芯片插入座中,以免电源部分有问题造成芯片烧坏。step1:目的:测试61板电源和地是否有短路:条件:断开电源并拔掉电池盒,将j5的2、3脚用跳线帽短接;步骤:用万用表测量j10的两脚的电阻是否为零;现象1:电阻为零;结论:焊接过程中可能造成短路了;解决办法:进行电源的排查,进入step4现象2:电阻大于300欧姆;结论;正常,进入step2。step2:目的:测试61板电源部分器件是否工作正常;条件:将三节5号电池装入电池盒中,接到j10处,将电池盒开关拨到on处;步骤:将电池盒开关拨到on处;现象1:发光二极管d1没点亮,立刻将电源断开,进入步骤4的测试;结论:电源部分有问题进入step;解决办法:进行电源部分的排查;现象2:发光二极管d1点亮;结论:正常,进入step3。step3:目的:测试61板上各器件电源供电是否正常;条件:用跳线帽把s5的1、2脚短接(选择了probe端0;步骤:测试u1的第7脚电压-3.3v左右;测试u4的第20脚电压-3.3v左右;测试j4的第1脚电压-3.3v左右;测试u2的第7、8脚电压-4.5v左右;测试j6、j7、j8、j9的+端电压-4.5v左右;现象1:电压不正常结论:在供电的某个传输方向上出现问题 ;解决办法:对照原理一步步排查;现象2:电压正常;结论:正常,进行键盘部分测试。step4:目的:测试61板电源部分那个器件坏掉;条件:断开电源;步骤:用万用表检查发光二极管是否坏掉,或者方向弄错;测量j10的两端是否短路,如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论