综合应用实验设计报告_第1页
综合应用实验设计报告_第2页
综合应用实验设计报告_第3页
综合应用实验设计报告_第4页
综合应用实验设计报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

综合应用实验设计报告基于WSP43C^片机的时钟设计姓名:学号:姓名:学号:2015年月日基于WSP43C^片机的时钟设计摘要MSP430系列是一个16位的、具有精简指令集的、超低功耗的混合型单片机。说明书介绍了以MSP430F149单片机为核心的时钟系统的设计。在硬件电路方面,采用SPX1117低压差稳压器为单片机提供电源,它将5V电压转化为3.3V提供给单片机;用4*4矩阵键盘进行输入;在时间的显示上采用了两种方法显示,^PLED数码显示和LCD液晶显示;除此以外,在电路板上还留有供扩展电路应用的引脚接口。在软件设计方面,完成了键盘扫描程序、显示模块程序以及系统主程序的设计。由于采用MSP430为核心,它的超低功耗的特点使得整个系统的功耗非常的低,一个普通的钮扣电池可使用长达10年之久。另外,由于片内具有丰富的外围电路,加之电路板上留有供扩展电路应用的引脚接口,还可以对其增加一些功能,比如整点报时、温度显示等。关键词:MSP430;时钟设计;矩阵键盘;LCD一、项目的意义与目的目前单片机应用于各个领域,其应用于仪器仪表中显得更为优越。以单片机制成的电子时钟具有计时准确、功耗低的优点,从而得到了许多领域的广泛应用。单片机正处在微控制器的全面发展阶段,各公司的产品在尽量兼容的同时,向高速、强运算能力、寻址范围大以及小型廉价方面发展。单片机的发展推动了应用系统的发展,应用系统的发展又反过来对单片机提出了更高要求,从而促进单片机的发展。单片机正向着功能更强、速度更快、功耗更低、辐射更小的方向发展。随着集成度的不断提高,把众多的外围功能器件集成在片内已经具备了充分的条件,这也是单片机以后发展的重要趋势。除了一般必须具有的ROM、RAM、定时器/计数器、中断系统外,随着单片机档次的提高,以适应检测、控制功能更高的要求,片内集成的器件通常还有电源监控与复位电路、WDT、A/D转换器、DMA控制器、中断控制器、锁相器、频率合成器、字符发生器、声音发生器、CRT控制器、译码驱动器等。数字钟是采用数字电路实现对时、分、秒进行数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备,甚至各种定时电器的自动启用等,所有这些都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。通过对此次的时钟电路的设计,一方面可以巩固已经学习过的专业知识,比如Protel99SE的使用等;另一方面可以了解并掌握一些新的知识,比如此次所用的核心芯片MSP430单片机以及LCD液晶显示器等。通过这次毕业设计,可以将我的综合能力提升很多,学习很多东西,为以后的学习生活打下坚实的基础。二、 设计要求与指标单片机的应用在后PC时代得到了前所未有的发展,但对处理器的综合性能要求也越来越高。综观单片机的发展,以应用需求为目标,市场越来越细化,充分突出以“单片”解决问题,而不像多年前以MCS51/96等处理器为中心,外扩各种接口构成各种应用系统。单片机系统作为嵌入式系统的一部分,主要集中在中、低端应用领域(嵌入式高端应用主要由DSP、ARM、MIPS等高性能处理器构成),在这些应用中,目前也出现了一些新的需求,主要体现在以下几个方面:.以电池供电的应用越来越多,而且由于产品体积的限制,很多是用纽扣电池供电,要求系统功耗尽可能低,如手持式仪表、玩具等。.随着应用的复杂,对处理器的功能和性能要求不断提高。既要外设丰富、功能灵活,又要有一定的运算能力,能做一些实时算法,而不仅仅做一些简单的控制。.产品更新速度快,开发时间短,希望开发工具简单、廉价、功能完善。特别是仿真工具要有延续性,能适应多种MCU,以免重复,增加开发费用。.产品性能稳定,可靠性高,既能加密保护,又能方便升级。方案设计和论证方案一:采用EDA设计,整个数字钟电路由振荡脉冲发生器、计数电路、显示译码/驱动器和七段显示器组成,如图1所示:图1数字时钟系统框图振荡脉冲发生器用来产生秒脉冲。计数电路由秒个位计数器、秒十位计数器、分个位计数器、分十位计数器、时个位计数器、时十位计数器组成。计数器的功能是每来一个脉冲计一个数。显示译码/驱动器采用74LS47共阳极显示译码器。显示器采用共阳极七段显示器。方案二:采用数字电路进行设计。如图2所示,整个系统是由主体电路、扩展电路、振荡器、分频器等几部分组成,主体电路完成时间的显示和调时的功能,扩展电路中留有接口供扩展电路使用。该系统的工作原理是:振荡器产生的稳定的高频脉冲信号,作为数字钟的时间基准,再经分频器输出标准秒脉冲。秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按“12翻1”规律计数。计数器的输出经译码器送显示器。计时出现误差时可以用校时电路进行校时、校分、校秒。扩展电路必须在主体电路正常运行的情况下才能进行功能扩展。计数器部分采用74LS90进行计数,而译码部分采用74LS48七段译码驱动器驱动数码显示器。用数字电路设计的电路的特点是软件部分比较简单,但是其硬件电路比较复杂。图2数字时钟系统框图方案三:利用单片机设计。采用MSP430F149作为整个电路的核心部件,应用4*4的矩阵键盘作为输入,外接LCD或LED进行显示,同时还连接一些扩展电路以便增加时钟功能。用单片机为核心的系统其硬件电路非常简单,计数、调时、译码显示等全部都由软件控制实现,准确性较高。经过比较选择决定采用方案三,MSP430系列单片机具有强大的处理功能,而且其超低功耗的特点非常适合电池供电的仪表仪器。以单片机为核心的系统处理能力强、误差小,而且采用键盘输入更为方便,容易操作。四.电路原理设计MSP430系列是一个16位的、具有精简指令集的、超低功耗的混合型单片机,具有强大的综合优势。在运算能力方面,MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在8MHz晶体驱动下指令周期为125ns。这些特点保证了可编制出高效率的源程序。在运算速度方面,MSP430系列单片机能在8MHz晶体的驱动下,实现125ns的指令周期。16位的数据宽度、125ns的指令周期以及多功能的硬件乘法器(能实现乘加)相配合,能实现数字信号处理的某些算法(如FFT等)。MSP430系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便。当系统处于省电的备用状态时,用中断请求将它唤醒只用6四s。超低功耗MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。由于系统运行时打开的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。在系统中共计有一种活动模式(AM)和五种低功耗模式(LPM0〜LPM4)。在等待方式下,耗电为0.7明,在节电方式下,最低可达0.1M。另外,MSP430系列单片机的各成员都集成了较丰富的片内外设。MSP430系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。MSP430F149是MSP430X14X系列的一种,、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M的时钟。MSP430F149芯片处理单元处理单元基于一种一致的正交设计的CPU和指令集,这种设计结构形成了一种对应用开发高度透明,并以编程简单著称的类RISC体系。除了程序流指令以外的所有操作,都是作为寄存器操作连同7种源寻址方式和4种目的操作数寻址方式来执行的。MSP430F149芯片CPU有16个寄存器提供精简指令执行时间。存储器到寄存器操作执行时间被减少到处理器频率的一个周期,4个寄存器被保留,专门用作程序计数器、堆栈计数器、状态寄存器和常数发生器。其余的寄存器可用作通用寄存器。外设利用一个数据地址和控制总线连接到CPU,并能容易利用内存处理指令操作。MSP430F149芯片运行模式MSP430F149具有一种活动模式和五种软件可选的低功耗运行模式。一个中断事件可以将芯片从五种低功耗模式中的任何一种唤醒为请求服务并在从中断程序返回时恢复低功耗模式。下列六种运行模式由软件配置:活动模式AM一所有时钟活动低功耗模式0(LPM0)-CPU关闭ACLK和SMCLK保持活动,MCLK关闭低功耗模式1(LPM1)-CPU关闭ACLK和SMCLK保持活动,MCLK关闭如果DCO在活动模式中没有使用,DCO的直流发生器将关闭低功耗模式2(LPM2)-CPU关闭;ACLK保持活动MCLK、FLL+,DCOCLK关闭DCO的直流发生器保持活动低功耗模式3(LPM3)-CPU关闭;ACLK保持活动MCLK、FLL+,DCOCLK关闭低功耗模式4(LPM4)-CPU关闭;ACLK关闭MCLK、FLL+、DCOCLK关闭DCO的直流发生器关闭;晶体振荡器停止MSP430F149芯片I/O端口MSP430F149有6个8位的I/O端口P1〜P6,端口P1和P2用7个控制寄存器,端口P3、P4、P5、P6仅使用4个寄存器,为应用提供数字输入/输出的最大灵活性:所有单个I/O口可独立编程;任何输入输出和中断条件的组合都是可能的;端口P1和P2的所有8位对外部事件的中断处理完全实现。端口P1和P2具有输入/输出、中断和外部模块功能,端口P3、P4、P5和P6没有中断能力,其余功能和P1、P2相同。以Px代表端口,介绍所有的7个寄存器。PxDIR(输入/输出方向寄存器)相互独立的8位分别定义了8个引脚的输入/输出方向。使用输入/输出功能时,应该先定义端口的方向,输入/输出才能满足设计者的要求。作为输入时,只能读;作为输出时,可读可写。0:输入模式;1:输出模式。PxIN(输入寄存器)输入寄存器是只读寄存器,用户不能对它写入,只能通过读取该寄存器内容知道I/O端口的输入信号,此时引脚的方向必须选定为输入。PxOUT(输出寄存器)该寄存器为I/O端口的输出缓冲寄存器,在读取时输出缓存的内容与引脚方向定义无关。改变方向寄存器的内容,输出缓存的内容不受影响。PxIFG(中断标志寄存器)该寄存器有8个标志位,标志相应引脚是否有待处理中断的信息,即相应引脚是否有中断请求。0:没有中断请求;1:有中断请求。PxIES(中断触发沿选择寄存器)如果允许Px口的某个引脚中断,还需要定义该引脚的中断触发方式。该寄存器的8位分别对应Px口的8个引脚。0:上升沿使相应标志置位;1:下降沿使相应标志置位。PxIE(中断使能寄存器)Px口的每一个引脚都有一位用以控制该引脚是否允许中断。0:禁止中断;1:允许中断。PxSEL(功能选择寄存器)各端口具有其他片内外设功能,为了减少引脚,将这些功能与芯片外的联系通过复用Px引脚的方式来实现。PxSEL用来选择引脚的I/O端口功能与外围模块功能。P3、P4、P5和P6端口只有输入/输出方向寄存器(PxDIR)、输入寄存器(PxIN)、输出寄存器(PxOUT)和功能选择寄存器(PxSEL)。0:选择引脚为I/O端口;1:选择引脚为外围模块功能。MSP430F149芯片时钟系统MSP430F149芯片内基础时钟模块有3个时钟输入源:LFXTICLK 低频时钟源XT2CLK 高频时钟源DCOCLK 数字控制RC振荡器LFXT1振荡器默认工作在低频模式,即32768Hz,XT2振荡器为标准的8MHz晶体振荡器。基础时钟模块可提供3种时钟信号:主系统时钟(MCLK)、子系统时钟(SMCLK)和辅助时钟(ACLK)。主系统时钟(MCLK):MCLK可由软件选择来自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经1、2、4、8分频得到。MCLK主要用于CPU和系统。子系统时钟(SMCLK):可由软件选择来自LFXT1CLK和DCOCLK,或者XT2CLK和DCOCLK(由具体器件决定),然后经1、2、4、8分频得到。SMCLK主要用于高速外围模块。辅助时钟(ACLK):ACLK是LFXT1CLK信号经1、2、4、8分频后得到的。ACLK可由软件选作各个外围模块的时钟信号,一般用于低速外设。系统使用不同的时钟信号,用户通过程序可以选择低频或高频,这样可以根据实际需要来选择合适的系统时钟频率,这3种不同频率的时钟输出给不同的模块,从而更合理地利用系统的电源,实现整个系统的超低功耗,这一点对于电池供电的系统来讲至关重要。MSP430F149芯片存储器结构和地址空间MSP430系列单片机存储器采用的是统一结构、物理上完全分离的存储区域如ROM/FLASH、RAM、外围模块、特殊功能寄存器SFR等,被安排在同一地址空间,这样就可以使用一组地址、数据总线、相同的指令对它们进行字节或字形式访问°MSP430系列单片机存储器的这种组织方式和CPU采用精简指令相互协调,对外围模块的访问不需要单独的指令,该结构为软件的开发和调试提供便利。现以64KB的存储空间为例说明MSP430的存储器使用情况,如图3所示。0FFFFH0FFFFH0FFE0H0FFDFH0FFE0H0FFDFH程序存储器跳转控制表数据表等引导存储器(ROM)数据存储器0200H01FFH0100H0FFH0200H01FFH0100H0FFH010H0FH00H16位外围模块8位外围模块特殊功能寄存器图3MSP430存储空间分配MSP430不同系列器件的存储空间分布有很多相同之处:a) 中断向量被安排在相同的空间:OFFEO〜OFFFFH。b) 8位、16位外围模块占用相同范围的存储器地址。c) 特殊功能寄存器占用相同范围的存储器地址。d) 数据存储器都从0200H处开始。e) 程序存储器的最高地址都是0FFFFH。但是由于器件所属型号的不同,存储空间的分布也存在一些差异:程序存储器容量不一样,所以起始地址也不一样;仅FLASH型有信息存储器和引导存储器,而且不同器件它们的地址不同;数据存储器的末地址不一样,中断向量和8位、16位外围模块的内容不同等。MSP430的数据存储器是最灵活的地址空间,位于存储器地址空间的0200H单元以上,这些存储器一般用于堆栈和变量,如存放经常变化的数据。堆栈是具有先进后出特殊操作的一段数据存储单元,可以在子程序调用、中断处理或者函数调用过程中保存程序指针、参数、寄存器等。程序存储器FLASH是0FFFFH以下的一定数量的存储空间,可存放系统程序或者应用程序及常数,可以避免断电等意外情况而造成存储的信息丢失。程序代码必须有地址寻址。程序代码包括:中断向量区、用户程序代码和系统引导程序。MSP430系列单片机内所有外围模块都可以用软件访问和控制,外围模块相关的控制寄存器和状态寄存器都被安排在0000H〜01FFH范围的RAM中,MSP430可以像访问普通RAM单元一样对这些寄存器进行操作。如图4所示,整个时钟电路由MSP430F149单片机、4*4矩阵键盘、显示电路、扩展功能电路、电源和晶振等几部分组成。其中MSP430F149单片机是整个系统的核心部件。4*4的矩阵键盘作为系统的输入,有调时、复位等功能;显示电路部分采用LCD液晶显示器和LED数码管显示器同时进行显示;扩展电路是为系统预留的部分,在这部分可以进行一些功能的添加,如闹铃、温度显示等功能。单片机外接两个晶体振荡器:低速晶体振荡器LFXT1和高速晶体振荡器XT2。低速晶体振荡器为32KHZ,晶振只需经过XIN和XOUT两个引脚相连,不需要其他外部器件,所有保证系统工作稳定的元件和移向电容都集成在芯片中。LFXT1振荡器在发生有效PUC信号后开始工作,依次有效PUC信号可以将SR寄存器中的OscOff位复位,即允许XT1工作。如果LFXT1CLK信号没有用作SMCLK或MCLK信号,可以用软件将OscOff位置位以禁止LFXT1工作。高速晶体振荡器为8MHZ的标准晶体振荡器,经过XT2IN和XT2OUT两个引脚相连。它产生时钟信号XT2CLK,它的工作特性与LFXT1振荡器工作在高频模式时相似。如果XT2CLK信号没有用做MCLK和SMCLK时钟信号,可以用控制位XT2OFF关闭XT2。4*4矩阵键盘图4系统整体框图MSP430F149芯片扩展功能电路显示4*4矩阵键盘图4系统整体框图MSP430F149芯片扩展功能电路显示电路电源电路晶振电源稳压电路电源通过稳压器接入单片机,稳压器选用SPX1117低压差稳压器。SPX1117低压差稳压器为一个低功耗正向电压调节器,具有0.8A的稳定输出电流,可以用在一些高效率,小封装的低功耗设计中。这款器件非常适合便携式电脑及电池供电的应用。SPX1117有很低的静态电流,在满负载时其低压差仅为1.1V。当输出电流减少时,静态电流随负载变化,并提高效率。SPX1117可调节,可以选择1.5V、1.8V、2.5V、2.85V、3.0V、3.3V及5V的输出电压。SPX1117提供多种3引脚封装:SOT-223,TO-252,TO-220及TO-263。一个10呻的输出电容可有效地保证稳定性,然而在大多数应用中,仅需要一个更小的2.2呻的电容。SPX1117具有以下一些特性:0.8A稳定输出电流1A稳定峰值电流3端可调节(电压可选:1.5V、1.8V、2.5V、2.85V、3.0V、3.3V及5V)低静态电流0.8A时低压差为1.1V0.1%线性调整率/0.2%负载调整率2.2呻陶瓷电容即可以保持稳定过流及温度保护多封装因为MSP430F149的工作电压范围为1.8〜3.6V。所以在此次设计中,SPX1117的作用是将5V的电源转化为3.3V的电压输给单片机。为了滤除电压转换时的内部及外部干扰,在输入和输出电压的接口处都通过一个极性电容连接电源地。键盘输入电路键盘是计算机系统中最常用的人机对话输入部分。在单片机应用系统中,为了控制系统的工作状态以及向系统输入数据,一般均设有按键或键盘。例如复位用的复位键,功能转换的命令键和数据输入的数字键等。键盘一般分为编码键盘和非编码键盘两种。编码键盘本身除了按键之外,还包括产生键码的硬件电路。只要按一下某一个键,就能产生这个键的代码,这种键盘使用比较方便,需要编写的键盘输入程序也比较简单。不过由于使用的硬件较复杂,在单片机应用系统中使用的不多。非编码键盘是由若十个按键组合的开关矩阵,按键的作用只是简单地实现接点的接通和断开。非编码键盘必须有一套相应的程序与之配合,才能产生出相应的键码。由于非编码键盘硬件上十分简单,目前在单片机应用系统中使用比较普遍。单键键盘每一个按键开关占一位I/O口线,在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍容量,而且线数越多,区别越明显。比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。如图9所示,矩阵式结构的键盘显然要复杂一些,识别也要复杂一些。其中key0〜key3接单片机的P1.0〜P1.3做输入线,key4〜key7接单片机的P1.4〜P1.7做输入线。行线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键被按下。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。在检测是否有键按下时,先使4条列线输出低电平,然后读取4条行线的状态,如果全部为高电平则表示没有任何键被按下;如果有任一键被按下,由于行线是弱上拉至Vcc,则行线上读到的将是一个非全“1”的值。上述只是说明了如何判定如何有键被按下,但不能判定具体是哪一个键。上面提到的按键识别方法是这样的:首先看输入的行线,假设4条列线都输出低电平,4条行线都是弱上拉至Vcc的,在没有任何按键按下时输入都为“1”。但当与某一条行线相连的4个按键中的任何一个被按下时,这条行线将输入低电平。即,当某条行线输入低电平时,必定是连接在这条行线上的某个按键被按下了。这样就将16个按键按行线分成了4组,已经能够区分出这4条行线间的区别了。接着要解决的是区分同一条行线上的4个连接在不同列线上的按键。方法是以均匀的时间间隔(比如10毫秒)在4条列线上分别扫描输出“0”信号,也就是说在第一个10毫秒内在P1.4上输出低电平,其他的列线上输出高电平;接着在第二个10毫秒内在P1.5上输出低电平,其他列线输出高电平,如此循环输出。如果4条列线没有输出低电平,则尽管键被按下,仍然不能从行线读到“0”。利用这一原理,分时扫描在不同列线上的输出的低电平,则当在某一条行线上读取到“0”时,就可以唯一地确定是与哪一条列线相连的按键被按下了。比如说图2中的按键7被按下,如果P1.6没有输出低电平,则尽管按键被按下,仍然不能从P1.2口线读到“0”,但由于4条列线上扫描输出低电平,只要按下超过40毫秒的时间,必定能等到P1.6输出低电平。即,如果佃1.6输出低电平的这10毫秒内在P1.2上读取到低电平,则必定是与这两条I/O口线相连的这个按键被按下了,也就找到了被按下的按键的确切位置。系统原理图系统I■§卫IL1-qq—口6、L 〜■?,-—L.—一j■j.ji-jac.—1T1.1白1•1ia.11J5白*HuIQ..■TT771—*•—zzzMM".-||r.1■-.UU浏—i-u^u!j.jio-ix-a—£l3T:,||—uh".-,X二、.■■扫1..•—l-J^LJ!J--HO--_i□£,J—.»■=_2<D.7-■_..•--:-■'——1■-~1--—_1-■'—■j:mW花"浮浮於争:担靠云沽危'Fl.51AA' . ' AVu:Fl.6Tai dv\>Fl,TAJ AVuF2.0a(JX ra2"2n.\lAJgJC Ta1AlF2J■..1(J1.7Tn] 待 J^ijiAdP2..1■.AOT-il gP2-ItAlTiiJ S ICE.冷直如酒 g IMSFJ.a^JX12(JX - mi臾门工M - TDDmiKiasinsKU-SJMCM- XTNJ1.TM2-SJCK1M F5/?THuufl[F.l.lTKIM MJX巧41.TKT扭墨景 2 JX、,CB图b~6■rV?£,£H||M■*1■UISi:TrIflU徂因U1urU1Jij.14-卜.Mh.r1*KIXHICDfLICDfH)HLDIHL1:HLT:l£Lf■HLLrPHLILS,I£LPr(JHIHFLT »7g»J*:JW■—■.一一一■—■1i■―•T,:也也旦旦旦:■::/、:£1:i/1二:4\—Z/ \—/一——X—/三3*三一X—E/JJpl——一:■.X—/4/——L□—1/\—/-..I-/二XJMl/_Z-X用/\/—一:'m~~iJ=1上/11/i_1pl气IIAI3IY231YAIa-I1Y-l2aI2YI2.^22X2MT2YA2A42Y-l1~:一17/LLL气r/1/i_1'■-14/\'■-1r/X/i1X/屈'■-「I/、iLtn%//%//i1-I-■I-■I%[Jz\.LLL、、■-.£_!3、、■■」_三-■I耳‘1■.■w71*--JJJpl314hihniti4o*j_^u>i--i—a-au-_ia->j_—k>———J.l-uaDC.13-J.l-uL口匚,匚,D匚,匚,匚,五、硬件设计与调试IRA嵌入式工作平台EmbeddedWorkbench为开发不同的MSP430目标处理器项目提供了强有力的开发环境,并为每一种目标处理器提供工具选择。IAREmbeddedWorkbench提供一个嵌入式开发的完整集成环境。一整套的嵌入式开发环境,包括编辑、编译、连接、调试软件,主要支持8到16位处理器。集成的编译器主要产品特征:高效PROMable代码、完全标准C兼容、内建对应芯片的程序速度和大小优化器、目标特性扩充、版本控制和扩展工具支持良好便捷的中断处理和模拟、瓶颈性能分析、高效浮点支持、内存模式选择、工程中相对路径支持。IAREmbeddedWorkbench有如下一些特点:IAREmbeddedWorkbench可以生成节省空间并且稳定可靠的可执行代码。经过反复实验证明,IARSystems的C/C++编译器可以生成高效可靠的可执行代码,并且应用程序规模越大,效果明显。与其他的工具开发厂商相比,系统同时使用全局和针对具体芯片的优化技术。连接器提供的全局类型检测和范围检测对于生成目标的代码的质量是至关重要。IARSystems一贯使用精简的优化技术一基于最新技术架构的,针对AVR的IAREmbeddedWorkbench各新版,生成的代码的尺寸比旧版缩小了10%,远远小于其他同类编译器生成的代码尺寸。IAREmbeddedWorkbench生成的可以执行代码可以运行于更小尺寸、更低成本的微处理器之上,从而降低产品的开发成本。IAREmbeddedWorkbench是一套完整的集成开发工具集合,包括从代码编辑器、工程建立到C/C++编译器、连接器和调试器的各类开发工具,它紧密结合了AtmelICE2000和AtmelJTAGICE,使用户在开发和调试过程中,仅仅使用一种开发环境。用户在开发过程中会有各种不同的需求,例如:用户可能需要开发适用于不同目标系统硬件的应用程序版本,也可能希望将正在调试的子程序包含到已经开发好的早期版本中,但并不希望包含最终代码;适用于不同目标系统硬件的用户应用程序版本常常具有共同的源程序文件,用户希望维护这些源程序文件中的一个,便能对应用程序的每一个版本自动进行修改;应用程序的不同版本之间可能存在相互差异的源程序文件,如应用中依赖于硬件特性的有关文档,这些文件需要分别进行维护,以适应每一个目标系统的版本。IAREmbeddedWorkbench的项目管理模式可以满足上述需求,允许设计者以树状体系结构组织项目,从而可以清晰表现文件之间的隶属关系。在开发简单项目的应用中,用户对于某种目标硬件可能创建 Debug(调试)和Release(发行)两个目标版本。这两个目标版本共同包含项目核心源程序文件的公共组,每一个目标版本还包含一个单独的组,用来存放专用于该目标版本的源程序文件。在开发较为复杂的项目时,IAREmbeddedWorkbench®过帮助用户组织项目结构使开发时间最短,通过汇编和编译最小的源文件组(它们是文件被修改之后完全更新目标代码所必需的)优化开发周期。IAREmbeddedWorkbench的基本操作IAREmbeddedWorkbench是一个方便快捷的集成开发环境,通过相应的环境设置,用户可以高效地对项目进行建立、编辑、编译、连接和调试。和其他的调试软件一样,程序通过了编辑、编译、连接之后就进入了调试阶段。IARC-SPY调试器完全内嵌于Workbench集成环境之中,是一个功能很强的交互式调试器,可以帮助用户查找出一些逻辑设计错误。在C-SPY的管理下,用户可以单步执行程序,也可以在程序中设置断点;可以显示和修改指定内存单元和区域的内容;可以显示和修改寄存器的内容等,这样就便于寻找程序中的错误。在发现错误后,还需要重复上述的编辑、编译、连接和运行等过程,直至程序运行正确。在C-SPY中,用户可以根据需求选择不同的Driver,C-SPY有3种工作方式:FlashEmulationTool 硬件仿真调试。Simulator 软件模拟调试。ROM-Monitor——调试主机与目标系统经RS-232接口联机,调试程序暂存于RAM中。硬件仿真方式是在目标硬件系统的真实环境中进行调试,除了验证程序,还可以检验目标系统的硬件设计性能。主机将代码通过JTAG仿真器下载到目标系统的Flash中运行。选择软件模拟方式调试时,目标系统的运行是在调试主机上以软件模拟实现的,用户可以利用软件模拟调试在目标硬件系统产生之前验证程序的设计思想和逻辑结构。由于C-SPY软件模拟调试完全使用软件模拟目标处理器,不需要硬件,因此,对于许多应用来说这是一种高效而廉价的调试方法。IARC-SPY模拟调试器提供了如下功能:a) 精确模拟指令的执行。b) 程序的分析。c) 中断的模拟。d) 立即断点设置和程序恢复运行。e) 外围设备的模拟(使用C-SPY的宏系统)。f) 在软件模拟调试时基本操作与硬件仿真基本相同。由于软件模拟程序的运行与真实硬件无关,中断的触发不能从硬件上实现,如端口P1、P2的边沿触发中断、定时器中断、串口数据传输中断等,因此,为了验证程序的功能可以通过编写相应的宏定义文件(扩展名为.mac)协助调试。除了普通断点,C-SPY软件模拟调试器可以设置立即断点使程序暂停运行。当处理器要从某一位置读取数据或刚写回数据时,允许C-SPY宏函数调用,动作完成后指令将继续执行。对于像串口和定时器之类的设备,这种断点在模拟存储器映射时是很有用的。当处理器读取一个存储器器映射区域时,一个C-SPY宏函数可以插入并提供一个适当的数值。相反地,当处理器要写入一个数据到一个存储器映射区域时,一个C-SPY宏函数可以根据所写数值完成适当的功能。IARC430编译器IARC430编译器除提供C语言的标准特性,还增加了许多为利用MSP430专用工具而设计的扩展功能。编译器与MSP430IAR系统汇编一起提供,与它集成在一起,共享连接器和库管理工具。IARC430编译器的特性:语言工具:与ANSI规格一致。可用于嵌入式系统的标准函数库,具有可选用的源(代码)。IEEE兼容的浮点算法。对MSP430特殊功能的有力扩展,包括高效的I/O。用户代码与汇编子程序连接。长识别符,多达255个有效字符。多达32000个外部符号。性能:快速编译。避免暂时文件或覆盖的基本存储器的设计。编译时严格的模块接口类型检查。程序源的Lint-like检查。代码产生:可选择的代码速度或大小的最佳化。综合输出选项,包括可重定位的二进制、ASM、ASM+、XREF等。易于理解的出错和警告信息。与C-SPY高级调试器兼容。目标支持:灵活的变量分配。不需要汇编语言的中断函数。使用处理器专用扩展的保持可移植性的#Pragma伪指令。IARC430区别于标准C的地方:IARC430在数据类型上有以下一些方面区别与标准C,具有特殊性。a)外围模块变量外围模块变量(Sfrb)也称作特殊功能寄存器变量,直接位于内部RAM单元。Sfrb范围为0X00至0XFF,Sfrw范围为0X100至0X1FFH,外围模块变量使符号名与此范围的字节或者字相联系。该地址处寄存器可以符号化被寻址,但没有分配存储器空间。例如:P1的中断触发沿选择寄存器的地址为24H,P1的方向选择寄存器的地址为22H,ADC12的控制寄存器的地址为01A2H。可以使用如下外围模块变量定义:SfrbP1IES=0X24H

SfrbP1DIR=0X22HSfrwADC12CTL1=0X01A2H经过定义,以后可以直接通过对应的符号访问这些寄存器。P1DIR=0X01H;P1.0输出b) 指针变量IARC430的指针变量包括代码指针和数据指针,都可以指向0000H〜0FFFFH范围的存储空间。c) 枚举类型用enum关键字,可以使声明的每一个变量具有适合它的值所需的最短正数类型,包括char>short、int或long。d) 浮点类型在标准IEEE格式中,浮点使用4字节数来表示。低于最小极限值的浮点数被看作零而溢出给不定的结果。浮点运算符(+、-、*、/)的精度近似为7位十进制数。对于IARC430来说,float、double和longdouble数据类型没有什么区别。e) 位域表达式中的位域具有与基本类型相同的数据类型(signed、unsignedchar、short、int或者long)。具有基本类型char、short和long的位域是对ANSIC整数位域的扩充。位域变量的封装在从LSB位置开始的特定类型元素中。IARC430头文件:用户程序通过头文件访问库定义,头文件使用#include伪指令与之相结合。为了避免浪费编译时间,定义被划分到许多不同的头部定义,每一个文件覆盖特定的函数区域,用户可以根据使用的内容选择不同的头文件。IAR调试环境提供了MSP430各系列的标准头文件,定义了系列中包含的寄存器的物理地址。在程序中可以直接使用寄存器名或者寄存器中位的名称,这样就避免使用实际的物理地址,使程序设计简洁、高效。例如:#include<msp430x14x.h>Voidmain(void)〃停止看门狗定时器//P1.0输出〃取反P1.0〃停止看门狗定时器//P1.0输出〃取反P1.0//延时P1DIR|=0X01;ForUnsignedintI;P1OUT—0x01;i=50000;do(i--);

while(i!=0);}}其中#include<msp430x14x.h>为文件包含语句,使用文件包含语句后,msp430x14x系列的寄存器资源就可以用名称访问。如看门狗控制寄存器WDTCTL、端口P1方向选择寄存器P1DIR、控制位WDTPW和WDTHOLD等。开发流程如图10所示。图10开发流程图

系统软件设计(a)(b)(c)系统软件设计(a)(b)(c)图11系统流程图整个系统的程序流程图如图11所示。整个系统的基本工作过程为:系统通电之后将会对单片机、键盘、LCD等进行初始化,然后进入LPM0低功耗模式等待中断。中断主要有两个:一个是由看门狗定时器产生的10毫秒的定时中断,提供基准时钟;另一个就是P1口的按键扫描中断,判断是否有键按下以及判断键值并执行相应的程序。在整个系统软件设计中,程序设计包括主程序、键盘程序和显示电路程序。键盘扫描法是一种常用的识别法,在这种方法中,只要CPU空闲,就调用键盘扫描程序,查询键盘并给予处理,CPU的利用率比较高,所以在键盘程序设计中采用的就是扫描法。显示部分用的是液晶显示器TC1602,每一行可以显示16个字符,可显示两行。TC1602内部存有英文字母和十进制数的ASCII码,当单片机向其输入频率时,TC1602可根据输入的数值调用其内部的ASCII码,并在液晶屏和数码管上显示。在软件部分的设计中用到了看门狗定时器(WDT),它是MSP430系列单片机中常用的一种部件。在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰噪声。这些干扰作用于数字器件,极易使其产生误动作,引起MSP430发生“程序跑飞”事故。若不进行有效处理,程序就不能回到正常工作状态,从而失去应有的控制功能。看门狗定时器正是为了解决这类问题而产生的,尤其是在具有循环结构的程序任务中更为有效。在正常操作期间,一次WDT定时时间到,将产生一次器件复位。如果通过编制程序使WDT定时时间稍大于程序执行一遍所用的时间,并且程序执行过程中都有对看门狗定时器清零的指令,使计数器重新计数,则程序正常进行,就会在WDT定时时间到达之前对WDT清零,不会产生WDT溢出,如果由于干扰使程序跑飞,则不会在WDT定时时间到达之前执行WDT清零指令,WDT就会溢出,从而产生系统复位,CPU需要重新运行用户程序,这样程序就可以又恢复正常运行状态。MSP430看门狗除了具有上述系统检测的特定用途之外,还可以作为内部定时器来使用,当选择的时间到达以后,和其他定时器一样产生一个定时中断。本次设计的程序中与看门狗有关的一部分如下:#pragmavector=WDT_VECTOR__interruptvoidwatchdog_timer(void)(seconds=__bcd_add_short(seconds,0x01);if(seconds==0x60)(seconds=0;minutes=__bcd_add_short(minutes,0x01);if(minutes==0x60)(minutes=0;hours=__bcd_add_short(hours,0x01);if(hours==0x13)(hours=0x01;}}}display_time();}#pragmavector=TIMERA0_VECTOR__interruptvoidta1_isr(void)(IE1&=~WDTIE;disp_led();CCR0+=60000;IE1|=WDTIE;}程序中__bcd_add_short()为MSP430单片机自带的一个BCD码的转换函数,它的作用是将两个16进制的数相加,并将值返回。例如:两个16进制的数0x09和0x01相加后的值应为0x0a,但是经__bcd_add_short()函数后返回的值为0x10。矩阵键盘模块驱动图12矩阵键盘按键识别过程键盘模块接的是MSP430F149的P1口。MSP430F149的P1口具有中断功能,因此为了更少的占用系统资源,我们采用中断的方式编写键盘的程序。矩阵式键盘的按键识别过程如图12所示。在这一部分的设计中,主要有判断是否有按键按下、按键的扫描、按键的识别和按键的初始化等几部分程序。当CPU有空闲时就会执行按键扫描程序,并判断是否有键被按下,示例程序如下:unsignedcharkey(void)unsignedcharx=0xff;P1DIR=0XF0;P1OUT=0XE0; //扫描第一行if((P1IN&0X0F)==0X0E)x=12;elseif((P1IN&0X0F)==0X0D)x=9;elseif((P1IN&0X0F)==0x0B)x=5;elseif((P1IN&0X0F)==0x07)x=1;else(P1OUT=0XD0; 〃扫描第二行if((P1IN&0X0F)==0X0E)x=13;elseif((P1IN&0X0F)==0X0D)x=0;elseif((P1IN&0X0F)==0x0B)x=6;elseif((P1IN&0X0F)==0x07)x=2;else当有按键被按下时就会执行按键识别程序,判断是哪一个按键被按下,完成什么样的功能,如下:#pragmavector=PORT1_VECTOR__interruptvoidport1key(void)if(keyj()!=0X0f)(LCD_delay(300);//消抖动if(keyj()!=0X0f)(i=key();if((i>=0)&&(i<=9))(IE1&=~WDTIE;switch(j)(case0:if(i<=1){BCD[j]=i;j++;}break;case1:if(BCD[0]==0)(BCD[j]=i;j++;}elseif(i<=2)(BCD[j]=i;j++;}break;在这一部分中有一个按键消抖的功能,是为了防止按键抖动产生的错误识别。LCD_delay(300),这一句就是一个延时功能的语句,就是延时一段时间后再判断是否按键仍被按下,以此完成消抖的功能。实验感想与心得体会:本次实验中,经过电路设计、编程以及调试等一系列的操作,将大学所学习的各种知识联系起来,融会贯通,深入理解,更好地掌握了所学习到的知识,增强了实践动手能力。另外,在制作过程中体会到小小的成就感,对于自己的能力有了更好的认识。还有,在小组合作中学习分工合作,明白了小组的强大作用,各司其职能更好的达到最好的效果。:本次实验的电路设计对于自己来说确实是一个比较大的挑战。首先是软件的使用,由于之前并没有使用Protel设计过软件,而且自己之前也只是学习过理论知识,在老师介绍过软件的使用方法之后,自己也开始慢慢熟悉的使用方法。随后在确定参数时查阅了很多书籍,也在网上查找了很多的资料,最终找到了公式也按照要求设计好了器件。在绘制PCB电路图示,由于也是第一次设计,所以在使用软件上也是磕磕绊绊,不断地修正错误,不断地改正方法,最终绘制出了正确的PCB图,还功夫不负有心人吧,还是很有收获的。整个实验做下来,虽然遇到了不少困难,但是还好有队友的支持以及坚持不懈的努力,最终也是完成了整个设计,整个过程让我受益匪浅,收获的不只是知识,更多的是学习和实践的能力。参考文献沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机原理与应用[M].北京:清华大学出版社,2004.沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机实践与系统设计[M].北京:清华大学出版社,2004.康华光.模拟电子技术基础[M].北京:高等教育出版社,2006.阎石.数字电子技术基础[M].北京:高等教育出版社,2006.马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2005.崔武子,付钪,鞠慧敏.C语言程序设计实践教程[M].北京:清华大学出版社,2005.黄继昌.实用单元电路及应用[M].北京:人民邮电出版社,2006.程序清单:#ifndef__LCD_1602_test_h#define__LCD_1602_test_h#include〃msp430x14x.h〃#defineSET_LCD_1602_ENP3OUT|=0x04 //pin2#defineCLR_LCD_1602_ENP3OUT&=~0x04#defineSET_LCD_1602_RSP3OUT|=0x01 //pin0#defineCLR_LCD_1602_RSP3OUT&=~0x01#defineSET_LCD_1602_RWP3OUT|=0x02 //pin1#defineCLR_LCD_1602_RWP3OUT&=~0x02#defineLCD_I0P2OUTvoidLCD_delay(unsignedinti);voidLCD_en_command(unsignedcharcommand);voidLCD_en_dat(unsignedchartemp);voidLCD_init(void);voidLCD_set_xy(unsignedcharx,unsignedchary);voidLCD_write_char(unsignedx,unsignedchary,unsignedchardat);voidLCD_write_string(unsignedcharX,unsignedcharY,unsignedchar*s);#endif#include〃LCD_1602.h〃voidLCD_delay(unsignedinti)(for(;i>0;i--);}voidLCD_en_command(unsignedcharcommand)(P3DIR=0x07;P2DIR=0xFF;CLR_LCD_1602_RS;CLR_LCD_1602_RW;LCD_I0=command;SET_LCD_1602_EN;LCD_delay(50);CLR_LCD_1602_EN;}

voidLCD_en_dat(unsignedchardat)(P3DIR=0x07;P2DIR=0xFF;SET_LCD_1602_RS;CLR_LCD_1602_RW;LCD_I0=dat;SET_LCD_1602_EN;LCD_delay(100);CLR_LCD_1602_EN;}voidLCD_set_xy(unsignedcharx,unsignedchary)(unsignedcharaddress;if(y==0)address=0x80+x;elseaddress=0xc0+x;LCD_en_command(address);}voidLCD_write_char(unsignedx,unsignedchary,unsignedchardat)(LCD_set_xy(x,y);LCD_en_dat(dat);}voidLCD_write_string(unsignedchar(LCD_delay(200);LCD_set_xy(X,Y);while(*s)(LCD_I0=*s;LCD_en_dat(*s);s++;}}voidLCD_init(void){ —LCD_delay(2000);//LCD_delay(20000);P3DIR=BIT0+BIT1+BIT2;LCD_en_command(0x38);//LCD_en_command(0x38);//LCD_en_command(0x38);LCD_delay(200);LCD_en_command(0x0c);//LCD_en_command(0x0e);LCD_delay(200);LCD_en_command(0x01);LCD_delay(1000);X,unsignedcharY,unsignedchar*s)//LCDcontrolbus//8位接口,两行显示,X,unsignedcharY,unsignedchar*s)//LCDcontrolbus//8位接口,两行显示,5*7点阵〃整体显示开,光标开,闪烁开〃清除显示〃光标右移,AC+1,禁止滚动//LCD_en_command(0x80);////LCD_en_command(0x80);//设置DDRAM地址为80}/*voidmain()(unsignedchars[]="abcdef";//unsignedchar*p;//p=s;LCD_init();LCD_en_command(0x01);LCD_en_command(0x80);//LCD_delay(200);LCD_write_string(0,1,s);LCD_write_string(8,1,s);//LCD_write_string(0,0,s);//while(1)//(//LCD_write_string(1,1,s);//LCD_write_char(0,0,'w');//}//LCD_set_xy(0,0);/*while(*p)(LCD_I0=*p;LCD_en_dat(*p);p++;}//LCD_write_string(2,0,s);//LCD_write_char(8,1,'2');}*/#include<msp430x14x.h>#include〃LCD_1602.h〃staticunsignedcharseconds=0,minutes=0,hours=0x12;//unsignedcharcode[10]={'0',T','2','3','4','5','6','7','8','9'};unsignedcharcode[16]={'0',T','2','3','4','5','6','7','8','9','a','b',c,d,e,f};unsignedcharBCD[6]={1,2,0,0,0,0};unsignedchardisp_BCD[6]={1,2,0,0,0,0};unsignedchari=0;unsignedcharj=0;unsignedchars1[]="SETTIME";unsignedchars2[]="NOWTIME";unsignedcharseg[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0xc1,0x1f,0x01,0x19};voiddisp_led(void)(unsignedchari=0;unsignedchartemp=0x80;for(i=0;i<5;i++)(P4DIR=0xFF;P5DIR=0xFF;P4OUT=temp;temp=temp>>1;P5OUT=seg[disp_BCD[i]];LCD_delay(500);}}voidincHours(void)(hours=__bcd_add_short(hours,0x01);if(hours==0x13)hours=0x01; //Ifhrstransitionis12to13,hrs=1}voidincMinutes(void)(minutes=__bcd_add_short(minutes,0x01);if(minutes==0x60)(minutes=0;//incHours();}}voidincSeconds(void)(seconds=__bcd_add_short(seconds,0x01);if(seconds==0x60)(seconds=0;//minutes();}}voiddisplay_time(void)//conversiontodisplay(disp_BCD[0]=(hours&0xF0)>>4;disp_BCD[1]=hours&0x0F;disp_BCD[2]=(minutes&0xF0)>>4;disp_BCD[3]=minutes&0x0F;disp_BCD[4]=(seconds&0xF0)>>4;disp_BCD[5]=seconds&0x0F;LCD_write_string(4,0,s2);LCD_write_char(4,1,code[disp_BCD[0]]);LCD_write_char(5,1,code[disp_BCD[1]]);LCD_write_char(6,1,':');LCD_write_char(7,1,code[disp_BCD[2]]);LCD_write_char(8,1,code[disp_BCD[3]]);LCD_write_char(9,1,':');LCD_write_char(10,1,code[disp_BCD[4]]);LCD_write_char(11,1,code[disp_BCD[5]]);return;}voidconv(void)hours=(BCD[0]<<4)|BCD[1];minutes=(BCD[2]<<4)|BCD[3];seconds=(BCD[4]<<4)|BCD[5];LCD_set_xy(0,1);LCD_write_char(4,1,code[BCD[0]]);LCD_write_char(5,1,code[BCD[1]]);LCD_write_char(6,1,':');LCD_write_

温馨提示

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

评论

0/150

提交评论